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
私は info.plist にいくつかのキーを追加することでこの問題を解決しました。私が実行した手順は次のとおりです。
プロジェクトターゲットの
info.plist
ファイルを開いたNSAppTransportSecurity
と呼ばれるキーを追加しましたDictionary
。NSAllowsArbitraryLoads
as というサブキーを追加し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>