Cordova-您可以覆盖插件设置的plist NSPhotoLibraryUsageDescription值吗?

时间:2019-06-06 05:12:14

标签: ios cordova cordova-plugins info.plist cordova-cli

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

所以这里有两个问题:

  1. 插件可以提供错误的描述(例如cordova-plugin-x-socialsharing插件),Apple can reject you for

    您将无法覆盖我所看到的内容。

  2. 如果多个插件为同一Info.plist值提供一个值,则仅使用最后一个。这对我来说是个问题,因为您无法真正控制哪个是“最后一个”。

所以我的问题是-config.xml或钩子中是否有办法提供将要使用的实际Info.plist设置?

(我目前正在使用Cordova CLI 8.1.2)

1 个答案:

答案 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"