SSL_ERROR_SSL(1): operation failed within the library

旧街凉风 提交于 2019-12-02 15:45:38

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": "<someClientId>",
                                       "refresh_token": "<someRefreshToken>",
                                       "client_secret": "<someClientSecret>"])
            .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.

I had the same warning with codegen Swagger in emulator on any response call. But all worked. This warning disappeared only when I added environment variable Hide strange unwanted Xcode logs

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!