如何将NSAppTransportSecurity添加到Cordova项目

时间:2015-11-12 16:40:10

标签: ios cordova ionic-framework

我正在从事离子cordova项目。该应用程序需要配置为iOS 9版本的App Transport Security Exceptions。

有谁知道如何将以下配置添加到cordova项目配置文件中? (config.xml中)

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

此致

4 个答案:

答案 0 :(得分:5)

最简单的解决方案可能是使用插件。看看cordova-plugin-transport-security

cordova plugin add cordova-plugin-transport-security --save

您可以在其plugin.xml文件中看到它如何修改plist值。

<platform name="ios">
  <config-file target="*-Info.plist" parent="NSAppTransportSecurity">
      <dict>
          <key>NSAllowsArbitraryLoads</key>
          <true/>
      </dict>
  </config-file>
</platform>

答案 1 :(得分:5)

参考Whitelist Guide这应该通过添加

来完成
<access origin='*' allows-arbitrary-loads-in-media='true' allows-arbitrary-loads-in-web-content='true' allows-local-networking='true' />

到你的config.xml。

答案 2 :(得分:0)

我总是使用Hook脚本和plistbuddy完成此操作。所以我将它放在hooks文件夹中,确保它被设置为可执行文件权限(755会这样做):

    #!/bin/bash

echo "Adjusting plist for App Transport Security exception."
val=$(/usr/libexec/plistbuddy -c "add NSAppTransportSecurity:NSExceptionDomains:DOMAIN_TO_SET_AS_EXCEPTION:NSTemporaryExceptionAllowsInsecureHTTPLoads bool true" platforms/ios/HelloCordova/HelloCordova-Info.plist 2>/dev/null)
echo "Done"

将“DOMAIN_TO_SET_AS_EXCEPTION”替换为您的域名,例如myhost.example.com - 我不喜欢在你需要之前设置所有域名,所以建议使用白名单方法。

然后为了解决这个问题,我将iOS平台部分中的config.xml修改为:

    ...
<platform name="ios">
    <hook type="before_build" src="hooks/ios_ats.sh" />
    ...

我写了一个blog post来展示这个以及一个关于Github的完整示例项目,从帖子链接到你可以从中获得一个合适的脚本。

答案 3 :(得分:0)

您可以直接在edit-config中使用config.xml标签来更新应用程序Info.plist文件中的属性。

这类似于Connor's answer,但允许对应用程序的配置进行更一般的控制。

对于这种特殊情况,您可以包括以下内容(用您的应用名称替换${APP_NAME},这并不奇怪):

  <edit-config file="${APP_NAME}/${APP_NAME}-Info.plist" target="NSAppTransportSecurity" mode="merge">
    <dict>
      <key>NSAllowsArbitraryLoads</key>
      <false/>
    </dict>
  </edit-config>