iOS 模拟器未连接到网络服务

标签 ios xcode cordova

我正在 XCode 上开发一个 Cordova 项目。

我正在使用 Cordova v5.4.1、Xcode v7.2 和 iOS 模拟器 v9.2。

该应用程序正在模拟器上成功构建和部署,但未使用 REST Web 服务。我能够在模拟器的 Safari 浏览器中查看来自 Web 服务的 JSON 响应,但应用程序显示的并不相同。

我在开发人员设置中启用了“允许 HTTP 服务”,还尝试重新启动模拟器和 Xcode,但没有任何帮助。我还将这些行添加到 config.xml。

<plugin name="cordova-plugin-whitelist" spec="1" />
<access origin="*" />

如何解决这个问题?

最佳答案

也许您被 iOS 9 ATS(应用程序传输安全)阻止了?

要测试是否是这种情况,请在您的 Mac 上使用 Terminal.app 试试这个:

nscurl --ats-diagnostics https://api.your-server.com

如果 ATS 允许连接到 https://api.your-server.com ,您应该在响应的第一个 block 中看到:

Default ATS Secure Connection
---
ATS Default Connection
Result : PASS
---

任何其他情况都意味着 ATS 会阻止 HTTP(S) 请求通过。

要解决此问题,您可以从根本上解决问题(使用带 TLS 1.2、SHA256 或更好的 HTTPS,以及前向保密),这是推荐的解决方案,但并非总是可行,或者为您的服务器定义一个异常(exception)在您的 App-Info.plist 文件中被允许。示例:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>api.your-server.com</key>
        <dict>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>

有关 ATS 的更多信息,以及可用于定义异常的值:https://developer.apple.com/library/prerelease/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

如果一切都失败了,你可以尝试使用这个 Cordova 插件: https://github.com/robertklein/cordova-ios-security 但我不推荐它,因为它会完全禁用 ATS,这是一个非常糟糕的主意™。

关于iOS 模拟器未连接到网络服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35046567/

相关文章:

ios - iOS中的日期格式?

swift - 选项单击变量时出现 xcode 错误

ios - 我需要将所有 Unity 和 Xcode 项目文件添加到 git 存储库吗?

ios - 在设备上测试时,PhoneGap 应用程序上未找到 Index.html

android - Uncaught Error : Error calling method on NPObject. 在

javascript - 提取与 XMLHttpRequest : clarifications on the under the hood implementations

iOS 版本特定的 Default.png?

angularjs - AngularJs + Sqlite-在sqlite回调函数中填充变量

IOS方法调用

ios - 如何在 iOS 设备上测试 Cordova/ionic 应用程序?