Je reçois des SSL Error
s (qui causent l’arrêt/le blocage de mon projet sans crash car j’ai une variable DispatchGroup
en attente de la demande), dont je ne sais pas comment ils sont causés, ce qu’ils sont ou quoi faire. .
J'ai lu de nombreuses pages à peu près sur ce problème, mais il n'y a pas beaucoup de documentation ou de personnes qui ont le même problème. J'ai essayé changer l'info.plist mais cela ne semble pas avoir aidé. plist
's ressemble à ceci: (accounts.spotify.com
est le domaine de l'URL de la demande de jeton d'accès)
Je peux voir que mon code échoue lorsque je fais une demande au serveur. (Ceci est dans mon cadre). Comme mentionné précédemment, j'ai une DispatchGroup
en attente de cette demande mais le code s'arrête.
self.currentToken = try self.spotifyRequest("https://accounts.spotify.com/api/token", method: .post, parameters: parameters)
Ma méthode de demande:
private func spotifyRequest(_ url: URLConvertible, method: HTTPMethod, parameters: Parameters? = nil, headers: HTTPHeaders? = nil) throws -> JSONStandard {
// Create a dispatch group to handle threads
let group = DispatchGroup()
group.enter()
// Status of the request (starts as nil)
var status: JSONStandard?
DispatchQueue.global(qos: .userInitiated).async {
Alamofire.request(url, method: method, parameters: parameters, headers: headers).responseJSON(completionHandler: { response in
// Check if response is valid
if let requestResponse = response.result.value as? JSONStandard {
status = requestResponse
} else {
status = nil
}
// Let the next tasks be completed, it has finished waiting for the request
group.leave()
})
}
// Wait for a result
group.wait()
// Return value or throw an error
if let safeStatus = status {
return safeStatus
} else {
getAccessToken()
throw SpotifyError.failedToCompleteRequest
}
}
Je ne sais pas exactement ce qui a causé le problème, car tout ce que j'ai fait a été de modifier légèrement et d'archiver à nouveau le cadre.
Cependant, auparavant, cela fonctionnait à la fois (car j'utilise ce script de framework universel )
Voici mon journal des collisions (que je ne comprends pas!):
2018-08-18 21: 36: 45.747984 + 0100 votes de vote [4854: 1517160] [BoringSSL] boringssl_session_errorlog (224) [C2.1: 2] [0x107d7c600] [boringssl_session_read] SSL_ERROR_SSL (1): l'opération a échoué dans la bibliothèque
2018-08-18 21: 36: 45.748123 + 0100 Songvote [4854: 1517160] bingsSSl_session_handshake_error_print (205) [C2.1: 2] [0x107d7c600] 4427428040: erreur: routines SSL: OPENL_in: /Library/Caches/com.Apple.xbs/Sources/boringssl/boringssl-109.200.32/ssl/ssl_lib.cc:1081:
2018-08-18 21: 36: 45.748238 + 0100 votes de vote [4854: 1517160] [BoringSSL] boringssl_session_errorlog (224) [C2.1: 2] [0x107d7c600] [boringssl_session_read] SSL_ERROR_SSL (1): l'opération a échoué dans la bibliothèque
2018-08-18 21: 36: 45.748432 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print (205) [C2.1: 2] [0x107d7c600] 4427428040: erreur: 1002d7: erreur de production /Library/Caches/com.Apple.xbs/Sources/boringssl/boringssl-109.200.32/ssl/ssl_lib.cc:1081:
2018-08-18 21: 36: 45.754554 + 0100 votes de vote [4854: 1517160] [BoringSSL] boringssl_session_errorlog (224) [C2.1: 2] [0x107d7c600] [boringssl_session_read] SSL_ERROR_SSL (1): l'opération a échoué dans la bibliothèque
2018-08-18 21: 36: 45.754640 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print (205) [C2.1: 2] [0x107d7c600] 4427428040: Erreur: 1002d7: erreur de production: /Library/Caches/com.Apple.xbs/Sources/boringssl/boringssl-109.200.32/ssl/ssl_lib.cc:1081:
2018-08-18 21: 36: 45.754717 + 0100 votes de vote [4854: 1517160] [BoringSSL] boringssl_session_errorlog (224) [C2.1: 2] [0x107d7c600] [boringssl_session_read] SSL_ERROR_SSL (1): l'opération a échoué dans la bibliothèque
2018-08-18 21: 36: 45.754796 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_handshake_error_print (205) [C2.1: 2] [0x107d7c600] 4427428040: Erreur: 1002d7: erreur de stockage: /Library/Caches/com.Apple.xbs/Sources/boringssl/boringssl-109.200.32/ssl/ssl_lib.cc:1081:
2018-08-18 21: 38: 43.427156 + 0100 votes de vote [4854: 1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames (1301) [C1.1: 2] [0x107e1b4c0] échec de l'obtention des trames de sortie, état 8196.
2018-08-18 21: 38: 43.427656 + 0100 votes de vote [4854: 1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames (1301) [C1.1: 2] [0x107e1b4c0] échec de l'obtention des trames de sortie, état 8196.
2018-08-18 21: 38: 43.429723 + 0100 votes de vote [4854: 1517503] Statut de lecture de TIC [1: 0x0]: 1:57
2018-08-18 21: 38: 43.429976 + 0100 votes de vote [4854: 1517503] Statut de lecture de TIC [1: 0x0]: 1:57
2018-08-18 21: 38: 46.008365 + 0100 votes de vote [4854: 1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames (1301) [C2.1: 2] [0x107d7c600] échec des cadres de sortie, état 8196
2018-08-18 21: 38: 46.008664 + 0100 votes de vote [4854: 1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames (1301) [C2.1: 2] [0x107d7c600] échec des cadres de sortie, état 8196
2018-08-18 21: 38: 46.010037 + 0100 votes de vote [4854: 1517503] Statut de lecture de TIC [2: 0x0]: 1:57
2018-08-18 21: 38: 46.010215 + 0100 votes de vote [4854: 1517503] Statut de lecture de TIC [2: 0x0]: 1:57
C’est tout pour une requête Spotify
à travers Alamofire
qui fonctionnait auparavant et qui, mystérieusement, ne fonctionne plus. Cela ne fonctionne pas sur mon appareilOUle simulateur.
Est-ce un problème lié aux connexions Internet sécurisées? Ou est-ce un autre problème?
Quelques liens vers ce que j'ai regardé:
Éditions:
Est-ce un problème sur les serveurs de Spotify? Ou un bug dans Xcode 10? J'ai déplacé mes fichiers framework .Swift
dans mon projet et j'obtiens toujours les journaux.
Je reçois aussi ces erreurs avant ma demande, étrange ????.
C’est ce qu’est une erreur de négociation, mais je ne fais aucune configuration de ceci:
L'établissement de la liaison SSL est lancé lorsque votre navigateur envoie une demande de connexion sécurisée à un serveur Web. Le serveur envoie une clé publique à votre ordinateur, lequel vérifie le certificat par rapport à une liste connue d'autorités de certification. ... Testez votre fonctionnalité SSL en provoquant intentionnellement l'échec de la négociation.
J'ai même essayé de passer à la caisse sur une version antérieure pour annuler toutes les modifications (qui fonctionnaient parfaitement dans les versions précédentes) en utilisant git
, ce qui n'a eu aucune incidence sur ce point.
Edit: La solution temporaire:
Il semble que iOS 12 ne fonctionne plus avec ces requêtes réseau. J'ai envoyé un rapport de bogue à Apple il y a 2 jours, alors j'espère qu'ils vont le réparer rapidement. Alors qu'est-ce que j'ai fait?
Eh bien, pour le moment, mon iPhone 7 est inutile comme je le suis sur iOS 12 beta. Donc, la seule option pour le moment est d’exécuter mon projet sur le simulateur. Pour ce faire (comme si vous utilisiez Xcode 10 beta car les simulateurs sont iOS 12), accédez à Xcode -> Preferences -> Components -> iOS 11.4 Simulator
puis téléchargez-le. Maintenant, lorsque vous sélectionnez un simulateur, sélectionnez ceux qui disent iOS 11.4
.
Qu'est-ce qui cause ça?
Bien que cette erreur ne devrait avoir aucune incidence, elle est générée lorsque vous exécutez votre projet dans iOS 12. Autant que je sache, il ne s'agit PAS d'un problème de sécurité. Cependant, le problème de mon code qui ne fonctionnait pas était dû à un blocage au lieu de ce que je pensais être à cause de cette erreur.
Mise à jour: ce qu'Apple a fait à propos de mon rapport de bogue
Eh bien, bien que je n’aie reçu aucun message ou quoi que ce soit d’Apple, le rapport est marqué comme un «duplicata», comme l’avait déjà signalé un autre avant moi. Si je reçois des informations sur le moment où cela sera corrigé, je le mettrai à jour ici.
Si vous avez des questions, des conseils ou des indications, merci de me le faire savoir! Merci d'avance!
Impasse
Je suppose que spotifyRequest sera appelé sur le thread principal.
Donc, si le fil principal atteint la ligne
group.wait()
et cette ligne de responseJSON completionHandler n'a pas encore été appelée:
group.leave()
alors le thread principal est bloqué à cause de l'appel de group.wait () ci-dessus. En raison du thread principal bloqué, group.leave () ne peut pas être appelé. Impasse classique.
Verfication
Définition d'un point d'arrêt sur la ligne
if let safeStatus = status {
montre que cette ligne n'est jamais appelée.
Exemple minimal qui exécute
Pour commencer, voici le code d’un exemple minimal qui donne un résultat.
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)
}
}
}
Cela donne en sortie dans la console:
result: Optional(["access_token": XXX, "scope": user-read-email user-read-private, "token_type": Bearer, "expires_in": 3600]) error: nil
Paramètres ATS dans info.plist
Spotify offre une chaîne de certificats TLS valide sur leur serveur. Il n’ya donc pas besoin de réglages ATS dans info.plist.
Avertissements SSL dans la console
Je reçois les mêmes avertissements SSL dans la console lorsque je lance l'application sur un simulateur iOS 12 comme vous. Néanmoins, la connexion est établie et la demande fournit des données. Peut-être que cela est parti dans l'un des prochains bétas.
J'ai eu le même avertissement avec codegen Swagger dans l'émulateur pour tout appel de réponse. Mais tout a fonctionné. Cet avertissement a disparu uniquement lorsque j'ai ajouté la variable d'environnement Masquer les journaux Xcode non désirés