1. ホーム
  2. ios

[解決済み] iOS 9でNSURLSession/NSURLConnectionのHTTPロードに失敗する。

2022-06-09 22:55:06

質問

既存のアプリを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 ロードに失敗しました。

どのように解決するのですか?

解決策が見つかりました。

iOS9 では、ATS は HTTPS の使用を含む、ネットワーク通話中のベスト プラクティスを実施します。

Apple のドキュメントより。

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>