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 之间的区别

iOS PhoneGap 2.3 Config.xml 混淆

为啥 PhoneGap 会为同一个应用创建不同的 config.xml 文件?