Xcode 7.1 beta 2- 禁用 ATS

Posted

技术标签:

【中文标题】Xcode 7.1 beta 2- 禁用 ATS【英文标题】:Xcode 7.1 beta 2- Disable ATS 【发布时间】:2015-12-29 18:37:05 【问题描述】:

嘿,我花了最后一天左右的时间绞尽脑汁尝试禁用 ATS,但我知道这也很糟糕,但我目前只在内部开发应用程序。我在网上尝试了很多建议都无济于事,最新尝试下面的 info.plist。我不知道该怎么办?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>en</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>$(PRODUCT_NAME)</string>
    <key>CFBundlePackageType</key>
    <string>BNDL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string>1</string>

    <key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>localhost</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>
</dict>
</plist>

调试控制台错误打印

error=Optional(Error Domain=NSURLErrorDomain Code=-1022 "资源 无法加载,因为应用程序传输安全策略需要 使用安全连接。” UserInfo=NSUnderlyingError=0x7f9670e85620 错误 域=kCFErrorDomainCFNetwork 代码=-1022 "(null)", NSErrorFailingURLStringKey=http://localhost/sfc/manualorder.php, NSErrorFailingURLKey=http://localhost/sfc/manualorder.php, NSLocalizedDescription=资源无法加载,因为 应用传输安全策略需要使用安全的 连接。)

【问题讨论】:

我不会打扰异常域,我会完全关闭 ATS。从理论上讲,这是一个好主意,但实际上仍然有很多 http 服务。我认为苹果在 ATS 方面走得太远了。阻止不安全的密码和错误的 TLS 版本是好的,但简单地禁止 HTTP 意味着我不得不在我的几个应用程序中关闭 ATS,因为我不知道我的用户将要连接到的服务器 您好 Paul,我完全同意您的看法,因此尝试将其关闭并尝试了许多解决方案,但似乎都不适用于 xcode 7.1 beta 2。Nicolas S 的方式建议应该有效,但似乎根本没有。 您使用的 Xcode 版本无关紧要。这将取决于 ios 版本。您使用的是 9.1 测试版吗?确保您正在编辑正确的 plist @Paulw11 我希望不会。 iOS 9.0 是模拟器上的版本,iPhone 上是 9.0.2。据我所知,我只有一个 info.plist 我刚刚下载了 Xcode 7.1 beta 2 并加载了一个禁用 ATS 的现有应用程序,它运行良好。我正在使用NSAllowsArbitraryLoads 【参考方案1】:

如果要禁用 ATS,只需将其添加到 Info.plist

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

当您完成应用程序的工作后,您可以重新启用它并将您的域列入白名单。

像这样,第一个包括所有子域,第二个不包括:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>maindomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>other.domain.net</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

如果您在模拟器上进行测试,您可能需要添加一个步骤,即清理项目并重置模拟器的内容和设置,然后再次构建并运行。

【讨论】:

首先感谢您的回复,我尝试了您的最佳建议,但对我不起作用,我正在运行 Xcode 7.1 Beta 2,但我会再试一次以再次确认。 更新**再次尝试了您的最佳建议,并且确实无法正常工作。 以防万一,您是否从设备中删除了应用程序,然后清理、构建和运行? 是的!这样做了,还重置了模拟器。现在可以了,谢谢。 @VaishalPatel 太棒了!我已经在答案上添加了一个注释,以供进一步通知,如果你得到它的工作,请选择一个正确的答案,这样问题就结束了:)

以上是关于Xcode 7.1 beta 2- 禁用 ATS的主要内容,如果未能解决你的问题,请参考以下文章

MR_importFromObject 方法在 XCode 7.1 beta (Swiftui 2.0) 中不起作用

找不到开发者磁盘映像 - Xcode 7.1 beta 和 iOS 9.2

XCode 5.1 Beta 4 无法识别 iOS 7.1 Beta 4 测试设备

如何在 Xcode 6.0 Beta 中运行 iOS 7.1 模拟器?

Xcode 6 Beta 在 iPad 7.1 上运行时使用核心数据使应用程序崩溃

我的空 swift 应用程序在部署目标 7.1 的 xcode6-beta 上崩溃