无法使用 PhoneGap Build 覆盖首选项(生成的 config.xml 中的顺序错误)

Can't override preference using PhoneGap Build (order in generated config.xml is wrong)

我正在使用 cordova-plugin-statusbar 自定义我的应用程序状态栏在 iOS 上的外观。具体来说,我想将 StatusBarOverlaysWebView 的值更改为 false,因此我在 config.xml 中包含以下行:

<preference name="StatusBarOverlaysWebView" value="false" />

当我使用本地 XCode 构建进行测试时,这非常有效。但是,当我在 PhoneGap Build 上构建时,此值的默认设置(true)未被覆盖。

经过相当大的摸索之后,我注意到 config.xml 中的偏好顺序与 PhoneGap 生成的顺序不同。在我的本地构建中,插件 plugin.xml 中的以下行包含在 之前 覆盖设置的行:

<feature name="StatusBar"> <param name="ios-package" value="CDVStatusBar" /> <param name="onload" value="true" /> </feature> <preference name="StatusBarOverlaysWebView" value="true" />

然而,在 PhoneGap 生成的 config.xml 中,这些行出现在文件的最后。我猜 "last write wins" 因此默认值覆盖了我的自定义偏好。

我有什么方法可以影响它,还是它只是一个 PhoneGap 构建错误?

@马修
你的结论不正确。顺序可能会有所不同,但这只是因为您使用的是已弃用的项目。

这是你需要知道的。

  1. 从现在开始,您需要从 NPM 获取所有插件 - 从上周开始。
  2. 您需要删除所有关于 <feature (...)> 的引用 - 见下文。
  3. 您应该开始为您的编译器和插件使用版本 - 见下文。
  4. 在进行任何更改之前,您应该 post 您的 config.xml,以防出现其他问题。

此修复所需的所有解决方案都集中在一个地方: Top Mistakes by Developers new to Cordova/Phonegap 答案涵盖 Cordova/Phonegap CLI 和 SDK,以及 Phonegap Build。

1 日

以上参考你中了

11. You need to get your plugins from NPM now.

The rules regarding sourcing your plugins can be rather confusing. The best thing to do is read the blog posts - below. Developers that use CLI can source from github, again see the blog post.

新新Cordova npm search page

2 日

这是全新的,我还没来得及将它添加到 FAQ

<feature> 标签已弃用。这意味着它们不再被使用。 你可以read about it here

我引用

Aside from the debug-server feature, the <feature> tag is essentially deprecated on PhoneGap Build since PhoneGap APIs were pluginized. Permissions are now generally managed by individual plugins, and application manifests and permissions can be modified directly using the config-file element. However for backwards-compatibility, they are still supported and map to device permissions on Android and Windows Phone 8:

换句话说,你有一个重复的配置,而且它什么也没做。拿出来。

3 日

以上参考你中了

  • #6 没有为您的编译器设置“phonegap 版本”
  • #7 没有为你的插件设置“版本”

#6 和#7

With the CLI version, if you do not assign a version for your platform OR in ''Phonegap Build'' if you do not set the phonegap-version in config.xml, YOU WILL GET THE LATEST VERSION. If you are lucky, your program just works as expected. If you are not lucky, you'll get a set of cascading errors.

Luckily for all of us, Holly Schinsky has written a nice blog post to explain it all: (NOTE: Holly has not had time to update the article since the move to NPM, use the NPM names, not the names she is using.)

Cordova/PhoneGap Version Confusion
http://devgirl.org/2014/11/07/cordovaphonegap-version-confusion/

我想重新讨论有关 级联错误 的部分。你和很多很多人现在正处于那个阶段。部分原因是插件服务器的变化(现在在 NPM 上)以及白名单限制让毫无准备的人争先恐后。这部分非常非常重要。现在设置您的版本,将来根据您的时间、预算和条款进行升级,而不是 Cordova 团队一时兴起。

4 日

请post你的config.xml。我已经这样做了几十次,当人们不这样做时,我总是付出代价 post。谢谢。

最后一件事,white-list 要求。我不知道您是否需要使用互联网,但如果您确实阅读了该常见问题解答中的 #10。

祝你好运

@马修,
好的。感谢您加载 config.xml。我确实读过它。我不确定您是否需要 NSAppTransportSecurity 的扩展名。暂时把它们拿出来,但要保存起来,以防万一。

这里还有一些内容可以帮助澄清。

插件

白名单

  • 以下博客 post 纠正了关于白名单、插件和 CSP 的误解和错误信息。雷蒙德承认自己犯了错误,幸运的是人们可能没有犯过那些错误。我几乎可以肯定你没有。
  • Important information about Cordova 5

此外,阅读the documentation with the plugin (near the top), and not just the white-list guide

您可能需要添加:

  • <allow-navigation (..)>
  • <allow-intent (..)>

让我知道进展如何。哦,让我看看你的决赛 config.xml。 TIA