1. ホーム
  2. アイオス

[解決済み】App Transport Securityポリシーが安全な接続の使用を要求するため、リソースをロードできませんでした。

2022-03-23 23:06:17

質問

Xcodeを7.0またはiOS 9.0にアップデートしたときに問題に直面しました。 どういうわけか、次のようなタイトルのエラーが出るようになりました。

リソースは読み込めませんでした。 ポリシーでは、安全な接続の使用が必要です"。

ウェブサービスメソッドです。

-(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の以前のバージョンでは、サービスは正常に動作していましたが、Xcode 7.0 (iOS 9.0)にアップデートしたところ、上記のWebサービスメソッドを呼び出すときに、以下のような問題が発生するようになりました。ログアウトしたエラーは以下の通りです。

接続に失敗しました。Error Domain=NSURLErrorDomain Code=-1022 "接続に失敗しました。 App Transport Security ポリシーにより、リソースを読み込むことができませんでした。 は安全な接続の使用を要求しています。 UserInfo={NSUnderlyingError=0x7fada0f31880 {Error Domain=kCFErrorDomainCFNetwork Code=-1022 "(null)"}, NSErrorFailingURLStringKey=。 マイサービスURL , NSErrorFailingURLKey=。 マイサービスURL , NSLocalizedDescription=リソースが読み込めませんでした。 App Transport Security ポリシーにより、安全な 接続。}

私は次の質問と回答を試みたが、そこに任意の結果を得ることができませんでした、私はそのサービスコールのエラーを削除することができます任意の事前のアイデアがあるのですか?

  1. リソースが読み込めなかったのはios9です。
  2. App Transport Security Xcode 7 beta 6
  3. https://stackoverflow.com/a/32609970

解決方法は?

私は、info.plistにいくつかのキーを追加することで解決しました。 私が行った手順は以下の通りです。

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

  2. というキーを追加しました。 NSAppTransportSecurity として Dictionary .

  3. というサブキーを追加しました。 NSAllowsArbitraryLoads として Boolean に設定し、その値を YES 下図のように

プロジェクトをクリーンアップし、現在はすべて以前のように正常に動作しています。

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

EDITです。 または、ソースコード内の 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>