既存のアプリを iOS9 で実行しようとしましたが、使用中にエラーが発生しましたAFURLSessionManager
。
__block NSURLSessionDataTask *task = [self.sessionManager dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {
if (error) {
} else {
}
}];
[task resume];
次のエラーが発生します:
Error Domain=NSURLErrorDomain Code=-999 "cancelled.
次のログも取得します:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824
CFNetwork SSLHandshake failed (-9824)
アップデート:ソリューションに複数の更新を追加しました:iOS 9 で NSURLSession/NSURLConnection HTTP ロードが失敗しました
ベストアンサー1
解決策が見つかりました:
iOS9 では、ATS は HTTPS の使用を含むネットワーク呼び出し中のベスト プラクティスを適用します。
ATS は、偶発的な漏洩を防ぎ、安全なデフォルト動作を提供し、導入も簡単です。新しいアプリを作成する場合でも、既存のアプリを更新する場合でも、できるだけ早く ATS を導入する必要があります。新しいアプリを開発する場合は、HTTPS のみを使用する必要があります。既存のアプリがある場合は、今すぐにできる限り HTTPS を使用し、できるだけ早くアプリの残りの部分を移行する計画を作成する必要があります。
ベータ 1 では、現在、info.plist でこれを定義する方法はありません。解決策は、手動で追加することです。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
アップデート1: これは、iOS9 ATS サポートを導入する準備ができるまでの一時的な回避策です。
アップデート2:詳細については、次のリンクを参照してください。http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/
アップデート3:TLS 1.0のみをサポートするホスト(YOURHOST.COM)に接続しようとしている場合
これらをアプリのInfo.plistに追加します
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>YOURHOST.COM</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>1.0</string>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>