Ios 在Xcode 9.2中禁用应用程序传输安全?

Ios 在Xcode 9.2中禁用应用程序传输安全?,ios,ssl,app-transport-security,xcode9.2,Ios,Ssl,App Transport Security,Xcode9.2,我无法在Xcode 9.2中禁用应用程序传输安全ATS。多年来,在针对本地服务器环境运行构建时,我一直禁用ATS,如下所示: 失败并显示错误消息 Error Domain=NSURLErrorDomain Code=-1200发生SSL错误,无法与服务器建立安全连接。UserInfo={kCFStreamErrorCodeKey=-9802,nsLocalizedRecoverysSuggestion=是否仍要连接到服务器?,NSUnderlyingError=0x60c00024afb0{Er

我无法在Xcode 9.2中禁用应用程序传输安全ATS。多年来,在针对本地服务器环境运行构建时,我一直禁用ATS,如下所示:

失败并显示错误消息

Error Domain=NSURLErrorDomain Code=-1200发生SSL错误,无法与服务器建立安全连接。UserInfo={kCFStreamErrorCodeKey=-9802,nsLocalizedRecoverysSuggestion=是否仍要连接到服务器?,NSUnderlyingError=0x60c00024afb0{Error Domain=kCFErrorDomainCFNetwork Code=-1200 null UserInfo={kCFStreamPropertySSLClientCertificateState=0,{KCFnetworkCfStreamsSrorOriginalValue=-9802,{kCFStreamErrorDomainKey=3,{kCFStreamErrorCodeKey=-9802},NSLocalizedDescription=发生SSL错误,无法与服务器建立安全连接,NSErrorFailingUrKey=,NSErrorFailingUrlStringUrlKeyKey=,\U FStreamerRorDomainKey=3}

这个完全相同的请求在Xcode 9.1上同样成功

在这两种情况下,我都是针对iOS 11.1部署目标构建的。您可以看到,Xcode正在将url从http更改为https,这是我不希望看到的

这里有一个超级基本项目的链接,该项目在Xcode 9.1中工作,但在9.2中失败


我还尝试过仅为本地store.dev域禁用ATS,同样,它可以在Xcode 9.1上工作,但不能在9.2上工作。

我最初并没有把它放在一起,但我认为现在的情况是,在iOS 11上,苹果正在支持。我相信,对HSTS预加载列表的支持,以及最近与谷歌的合作,很可能会导致iOS尝试这样做强迫您使用https,这是失败的,我没有注意到您正在尝试使用.dev本地域进行测试,这实际上是这里的关键元素

我认为您唯一的解决方案是将您的本地测试域更改为.dev域以外的域。如果您这样做,您应该能够连接,并且它不会试图强制您在本地dev环境上使用https


简而言之,Google已经获得了.dev顶级域的权限,最近将其添加到HSTS预加载列表中,以强制与.dev域的所有通信都是安全的。在支持HSTS预加载列表的设备上,这会导致所有通信通过HTTPS重定向,这将在不支持HTTPS的服务器上导致错误。

igator在XCode屏幕左侧,单击主项目文件,其中存储了所有文件和文件夹。单击“信息”选项卡。在“自定义iOS目标属性”下,您可以看到更改应用程序传输安全设置的选项。该选项未明确说明,但仍然可用

当您将鼠标悬停在选项上时,您应该会在一个小圆圈中看到+。单击它。XCode将提示您创建应用程序类别。在出现的列表中,向上滚动并选择应用程序传输安全设置


点击这个选项。一旦创建,它会提示你改变布尔值默认值应该是No。在最右边,你应该看到一组上下箭头。点击这里将BoL更改为yes。< /P>在11。x模拟器中似乎不能正常工作。也许现在试着对IOS 10模拟器运行。这肯定是N。不过,我们提交了一个雷达。刚刚看到你使用的是一个.dev域。我们在twitter上读到了关于谷歌现在在所有.dev流量上强制使用HTTPS的HSTS预加载。详细信息请参见下面的我的答案。是的,我想你完全正确。我们也开始在Safari中在本地发现HSTS错误。看起来很多工程师都是这样点击这篇。是的,这是我今天早上通过twitter找到的文章。我最初没有链接这两篇文章,直到我重新阅读了你的帖子并意识到你在本地环境中使用了一个.dev域。很高兴这不是iOS 11/Xcode 9的一个更广泛的问题。它在哪里。单击“信息”选项卡。在“自定义iOS目标属性”下

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
let session = URLSession(configuration: .default)
let url = URL(string: "http://store.dev/api/products.json")!

let task = session.dataTask(with: url) { data, response, error in
    print(data)
    print(response)
    print(error)
}

task.resume()