SSL_ERROR_SSL(1): operation failed within the library

后端 未结 2 1725
囚心锁ツ
囚心锁ツ 2021-01-30 16:32

I am getting some SSL Errors (which are causing my project to stop/hang with no crash as I have a DispatchGroup waiting for the request), which I don\'

2条回答
  •  一生所求
    2021-01-30 17:02

    Deadlock

    I assume spotifyRequest will be called on the main thread.

    So if the main thread reaches the line

    group.wait()
    

    and this line of responseJSON completionHandler was not called yet:

    group.leave()
    

    then the main thread is blocked due to the call of group.wait() above. Due to the blocked main thread group.leave() can't be called. Classical deadlock.

    Verfication

    Setting a breakpoint to the line

    if let safeStatus = status {
    

    shows that this line is never called.

    Minimal Example that is running

    As a starting point here the code for a minimal example that delivers a result.

    import UIKit
    import Alamofire
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            self.contactSpotify {
                print ("result: \(String(describing: $0)) error: \(String(describing: $1))")
            }
        }
    
        func contactSpotify(completion: @escaping ([String: Any]?, Error?) -> Void) {
            let url = URL(string: "https://accounts.spotify.com/api/token")!
            Alamofire.request(url,
                              method: .post,
                              parameters: ["grant_type": "refresh_token",
                                           "client_id": "",
                                           "refresh_token": "",
                                           "client_secret": ""])
                .validate()
                .responseJSON { response in
                    guard response.result.isSuccess else {
                        completion(nil, response.result.error)
                        return
                    }
    
                    completion(response.result.value as? [String: Any], nil)
            }
        }
    
    }
    

    This gives as output in the console:

    result: Optional(["access_token": XXX, "scope": user-read-email user-read-private, "token_type": Bearer, "expires_in": 3600]) error: nil
    

    see Screenshot:

    ATS Settings in info.plist

    Spotify offers a valid TLS certificate chain on their server. So there is no need for ATS settings in info.plist.

    SSL Warnings in Console

    I get the same SSL warnings in the console when I run the application on an iOS 12 simulator like you. Nonetheless the connection is established and the request delivers data. Perhaps this is gone in one of the next betas.

提交回复
热议问题