我正在处理一个ionic cordova项目。该应用程序需要为iOS 9版本配置App Transport Security Exceptions。
有人知道如何将以下配置添加到cordova项目配置文件中吗?(config.xml)
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
敬礼,
我正在处理一个ionic cordova项目。该应用程序需要为iOS 9版本配置App Transport Security Exceptions。
有人知道如何将以下配置添加到cordova项目配置文件中吗?(config.xml)
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
敬礼,
最简单的解决方案可能是使用插件。可以查看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>
参考白名单指南,应该通过添加来实现
<access origin='*' allows-arbitrary-loads-in-media='true' allows-arbitrary-loads-in-web-content='true' allows-local-networking='true' />
添加到你的config.xml文件中。
您可以使用edit-config
标签直接在config.xml
中更新应用程序的Info.plist文件中的属性。
这类似于Connor的回答,但允许更一般地控制您的应用程序配置。
对于这种特定情况,您可以包含以下内容(将${APP_NAME}
替换为您的应用程序名称,毫不意外):
<edit-config file="${APP_NAME}/${APP_NAME}-Info.plist" target="NSAppTransportSecurity" mode="merge">
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
</dict>
</edit-config>
我一直使用 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" />
...
我写了一篇博客文章,其中展示了这个问题,并附带了一个完整的示例项目,你可以从文章中链接到Github获取适当的脚本。