所以,昨晚发布的iOS新测试版SDK有“应用传输安全”,鼓励开发者使用https而不是http。原则上,这是一个好主意,我已经在我们的登台/生产环境中使用了https。然而,当iOS应用程序连接到我笔记本电脑上运行的web服务时,我在本地开发环境中没有设置https。

从今天早上的一些测试来看,即使您提供http URL, URL加载系统也会决定使用https。有人知道如何禁用这种行为吗——即使只是针对特定的url ?


当前回答

遵循这一点。

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

打开我的项目信息。plist文件 添加了一个名为NSAppTransportSecurity的Key作为字典。 添加了一个名为NSAllowsArbitraryLoads的子键作为布尔值,并将其值设置为YES,如下图所示。

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

参考链接。

其他回答

遵循这一点。

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

打开我的项目信息。plist文件 添加了一个名为NSAppTransportSecurity的Key作为字典。 添加了一个名为NSAllowsArbitraryLoads的子键作为布尔值,并将其值设置为YES,如下图所示。

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

参考链接。

以下是对我有效的方法:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
        <key><!-- your_remote_server.com / localhost --></key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
        </dict>
    <!-- add more domain here -->
    </dict>
</dict>

我只是想补充这一点来帮助别人,节省一些时间:

如果你正在使用:CFStreamCreatePairWithSocketToHost。确保你的主机与你的。plist中的主机相同,或者如果你有单独的套接字域,就把它添加到那里。

CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)/*from .plist*/, (unsigned int)port, &readStream, &writeStream);

希望这对你有帮助。欢呼。:)

上面的配置不适合我。我尝试了很多组合键,这一个工作得很好:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>mydomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>

如果你只是想禁用本地开发服务器的应用程序传输策略,那么以下解决方案可以很好地工作。它是有用的,当你不能,或它是不切实际的,设置HTTPS(例如,当使用谷歌应用程序引擎开发服务器)。

正如其他人所说,ATP绝对不应该在生产应用中被关闭。

1)使用不同的plist进行调试

复制你的Plist文件和NSAllowsArbitraryLoads。使用这个Plist进行调试。

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

2)排除本地服务器

或者,您可以使用单个plist文件并排除特定的服务器。然而,它看起来不像你可以排除IP 4地址,所以你可能需要使用服务器名(在系统首选项->共享中找到,或在您的本地DNS中配置)。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>server.local</key>
        <dict/>
        <key>NSExceptionAllowsInsecureHTTPLoads</key>
        <true/>
    </dict>
</dict>

我已经解决为plist文件。

添加一个NSAppTransportSecurity: Dictionary。 添加名为“NSAllowsArbitraryLoads”的子键作为布尔值:YES