アプリトランスポートセキュリティポリシーで安全な接続の使用が要求されているため、リソースを読み込むことができませんでした。質問する

アプリトランスポートセキュリティポリシーで安全な接続の使用が要求されているため、リソースを読み込むことができませんでした。質問する

Xcodeを7.0またはiOS 9.0にアップデートしたときに問題が発生しました。どういうわけか、タイトルのエラーが発生し始めました。

「App Transport Security ポリシーで安全な接続の使用が要求されているため、リソースを読み込むことができませんでした」

Webサービスメソッド:

- (void)ServiceCall:(NSString*)ServiceName :(NSString *)DataString
{
    NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
    [sessionConfiguration setAllowsCellularAccess:YES];
    [sessionConfiguration setHTTPAdditionalHeaders:@{ @"Accept" : @"application/json" }];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",ServiceURL]];
    NSLog(@"URl %@%@",url,DataString);
    // Configure the Request
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setValue:[NSString stringWithFormat:@"%@=%@", strSessName, strSessVal] forHTTPHeaderField:@"Cookie"];
    request.HTTPBody = [DataString dataUsingEncoding:NSUTF8StringEncoding];
    request.HTTPMethod = @"Post";

    // post the request and handle response
    NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
        {
        // Handle the Response
        if(error)
        {
            NSLog(@"%@",[NSString stringWithFormat:@"Connection failed: %@", [error description]]);

            // Update the View
            dispatch_async(dispatch_get_main_queue(), ^{

                // Hide the Loader
                [MBProgressHUD hideHUDForView:[[UIApplication sharedApplication] delegate].window animated:YES];


            });
            return;
        }
        NSArray * cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:request.URL];
        for (NSHTTPCookie * cookie in cookies)
        {
            NSLog(@"%@=%@", cookie.name, cookie.value);
            strSessName=cookie.name;
            strSessVal=cookie.value;

        }

        NSString *retVal = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    }];

    [postDataTask resume];
}

このサービスは、Xcode の以前のバージョンと iOS の以前のバージョンでは正常に実行されていますが、iOS 9.0 上の Xcode 7.0 にアップデートすると、上記の Web サービス メソッドを呼び出すときに次のような問題が発生し始めました。記録されたエラーは次のとおりです。

接続に失敗しました: エラー ドメイン = NSURLErrorDomain コード = -1022 「App Transport Security ポリシーでは、セキュリティで保護された接続の使用が要求されているため、リソースを読み込むことができませんでした。」 UserInfo = {NSUnderlyingError = 0x7fada0f31880 {エラー ドメイン = kCFErrorDomainCFNetwork コード = -1022 "(null)"}、NSErrorFailingURLStringKey = MyServiceURL、NSErrorFailingURLKey = MyServiceURL、NSLocalizedDescription = App Transport Security ポリシーでは、セキュリティで保護された接続の使用が要求されているため、リソースを読み込むことができませんでした。}

次の質問と回答を試しましたが、結果は得られませんでした。サービス呼び出しエラーを削除する方法について、事前に何かアイデアはありますか?

  1. リソースをロードできませんでした。ios9
  2. アプリトランスポートセキュリティ Xcode 7 ベータ 6
  3. https://stackoverflow.com/a/32609970

ベストアンサー1

私は info.plist にいくつかのキーを追加することでこの問題を解決しました。私が実行した手順は次のとおりです。

  1. プロジェクトターゲットのinfo.plistファイルを開いた

  2. NSAppTransportSecurityと呼ばれるキーを追加しましたDictionary

  3. NSAllowsArbitraryLoadsas というサブキーを追加しBoolean、その値をYES次の画像のように as に設定します。

ここに画像の説明を入力してください

プロジェクトをクリーンアップすると、すべてが以前と同じように正常に実行されるようになりました。

参照リンク:https://stackoverflow.com/a/32609970

編集:または、ファイルのソース コードにinfo.plist以下を追加できます。

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>yourdomain.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
       </dict>
  </dict>

おすすめ記事