无法加载资源,因为应用程序传输安全策略要求使用安全连接

当我将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服务方法。我得到的日志错误是:

Connection failed: ErrorDomain =NSURLErrorDomain Code=-1022 由于应用程序传输安全策略,资源无法加载 需要使用安全连接。” 用户信息= {NSUnderlyingError = 0 x7fada0f31880{错误 Domain=kCFErrorDomainCFNetwork Code=-1022 "(null)"}, NSErrorFailingURLStringKey = # EYZ0, NSErrorFailingURLKey = # EYZ0, NSLocalizedDescription=资源无法加载 应用程序传输安全策略要求使用安全 连接。}< / p >

我已经尝试了以下问题和答案,但没有得到任何结果,有任何提前的想法,我可以如何删除服务呼叫错误?

  1. The resource could not be loaded is ios9 . The resource could not be loaded is ios9
  2. App Transport Security Xcode 7 beta 6
  3. https://stackoverflow.com/a/32609970 < a href = " https://stackoverflow.com/a/32609970 " > < / >
346609 次浏览

我已经解决了在info.plist中添加一些键。 我所遵循的步骤是:

  1. 打开我的项目目标info.plist文件

  2. 添加了一个名为NSAppTransportSecurity的键作为Dictionary

  3. 添加了一个名为NSAllowsArbitraryLoads的子键作为Boolean,并将其值设置为YES,如下图所示。

enter image description here

清理项目,现在一切都像以前一样运行良好。

参考链接: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>

你只需要在你的URL中使用HTTPS而不是HTTP,它就会工作

iOS 9(可能)会强制开发者只使用应用传输安全。我偶然在某个地方听到的,所以我自己也不知道这是不是真的。但我对此表示怀疑,并得出了以下结论:

运行在iOS 9上的应用程序将(可能)不再连接到没有SSL的Meteor服务器。

这意味着运行meteor run ios或meteor run ios-device将(可能?)不再工作。

在应用程序的信息。plist, NSAppTransportSecurity [Dictionary]需要有一个键NSAllowsArbitraryLoads [Boolean]设置为YES或流星需要使用https为它的localhost server很快。

交通安全在iOS 9.0及以上版本、OS X v10.11及以上版本提供。

所以默认情况下只有https只允许在应用程序中调用。关闭应用程序传输安全添加以下行在info.plist文件…

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

更多信息:
# EYZ0 < / p >

我已经解决为plist文件。

添加一个NSAppTransportSecurity: Dictionary。

添加名为“NSAllowsArbitraryLoads”的子键作为布尔值:YES

enter image description here

注意,在项目的info.plist中使用NSAllowsArbitraryLoads = true会使到任何服务器的所有连接都不安全。如果你想确保只有特定的领域可以通过不安全的连接访问,试试这个:

enter image description here

或者,作为源代码:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>domain.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>

清洁,编辑后构建项目。

在Xcode 7.1以上(swift 2.0)

enter image description here

适用于iOS 10。x和Swift 3。X[也支持以下版本]只需在'info.plist'中添加以下行

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

我结合了上面提到的许多选项,设法解决了这个问题。我将包括一份清单,上面列出了我必须做的所有事情。

简而言之:

  1. 设置NSAllowsArbitraryLoads为真为我的手表扩展(不是我的手表应用程序)。
  2. 确保我使用的是https而不是http

第一步:

首先,最明显的是,我必须添加一个NSAppTransportSecurity键作为字典在我的手表扩展的info.plist子键称为NSAllowsArbitraryLoads作为布尔值设置为真。只有设置在手表扩展,而不是手表应用程序的plist。尽管请注意,这允许所有连接,可能是不安全的。

enter image description here

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

第二步:

然后我必须确保我试图加载的url是https,而不是http。对于任何url,仍然是http我使用:

# EYZ0:

# EYZ0

Obj-C:

# EYZ0

我已经解决了这个问题,在自托管的解析服务器使用一年的签名证书,而不是选项“NSAllowsArbitraryLoads”

Parse Server作为任何node.js服务器都会显示一个你必须指定的HTTPS公共url。例如:

解析-server——appId——masterKey——publicServerURL https://your.public.url/some_nodejs

请随意看看我的配置文件

如果你使用的是Xcode 8.0和swift 3.0或2.2

enter image description here

来自苹果文档

如果你正在开发一款新应用,你应该只使用HTTPS。如果你有一个现有的应用程序,你现在应该尽可能多地使用HTTPS,并制定一个计划,尽快迁移应用程序的其余部分。此外,您通过高级api进行的通信需要使用带有前向保密功能的TLS版本1.2进行加密。如果试图建立一个不符合此要求的连接,则会抛出一个错误。如果你的应用程序需要向一个不安全的域发出请求,你必须在你的应用程序的信息中指定这个域。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中配置应用程序传输安全例外

如果您不是XML的忠实粉丝,那么只需在plist文件中添加下面标签。

enter image description here

如果你使用的是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: stackoverflow.com)


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

enter image description here

打开你的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-->

最后用你的基本Url改变your.domain.com。谢谢。

无法加载资源,因为应用程序传输安全策略要求使用在Swift 4.03中工作的安全连接。

打开你的pList.info作为源代码,并粘贴:

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

# EYZ0。

这是我在这个问题上浪费时间的< em > < / em >第二次,因为我没有注意到我正在更改信息。MyProjectNameUITests下的plist。

在Swift 4中你可以使用

——> Info.plist

->单击信息属性列表中的“+”

添加应用程序传输安全设置作为字典

->单击“加号”图标应用程序传输安全设置

->添加允许任意加载是的

下图是这样的

enter image description here

对于那些在localhost上开发的人,请遵循以下步骤:

  1. 点击Information Property List旁边的“+”按钮,添加App Transport Security Settings并为其分配Dictionary类型
  2. 点击新创建的App Transport Security Settings条目旁边的“+”按钮,添加类型为BooleanNSExceptionAllowsInsecureHTTPLoads,并将其值设置为YES
  3. 右键单击NSExceptionAllowsInsecureHTTPLoads条目,然后单击“右移行”选项,使其成为上述条目的子条目。
  4. 点击NSExceptionAllowsInsecureHTTPLoads条目旁边的“+”按钮,添加类型为BooleanAllow Arbitrary Loads,并将其值设置为YES

注意:它最终看起来应该像下图所示的那样

enter image description here

这是苹果在api上强制加强安全的方式(强制使用http之上的https)。我将解释如何删除此安全设置。


这里的大多数答案都指出将这个键添加到你的info.plist中 # EYZ0 < / p > 仅凭这一点并不能解决我的问题。 我必须在

内添加相同的键 < p > # EYZ0 # EYZ0 < / p >

这将允许来自任何人的不安全连接发生。如果希望只允许特定域使用不安全连接,可以将以下内容添加到info.plist。

enter image description here

如果您使用firebase,它将在NSAppTransportSecurity部分中添加NSAllowsArbitraryLoadsInWebContent = true,而NSAllowsArbitraryLoads = true将不起作用

在XCode 12.5中。IOS 14。我做了以下记录

enter image description here

这是如何信息。Plist源代码如下所示

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

对于XCode 13来说,添加Allow Arbitrary Loads并不是一项简单的工作。因为默认情况下没有名为App Transport Security Settings的键。

你必须发现如何添加一个新的根级键,通过按任何你在信息/自定义iOS目标属性下看到的加号按钮。

详情见此链接:

https://stackoverflow.com/a/72400983/1644618 < a href = " https://stackoverflow.com/a/72400983/1644618 " > < / >

建议只在应用程序中使用https调用。iOS 9.0引入了传输安全性,默认情况下只允许应用程序调用https

然而,如果你仍然想允许所有非https调用- 在信息中添加NSAppTransportSecurity(字典)。plist和 添加名为NSAllowsArbitraryLoads的子键,其布尔值为YES。 更新后,plist应该看起来像

enter image description here

步骤

  • 打开Info.plist
  • 单击Information属性列表下的+
  • 添加应用程序传输安全设置(NSAppTransportSecurity)作为字典
  • 在添加的应用程序传输安全设置下单击+
  • 添加允许任意加载(NSAllowsArbitraryLoads)作为布尔值,并将值设置为YES