PhoneGap:修改 config.xml 以将属性添加到 Info.plist ion iOS
Posted
技术标签:
【中文标题】PhoneGap:修改 config.xml 以将属性添加到 Info.plist ion iOS【英文标题】:PhoneGap: modify config.xml to add properties to Info.plist ion iOS 【发布时间】:2015-09-14 09:20:42 【问题描述】:对于我的应用程序,我需要为 ios 的 Info.plist 文件添加一些设置。我认为最好的方法是将这些设置添加到我的 config.xml 文件中(我正在使用 PhoneGap)。当我将以下内容添加到 config.xml 文件并运行时
cordova build ios
或
cordova update platform ios
我的 Info.plist 文件中没有添加任何内容,我完全不知道为什么会这样。构建显示“成功”,所以我认为没有语法错误。
我试过了:
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
<config-file target="*-Info.plist" parent="NSAppTransportSecurity">
<array>
<dict>
<key>NSExceptionDomains</key>
<array>
<dict>
<key>s3.amazonaws.com</key>
<array>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow insecure HTTP requests-->
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!--Include to specify minimum TLS version-->
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</array>
</dict>
</array>
</dict>
</array>
</config-file>
</platform>
和
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
<config-file target="*-Info.plist" parent="NSAppTransportSecurity">
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>s3.amazonaws.com</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow insecure HTTP requests-->
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!--Include to specify minimum TLS version-->
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
</config-file>
</platform>
和
<gap:config-file platform="ios" parent="NSAppTransportSecurity">
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>s3.amazonaws.com</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow insecure HTTP requests-->
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!--Include to specify minimum TLS version-->
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
</gap:config-file>
和
<gap:config-file platform="ios" parent="NSAppTransportSecurity">
<array>
<dict>
<key>NSExceptionDomains</key>
<array>
<dict>
<key>s3.amazonaws.com</key>
<array>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow insecure HTTP requests-->
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!--Include to specify minimum TLS version-->
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</array>
</dict>
</array>
</dict>
</array>
</gap:config-file>
但是 Info.plist 文件中没有添加任何内容。我在这里做错了什么?
【问题讨论】:
Add entry to iOS .plist file via Cordova config.xml的可能重复 【参考方案1】:我使用 iOS 的构建挂钩来实现这一点。所以,在 config.xml 我会放一些类似的东西:
<hook type="before_build" src="../scripts/ios_before_build.sh" />
里面:
<platform name="ios">
config.xml 中的元素
然后我会创建一个名为 ../scripts/ios_before_build.sh 的文件,确保它具有执行权限(chmod 755 ../scripts/ios_before_build.sh),然后将脚本设置为使用 PlistBuddy 进行所需的更改.plist 文件。
例如,我在这里关闭了 iOS 9 对 SSL 安全后端 URL 的要求,因为我正在开发的应用程序的 API 不使用 https:
val=$(/usr/libexec/plistbuddy -c "add NSAppTransportSecurity:NSAllowsArbitraryLoads bool true" platforms/ios/AppName/AppName-Info.plist 2>/dev/null)
我正在禁止 plistbuddy 的返回代码,因为如果该项目已经存在,它将失败。在这里,我添加了一个 dict 并设置了一个布尔值,但您可以按照 PlistBuddy documentation 执行各种其他操作。
那么当你这样做时:
cordova build ios
脚本将运行,更改您的 plist,然后 cordova 构建将继续。
我觉得这个更干净,因为我不喜欢将平台或插件文件夹签入我的 Cordova 项目的版本控制中。
【讨论】:
ios_before_build.sh 可能需要第一行是“#!/usr/bin/env bash”,否则运行钩子时会显示“command not found” @Simon Prickett 嗨,你能解释一下如何创建 .sh 文件吗?我在窗户上。我正在使用 phonegap build 来编译我的应用程序。我使用 Application Loader 上传它并收到一条错误消息“缺少 Info.plist 键...应用程序的 Info.plist 必须包含 NSPhotoLibraryUsageDescription 键...”我不知道如何使用 plist,因此将不胜感激. 对于 Windows,您将无法访问 Apple 工具来在命令行维护 plist 文件。我建议使用 Python 脚本或类似脚本来执行此操作,并且可能使用诸如 docs.python.org/2/library/plistlib.html 之类的模块来提供帮助。我不使用 Windows,因此无法尝试,但这是我希望采用的方法。 @SimonPrickett 谢谢。不幸的是,我根本不熟悉 python。我已经用 javascript、Jquery、html 和 css 构建了我的应用程序。我会进一步调查。感谢您的帮助。 @SimonPrickett 实际上,我刚刚意识到我可以访问 mac 环境,因为我正在使用 macincloud 将我的 ipa 文件上传到应用商店。那么我可以使用命令提示符在那里创建 .sh 文件吗?以上是关于PhoneGap:修改 config.xml 以将属性添加到 Info.plist ion iOS的主要内容,如果未能解决你的问题,请参考以下文章
Phonegap:gap:config-file 不适用于 config.xml
Phonegap + Eclipse + Cordova -- 没有 config.xml
Phonegap Build (config.xml) 和 iPad 闪屏
phonegap 构建应用程序的 Manifest.xml 和 config.xml 之间的区别