应用程序传输安全性Xcode 7 beta 6

我目前正在使用Xcode 7 beta 6 。 我正在尝试向“ http://mySubdomain.herokuapp.com ”发送“删除”请求

我收到的错误是:

应用传输安全已阻止明文HTTP(http://)资源加载,因为它是不安全的。 临时例外可以通过您的应用程序的Info.plist文件进行configuration。
进行API调用时出错:Error Domain = NSURLErrorDomain Code = -1022由于App Transport Security策略要求使用安全连接,因此无法加载资源。
NSLocalizedDescription =资源无法加载,因为应用传输安全策略需要使用安全连接。NSUnderlyingError = 0x796f7ef0 {Error Domain = kCFErrorDomainCFNetwork Code = -1022“(null)”}}

在我的实际API调用中,我把“https”,而不是“http”,实际上我的POST请求工作。 但是,DELETE请求会抛出上述错误。

我在这里看到涉及pList文件的解决scheme,但是他们都没有为我工作。 我在下面列出了我的尝试。

第一次尝试:

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

第二次尝试:

 <key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>herokuapp.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSExceptionRequiresForwardSecrecy</key> <false/> <key>NSExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> <key>NSThirdPartyExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> <key>NSRequiresCertificateTransparency</key> <false/> </dict> </dict> </dict> 

最后,我甚至把所有这些临时密钥都放在这里:

 <key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>herokuapp.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryIncludesSubdomains</key> <true/> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSExceptionRequiresForwardSecrecy</key> <false/> <key>NSTemporaryExceptionRequiresForwardSecrecy</key> <false/> <key>NSExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> <key>NSTemporaryThirdPartyExceptionRequiresForwardSecrecy</key> <false/> <key>NSThirdPartyExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> <key>NSTemporaryThirdPartyExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> <key>NSRequiresCertificateTransparency</key> <false/> <key>NSTemporaryRequiresCertificateTransparency</key> <false/> </dict> </dict> </dict> 

所有没有运气! 我总是得到同样的错误。 DELETE请求格式正确,因为当我手动从邮递员,我得到所需的结果。

这里是我的实际的API调用方法,以防万一在这里可能有问题:

 class func makeDELETEALLRequest(completion: (error:Bool) -> Void) { let session = NSURLSession.sharedSession() let url = NSURL(string:"https://mysubdomain.herokuapp.com/42kh24kh2kj2g24/clean") let request = NSMutableURLRequest(URL: url!) request.HTTPMethod = "DELETE" let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in if (error != nil) { print("Error making API call: \(error!)") completion(error: true) } else { let HTTPResponse = response as! NSHTTPURLResponse let statusCode = HTTPResponse.statusCode if (statusCode == 200){ print("Successfully deleted!") completion(error: false) } else { print("Different status code: \(statusCode)") completion(error: true) } } } task.resume() } 

再一次,我正在使用Xcode 7 beta 6

关于我select的答案我select正确的答案对我来说是对的,因为我在我的项目中对所有这些更改进行了错误的pList文件,并且答案是唯一解决这个问题的答案。 其他答案所提供的解决scheme没有错,所以遇到这个问题的其他人应该试一试,因为它们是有效的。 我希望这可以帮助任何人有类似的问题。

升级到xCode 7.0后,我也无法覆盖App Transport Security,尝试使用相同的解决scheme。 在离开它一段时间后,我注意到我已经对“MyAppNametesting”的支持文件下的Info.plist进行了更改,而不是项目本身的更改。 我的项目中的Supporting Files文件夹没有扩展,所以我甚至没有注意到Info.plist。

我敢肯定,典型的业余错误,但在项目导航器中,他们只有几行,我感到沮丧,直到我注意到这个区别。 以为我会提到它,以防你有同样的问题。

我已经通过在info.plist中添加一些键来解决这个问题。 因为我正在使用一些本地应用程序的目标C.

我遵循的步骤是:

  1. 打开我的Projects info.plist文件

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

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

在这里输入图像说明

清理项目,现在一切正常运行。

Ref链接:

  1. https://stackoverflow.com/a/32631185/2905967

  2. https://stackoverflow.com/a/32609970

感谢您尝试将以下内容添加到您的plist文件中:

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

…你可能想尝试改变你的路线:

 let url = NSURL(string:"https://mysubdomain.herokuapp.com/42kh24kh2kj2g24/clean") 

至:

 let url = NSURL(string:"http://mysubdomain.herokuapp.com/42kh24kh2kj2g24/clean") 

道歉,如果你已经尝试了这一点。 我可以理解,当你认为自己已经用尽了所有的途径时,是多么的沮丧。

但是,当我在Xcode 7上运行我的应用程序时,我就可以testing我们的应用程序,其中一个就是“App Transport Security”问题。 我们正在使用基于Oracle的Web服务,现在开始为基于SSL的HTTPconfiguration数字证书已经太迟了。 所以,上面的我的plist文件除了诀窍。 感谢你说你已经试过这个。 但是,只是为了帮助其他人,它确实为我工作。 它需要,因为我没有立即在我们的Oracle盒启用SSL的方式。

我已经解决了作为plist文件。
1.添加一个NSAppTransportSecurity : Dictionary
2.将名为NSAllowsArbitraryLoads子项添加为Boolean : YES

这工作得很好。

在Xcode 8中

  1. 打开我的项目info.plist文件
  2. 将名为AppTransportSecurity的密钥添加为字典。
  3. 将一个名为AllowsArbitraryLoads的子项添加为布尔值,并将其值设置为YES,如下图所示。

在这里输入图像说明