【问题标题】:Cordova Info.plist NSCameraUsageDescription key is missing缺少 Cordova Info.plist NSCameraUsageDescription 键
【发布时间】:2017-01-26 18:37:43
【问题描述】:

在最近的更改之后,如果您的应用尝试访问隐私敏感数据,Apple 需要特定的密钥。所以我在我的 config.xml 中添加了 NSCameraUsageDescription 键,如下所示:

<platform name="ios">
    <config-file parent="NSCameraUsageDescription" target="*-Info.plist">
        <string>We are using a camera to </string>
    </config-file>
</platform>

然后

cordova build ios --release --device

生成的 ipa 显然在 info.plist 中没有正确的信息。感觉好像错过了什么。

问题 1: 我需要在 config.xml 中添加什么来解决 NSCameraUsageDescription 问题? 问题 2: 是否可以对这个字符串使用本地化?

谢谢!

【问题讨论】:

    标签: ios cordova hybrid-mobile-app


    【解决方案1】:

    新答案:

    从 Cordova CLI 6.5.0 开始,您可以像这样在config.xml 中使用edit-config 标签直接写入info.plist

        <string>your usage message</string>
    </edit-config>
    

    但请确保您使用的是最新版本的插件,否则值可能会被插件变量覆盖。

    对于本地化,您可以使用 resource-file 标签和 InfoPlist.strings 文件,就像在这个插件中一样(但您不需要插件,config.xml 支持资源文件标签)

    https://github.com/MBuchalik/cordova-plugin-ios-permissions


    旧答案:

    你还不能使用config-file标签在config.xml上写info.plist(正在处理中)

    最新版本的相机插件允许您在安装插件时添加NSCameraUsageDescription

    cordova plugin add cordova-plugin-camera --variable CAMERA_USAGE_DESCRIPTION="your usage message"

    目前无法本地化此字符串

    【讨论】:

    • 不确定是否已放弃对此的支持,但我使用了 edit-config 标记用于 cordova 插件相机 github.com/apache/cordova-plugin-camera#ios-quirks
    • 是的,我们正在放弃对此的支持,但它尚未发布。这将在几天后的主要版本 (3.0.0) 中完成。除非您从 github url 而不是从 npm 安装,否则不会影响您
    • @jcesarmobile Q2 怎么样?是否可以对这个字符串使用本地化?
    • 要本地化使用说明,您必须创建一个 InfoPlist.strings 文件并对其进行本地化,但遗憾的是 Cordova 不支持。您可以在platforms/ios/ 上打开 Xcode 工作区并手动进行,但可以在cordova-ios 平台更新时将其删除。欲了解更多信息developer.apple.com/library/content/documentation/General/…
    • 编辑了答案,其中包含有关如何以在删除平台并再次添加时不会被删除的方式进行本地化的信息。
    【解决方案2】:

    以下是我自己的研究结果:

      • 是的,您可以从 config.xml 文件中修改 info.plist 使用配置文件标签,但是你必须为此使用插件 (cordova custom config) 并认真按照说明进行操作。
      • 但是,可能更好的选择是使用 plugin.xml 来做同样的事情。有关它的更多信息,您可以在此处阅读(modifying info plist from plugin.xml)
      • @jcesarmobile 提到的另一个选项 - 当前的相机插件可能像 cordova plugin camera 一样支持它(此解决方案特定于插件

    如果我错了,请纠正我。直接从 config.xml 获得更多关于本地化的信息表示赞赏。

    就个人而言,我不喜欢使用自定义插件来修改 info.plist 文件的想法。感觉就像我使用的每个新插件都会使我的应用程序越来越脆弱。 :)

    【讨论】:

    • 您是否找到了一种方法来本地化来自 config.xml 或任何其他 cordova 插件的字符串?谢谢!
    • @MathieuG 到目前为止,我发现的唯一一种方法是使用 xcode 内置功能(基本上是为每种语言创建不同的 info.plist 文件)。这种方法的缺点很明显:如果您执行“cordova platform rm ios”/“cordova platform add ios”,您将丢失所有更改。我建议将 Info.plist 本地化作为其他所有设置正确的最后一步......如果您能够找到更好的方法,请联系我! :-)
    • 当心 Ionic2 云构建通过“ionic package build”命令不支持钩子(只有少数特定的通过选项),所以cordova自定义配置不起作用,甚至导致android构建完全失败github.com/dpa99c/cordova-custom-config/issues/112
    【解决方案3】:

    如果您愿意,可以在您的 cordova 项目中手动编辑 .plist 文件。这对我有用,但由于这是一个生成的文件,我确实担心在某些时候我的更改可能会被覆盖。

    但是要帮忙!

    .plist 文件应位于您的 Cordova 项目中的 /platforms/ios/[Cordova Project Name]/[Cordova Project Name]-Info.plist 中。您也可以在 Xcode 中打开项目,然后单击左侧的放大镜图标,您可以在该图标中搜索项目中的文件。如果您输入info.plist,它应该会返回显示如下内容的结果:

    INFOPLIST_FILE = [Some]/[Path]/[Cordova Project Name]-Info.plist

    此路径应与您的 Cordova 项目安装相关,因此在您的项目中搜索应该会引导您找到正确的文件。

    我在编辑器中打开了这个文件,并在第一个打开的&lt;dict&gt; 标签内添加了以下几行:

    <key>NSCameraUsageDescription</key> <string>Uses camera to allow video chatting between two clients</string>

    我能够提交并让我的构建出现并留在在 itunesconnect 中。目前仍在等待应用审核。

    我确实运行了cordova prepare ios 只是为了测试我的更改是否会被覆盖,而他们没有这样做,所以看起来你应该能够做到这一点而不必担心它,但要厌倦其他开发人员安装你的应用程序和遇到同样的问题。我刚刚将更新后的 .plist 文件复制到我的 repo 的根目录中,并在自述文件中记下了它。

    【讨论】:

      【解决方案4】:
      $ cordova plugin add cordova-plugin-camera --variable CAMERA_USAGE_DESCRIPTION="this app will use your camera" --variable PHOTOLIBRARY_USAGE_DESCRIPTION="this app will access to your photo library"
      

      您需要阅读 ./plugins/plugin-what-ever/plugin.xml 的内部内容,了解支持的键名类型。

      【讨论】:

        【解决方案5】:

        转到您的项目>>在那里打开终端

        并运行此命令

        cordova plugin add cordova-plugin-camera --variable CAMERA_USAGE_DESCRIPTION="Allow the app to use your camera" --variable PHOTOLIBRARY_USAGE_DESCRIPTION="Allow the app to access your photos"
        

        您可以根据需要不断修改“允许应用使用您的相机”“允许应用访问您的照片”的值。

        【讨论】:

          【解决方案6】:

          首先,在苹果拒绝我的 ipa 后,这适用于 Cli-7.1.0。

          1) 在您的代码中,如果您使用 for ex。 cordova-plugin-barcodescanner 和 cordova-plugin-camera 和 cordova-plugin-ios-camera-permissions 所有变量 CAMERA_USAGE_DESCRIPTION、PHOTOLIBRARY_USAGE_DESCRIPTION 内部应该有相同的字符串。如果其中之一不同,苹果会拒绝您的 ipa,因为 phonegap 使用默认变量。

          ej:

          <plugin name="cordova-plugin-ios-camera-permissions" >
               <variable name="CAMERA_USAGE_DESCRIPTION" value="YOUR-PERMISSION-REQUEST" />
               <variable name="PHOTOLIBRARY_USAGE_DESCRIPTION" value="YOUR-PERMISSION-REQUEST" />
          </plugin><!-- spec="1.0.3" !-->
          
          <plugin name="cordova-plugin-camera" > 
               <variable name="CAMERA_USAGE_DESCRIPTION" value="YOUR-PERMISSION-REQUEST" />
               <variable name="PHOTOLIBRARY_USAGE_DESCRIPTION" value="YOUR-PERMISSION-REQUEST" />
          

          <gap:plugin name="cordova-plugin-image-picker" source="npm" />
          <gap:plugin name="cordova-plugin-base64-joewsh" source="npm" />   <!-- convertir a base64 los files !-->
          
          
          <gap:plugin name="cordova-plugin-barcodescanner"   source="npm" spec="0.7.0" >
          
               <variable name="CAMERA_USAGE_DESCRIPTION" value="YOUR-PERMISSION-REQUEST" />
          </gap:plugin>
          

          2)添加这段代码(记得在变量中使用相同的字符串,正如我之前提到的):

          <platform name="ios">
          
               <edit-config target="NSLocationWhenInUseUsageDescription" file="*-Info.plist" mode="merge" overwrite="true">
                    <string>YOUR-PERMISSION-REQUEST</string>
               </edit-config>
               <edit-config target="NSPhotoLibraryUsageDescription" file="*-Info.plist" mode="merge" overwrite="true" >
                    <string>YOUR-PERMISSION-REQUEST</string>
               </edit-config>
               <edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="merge" overwrite="true">
                    <string>YOUR-PERMISSION-REQUEST</string>
               </edit-config>
          </platform>
          

          【讨论】:

          • 对我来说,我的 xCode 项目中没有更新 cordova ios config.xml edit-config 条目。因此,使用#2 中提到的platformedit-config 标签,我只需要使用mode="overwrite" and removed overwrite="true" 然后运行cordova prepare ios,这使得更改在xCode 中可见。
          【解决方案7】:

          对于 iOS 10/11,您可以使用 cordova-plugin-ios-camera-permissions 作为快捷方式。

          为如何提供自定义消息提供默认值和清晰的文档。

          cordova plugin add cordova-plugin-ios-camera-permissions --save
          

          如果您已经设置了 iOS 平台,可能需要删除并重新添加。

          $ cordova platform rm ios
          $ cordova platform add ios
          

          【讨论】:

            【解决方案8】:

            我搜索了很多时间,尝试了很多解决方案都没有成功。

            最后,我用Xcode在Info标签中定义了这些数据就行了

            Privacy - Camera usage description
            

            它节省了我很多时间。

            【讨论】:

            • 您能否也分享一下我如何从 Cordova 访问它们或引用它们?第二个问题:你知道如何对这些消息进行本地化吗?这真的很有帮助。谢谢!
            • 您好,我没有找到这些信息。我在 Cordova 配置或 Ionic 项目代码中尝试了很多东西,但我没有找到任何对我有帮助的东西。我不需要在我的应用中进行本地化,所以我无法为您提供帮助。
            猜你喜欢
            • 1970-01-01
            • 2019-10-21
            • 2022-06-30
            • 2017-11-28
            • 1970-01-01
            • 2018-10-13
            • 2021-09-24
            • 1970-01-01
            相关资源
            最近更新 更多