缺少Cordova Info.plist NSCameraUsageDescription键

时间:2016-09-19 06:48:54

标签: ios cordova hybrid-mobile-app

最近更改后,如果您的应用尝试访问隐私敏感数据,则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: 是否可以对此字符串使用本地化?

谢谢!

8 个答案:

答案 0 :(得分:30)

新答案:

从Cordova CLI 6.5.0开始,您可以使用info.plist中的edit-config标记直接在config.xml中写入:

<edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="merge"> <string>your usage message</string> </edit-config> 但请确保您使用的是最新版本的插件,否则插件变量可能会覆盖这些值。

对于本地化,您可以使用此插件中的resource-file标记和InfoPlist.strings文件(但您不需要插件,config.xml支持resource-file标记)

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

老答案:

您无法使用info.plist标记在config.xml上撰写config-file(正在进行处理)

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

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

现在无法本地化此字符串

答案 1 :(得分:7)

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

    • 是的,您可以从 config.xml 文件修改 info.plist 使用config-file标签你必须使用插件 (cordova custom config)并虔诚地遵循指示。
    • 但是,可能更好的选择是使用 plugin.xml 来做同样的事情。有关它的更多信息,请参阅(modifying info plist from plugin.xml)
    • @ jcesarmobile提到的另一个选项 - 当前的相机插件可能像cordova plugin camera一样支持它(此解决方案特定于插件
  1. 如果我错了,请纠正我。有关直接来自 config.xml 的本地化的更多信息表示赞赏。

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

答案 2 :(得分:3)

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

1)在您的代码中,如果您使用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>

答案 3 :(得分:2)

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

但是要帮助!

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

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

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

我在我的编辑器中打开了这个文件,并在第一个开头<dict>标记内添加了以下几行:

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

我能够提交并在itunesconnect中显示我的构建并保留。目前仍在等待应用评论。

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

答案 4 :(得分:0)

$ 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 :(得分:0)

转到您的项目&gt;&gt;在那里打开终端

并运行此命令

pd.to_numeric(df['Total Discharges'], errors='coerce').dropna() > 100).sum()

enter image description here

您可以继续修改值&#34;允许该应用使用您的相机&#34; &#34;允许该应用访问您的照片&#34;根据你的需要。

答案 6 :(得分:0)

对于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

答案 7 :(得分:0)

我花了很多时间并尝试了许多解决方案,但均未成功。

最后,我在

行的信息标签中使用Xcode定义了这些数据
Privacy - Camera usage description

enter image description here

它为我节省了很多时间。