TLDR; 使用Cordova,是否有办法覆盖插件可能已设置的任何Info.plist
值,例如NSPhotoLibraryAddUsageDescription
? (即可能带有钩子?)
许多Cordova插件尝试配置plist值,例如NSPhotoLibraryUsageDescription
。例如:
<config-file target="*-Info.plist" parent="NSPhotoLibraryAddUsageDescription">
<string>Please authorize photo library to save pictures.</string>
</config-file>
<config-file target ="*-Info.plist" parent="NSPhotoLibraryUsageDescription">
<string>Please authorize photo library to save pictures.</string>
</config-file>
如果有多个插件这样做,我们最终会在platforms/ios/ios.json
中得到多个值,例如:
{
"prepare_queue": {
"installed": [],
"uninstalled": []
},
"config_munge": {
"files": {
"*-Info.plist": {
"parents": {
"NSPhotoLibraryUsageDescription": [
{
"xml": "<string>Send photos in your messages to the app.</string>",
"count": 1
},
{
"xml": "<string>We allow you to send us photos via our in-app messenger</string>",
"count": 144
}
],
...
这是有问题的,因为似乎科尔多瓦只会将任何键(NSPhotoLibraryUsageDescription
)的 last 项目的值复制到Info.plist
文件中。
另一个问题是,您自己在config.xml
中设置这些设置不会优先于插件设置的设置。这仅取决于platforms/ios/ios.json
中哪个值是 last 。
所以这里有两个问题:
插件可以提供错误的描述(例如cordova-plugin-x-socialsharing
插件),Apple can reject you for
您将无法覆盖我所看到的内容。
如果多个插件为同一Info.plist值提供一个值,则仅使用最后一个。这对我来说是个问题,因为您无法真正控制哪个是“最后一个”。
所以我的问题是-config.xml或钩子中是否有办法提供将要使用的实际Info.plist设置?
(我目前正在使用Cordova CLI 8.1.2)
答案 0 :(得分:2)
您可以使用cordova-custom-config覆盖由Cordova插入的使用情况描述消息:
由于cordova-custom-config
(默认情况下)将其更改应用到Cordova的after_prepare
钩子上,因此它将在以后执行,因此其更改将优先执行。
将其安装到您的项目中
cordova plugin add cordova-custom-config
然后在您的<custom-config-file>
中定义一个config.xml
块,例如:
<custom-config-file platform="ios" target="*-Info.plist" parent="NSPhotoLibraryUsageDescription">
<string>My override description</string>
</custom-config-file>
注意:cordova-plugin-x-socialsharing
确实提供了一种覆盖其自身默认描述的机制-defines <preference>
s可以在插件安装期间使用变量来覆盖它,例如:
cordova plugin add cordova-plugin-x-socialsharing --variable PHOTO_LIBRARY_ADD_USAGE_DESCRIPTION="Some description" --variable PHOTO_LIBRARY_USAGE_DESCRIPTION="Some other description"