因此,昨晚发布的iOS测试版SDK新增了"App Transport Security",鼓励开发者使用https而不是Http.原则上,这是一个很好的 idea ,而且我已经在我们的试运行/生产环境中使用了https.但是,当iOS应用程序连接到我在笔记本电脑上运行的Web服务时,我没有在本地开发环境中设置https.

从今天早上的一些情况来看,URL加载系统似乎会决定使用https,即使您给它一个http URL.有没有人知道如何禁用此行为--即使只针对特定的URL?

推荐答案

有关详细信息,请参见Apple's Info.plist reference(感谢@gnasher729).

您可以在信息中为特定域添加例外.普利斯特:

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

每个例外域的所有密钥都是可选的.演讲者没有详细说明其中的任何关键,但我认为它们都相当明显.

(来源:WWDC 2015 session 703, “Privacy and Your App”-30:18)

如果你的应用有充分的理由这样做,你也可以用一个密钥忽略所有应用传输安全限制:

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

如果你的应用程序没有很好的理由,你可能会面临被拒绝的风险:

将NSAllowsAriraryLoads设置为true将允许它工作,但苹果非常明确地表示,他们打算拒绝没有特定原因使用此标志的应用程序.我能想到的使用NSAllowsAriraryLoads的主要原因是用户创建的内容(链接共享、自定义Web浏览器等).在这种情况下,Apple仍然希望您包含对您控制的URL执行ATS的例外.

如果您确实需要访问未通过TLS 1.2提供的特定URL,则需要为这些域编写特定的异常,而不是使用NSAllowsArbitraryLoads设置为yes.您可以在NSURLSession WWDC会话中找到更多信息.

请小心分享NSAllowsArbitraryLoads解决方案.这不是苹果推荐的解决方案.

-kcharwood(谢谢@Marco-Tolman)

Ios相关问答推荐

Flutter中抛出后期应用错误

AVFoundation Camera推出变焦SWIFT

如何在iOS 17中拦截UITextView中的链接点击?UITextItemInteraction已弃用

在滚动视图中固定页眉,但在页眉上方嵌入元素

磁盘上的Objective-C ISA指针与实例化对象时的比较

使用标头UICollectionViewFlowLayout时的简单SwiftUI视图错误

SwiftData共享扩展阻止应用程序打开SQLite文件

如何从单独的视图更改修饰符的值

Task.cancel() 的 TaskPriority 的区别

SwiftUI 图表 BarMark 将注释对齐到图表顶部

SwiftUI 中的偏移量和按钮有问题吗?

使用swift将图像转换为A4大小的pdf

如何使用 Swift 文档注释

如何在通用应用程序中同时支持 iPad 和 iPhone 视网膜图形

如何设置imageView的圆角半径?

@IBDesignable 崩溃代理

iOS:如何从 URL 调试新启动应用程序

我可以通过 UIAppearance 代理设置哪些属性?

如何删除 Swift 数组中的所有 nil 元素?

如何找到 UILabel 的实际行数?