ios - color - 無法加載資源,因為App Transport Security策略要求使用安全連接



swift navigation controller (12)

我將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服務方法時跟隨。 我得到的記錄錯誤是:

連接失敗:錯誤Domain = NSURLErrorDomain Code = -1022“無法加載資源,因為App Transport Security策略要求使用安全連接。” UserInfo = {NSUnderlyingError = 0x7fada0f31880 {Error Domain = kCFErrorDomainCFNetwork Code = -1022“(null)”},NSErrorFailingURLStringKey = MyServiceURL ,NSErrorFailingURLKey = MyServiceURL ,NSLocalizedDescription =無法加載資源,因為App Transport Security策略要求使用安全連接。}

我試過以下問題和答案,但沒有得到任何結果,有任何提前的想法,我如何刪除該服務調用錯誤?

  1. 無法加載的資源是ios9
  2. App Transport Security Xcode 7 beta 6
  3. https://stackoverflow.com/a/32609970

https://src-bin.com


Answer #1

iOS 9.0或更高版本以及OS X v10.11及更高版本中提供了 傳輸安全性

因此,默認情況下,僅在應用中允許 https 調用。 要關閉App Transport Security,請在 info.plist 文件中添加以下行...

<key>NSAppTransportSecurity</key>
  <dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
  </dict>

欲了解更多信息:
https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33


Answer #2

iOS 9(可能)強制開發人員專門使用 App Transport Security 。 我無意中聽到了這個地方,所以我不知道這是否屬實。 但我懷疑它並得出了這個結論:

在iOS 9上運行的應用程序(可能)將不再連接到沒有SSL的Meteor服務器。

這意味著運行meteor run ios或meteor run ios-device將(可能?)不再起作用。

在應用程序的info.plist中, NSAppTransportSecurity [Dictionary] 需要將密鑰 NSAllowsArbitraryLoads [Boolean] 設置為 YES 或者Meteor需要盡快使用 https 作為其 localhost server


Answer #3

在Xcode 7.1之後(swift 2.0)


Answer #4

如果您不是XML的忠實粉絲,那麼只需在plist文件中添加以下標記即可。


Answer #5

對於iOS 10.x和Swift 3.x [也支持以下版本]只需在'info.plist'中添加以下行

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

Answer #6

您只需要在URL中使用HTTPS而不是HTTP,它就可以使用


Answer #7

我已經通過在info.plist中添加一些鍵來解決它。 我遵循的步驟是:

  1. 打開我的Project目標的 info.plist 文件

  2. 添加了一個名為 NSAppTransportSecurity 的密鑰作為 Dictionary

  3. 添加了一個名為 NSAllowsArbitraryLoads 的子 NSAllowsArbitraryLoads 作為 Boolean ,並將其值設置為 YES ,如下圖所示。

清潔項目,現在一切正常,就像以前一樣。

參考鏈接: https://.com/a/32609970 : https://.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>

Answer #8

我已解決為plist文件。

添加NSAppTransportSecurity:Dictionary。

將名為“NSAllowsArbitraryLoads”的子項添加為布爾值:YES


Answer #9

打開你的 pList.info 作為 源代碼, 並在 </dict> 添加以下代碼之前的底部,

 <!--By Passing-->
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>your.domain.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>
    <!--End Passing-->

最後使用您的基本網址更改 your.domain.com 。 謝謝。


Answer #10

無法加載資源,因為App Transport Security策略需要使用在Swift 4.03中工作的安全連接。

打開你的pList.info作為源代碼並粘貼:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

Answer #11

來自Apple文檔

如果您正在開發新應用,則應該專門使用HTTPS。 如果您有現有應用,則應盡可能多地使用HTTPS,並創建一個計劃,以便盡快遷移其餘應用。 此外,您通過更高級別的API進行的通信需要使用具有前向保密性的TLS 1.2版進行加密。 如果嘗試建立不符合此要求的連接,則會引發錯誤。 如果您的應用需要向不安全的域發出請求,則必須在應用的Info.plist文件中指定此域。

繞過應用程序傳輸安全性:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>

允許所有不安全的域

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

閱讀更多: 在iOS 9和OSX 10.11中配置App Transport Security例外


Answer #12

如果你使用Xcode 8.0到8.3.3和swift 2.2到3.0

在我的情況下需要更改URL http:// https:// (如果不工作然後嘗試)

Add an App Transport Security Setting: Dictionary.
Add a NSAppTransportSecurity: Dictionary.
Add a NSExceptionDomains: Dictionary.
Add a yourdomain.com: Dictionary.  (Ex: .com)

Add Subkey named " NSIncludesSubdomains" as Boolean: YES
Add Subkey named " NSExceptionAllowsInsecureHTTPLoads" as Boolean: YES





xcode7