Cordova - 你能覆盖插件设置的 plist NSPhotoLibraryUsageDescription 值吗?
Cordova - can you override plist NSPhotoLibraryUsageDescription values set by a plugin?
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
}
],
...
这是有问题的,因为 Cordova 似乎只会将任何键 (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)
您可以使用 cordova-custom-config 覆盖 Cordova 插入的使用说明消息:
由于 cordova-custom-config
在 Cordova 的 after_prepare
挂钩上应用它的更改(默认情况下),它将在之后执行,因此它的更改将优先。
将其安装到您的项目中:
cordova plugin add cordova-custom-config
然后在你的config.xml
中定义一个<custom-config-file>
块,例如:
<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"
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
}
],
...
这是有问题的,因为 Cordova 似乎只会将任何键 (NSPhotoLibraryUsageDescription
) 的 last 项的值复制到 Info.plist
文件。
另一个问题是,在 config.xml
中自行设置这些设置不会优先于插件设置的设置。这仅取决于 platforms/ios/ios.json
.
所以这里有两个问题:
插件可以提供错误的描述(例如
cordova-plugin-x-socialsharing
插件),Apple can reject you for然后你就无法覆盖我看到的这个。
如果多个插件为同一个 Info.plist 值提供一个值,则只使用最后一个。这对我来说是个问题,因为你无法真正控制哪个是“最后一个”。
所以我的问题是 - config.xml 或挂钩中是否有方法提供将要使用的实际 Info.plist 设置?
(我目前使用的是 Cordova CLI 8.1.2)
您可以使用 cordova-custom-config 覆盖 Cordova 插入的使用说明消息:
由于 cordova-custom-config
在 Cordova 的 after_prepare
挂钩上应用它的更改(默认情况下),它将在之后执行,因此它的更改将优先。
将其安装到您的项目中:
cordova plugin add cordova-custom-config
然后在你的config.xml
中定义一个<custom-config-file>
块,例如:
<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"