PhoneGap缺少plist.key

时间:2017-01-07 19:45:22

标签: ios iphone cordova phonegap-plugins phonegap-build

当我尝试加载上传我的iTunes应用安装程序到iTunes时,我解除了这个错误:

  

缺少Info.plist键 - 此应用尝试访问隐私敏感   没有使用说明的数据。应用程序的Info.plist必须包含   NSPhotoLibraryUsageDescription键,其字符串值解释为   用户应用程序如何使用此数据。

     

缺少Info.plist键 - 此应用尝试访问隐私敏感   没有使用说明的数据。应用程序的Info.plist必须包含   NSCameraUsageDescription键,用字符串值解释   用户应用程序如何使用此数据。

我可以在下面的配置文件中添加什么来让它工作:

<preference name="permissions" value="none" />
    <preference name="orientation" value="default" />
    <preference name="target-device" value="universal" />
    <preference name="fullscreen" value="false" />
    <preference name="webviewbounce" value="false" />
    <preference name="disallowOverscroll" value="true" />
    <preference name="prerendered-icon" value="true" />
    <preference name="stay-in-webview" value="false" />
    <preference name="ios-statusbarstyle" value="black-opaque" />
    <preference name="detect-data-types" value="true" />
    <preference name="exit-on-suspend" value="false" />
    <preference name="show-splash-screen-spinner" value="true" />
    <preference name="auto-hide-splash-screen" value="true" />
    <preference name="disable-cursor" value="false" />
    <preference name="android-minSdkVersion" value="10" />
    <preference name="android-targetSdkVersion" value="19" />
    <preference name="android-installLocation" value="auto" />
    <gap:plugin name="org.apache.cordova.battery-status" source="npm" />
    <gap:plugin name="org.apache.cordova.camera" source="npm"/>    
    <gap:plugin name="org.apache.cordova.media-capture" source="npm"/>
    <gap:plugin name="org.apache.cordova.console" source="npm" />
    <gap:plugin name="org.apache.cordova.contacts" source="npm"/>

    <gap:plugin name="org.apache.cordova.device-motion" source="npm"/>
    <gap:plugin name="org.apache.cordova.device-orientation" source="npm"/>
    <gap:plugin name="org.apache.cordova.dialogs" source="npm"/>
    <gap:plugin name="org.apache.cordova.file" source="npm"/>
    <gap:plugin name="org.apache.cordova.file-transfer" source="npm"/>

    <gap:plugin name="org.apache.cordova.inappbrowser" source="npm"/>
    <gap:plugin name="org.apache.cordova.media" source="npm"/>
    <gap:plugin name="org.apache.cordova.network-information" source="npm"/>
    <gap:plugin name="org.apache.cordova.splashscreen" source="npm"/>
    <gap:plugin name="org.apache.cordova.vibration" source="npm"/>
    <icon src="icon.png" />

    <gap:splash src="splash.png" gap:platform="android" gap:qualifier="port-ldpi" />
    <gap:splash src="splash.png" gap:platform="android" gap:qualifier="port-mdpi" />
    <gap:splash src="splash.png" gap:platform="android" gap:qualifier="port-hdpi" />
    <gap:splash src="splash.png" gap:platform="android" gap:qualifier="port-xhdpi" />
    <gap:splash src="splash.png" gap:platform="blackberry" />
    <gap:splash src="splash.png" gap:platform="ios" width="320" height="480" />
    <gap:splash src="splash.png" gap:platform="ios" width="640" height="960" />
    <gap:splash src="splash.png" gap:platform="ios" width="640" height="1136" />
    <gap:splash src="splash.png" gap:platform="ios" width="768" height="1024" />
    <gap:splash src="splash.png" gap:platform="ios" width="1024" height="768" />
    <gap:splash src="splash.png" gap:platform="winphone" />
    <access origin="*" />

    <gap:plugin name=" phonegap-plugin-barcodescanner" source="npm" />
    <gap:plugin name="uk.co.workingedge.phonegap.plugin.launchnavigator" source="npm" />
    <gap:plugin name="cordova-plugin-directions" source="npm" />


    <!-- iPhone / iPod Touch  - lower 4s -->
    <icon src="icon-57.png" gap:platform="ios" width="57" height="57" />
    <icon src="icon.png" gap:platform="ios" width="114" height="114" />
    <icon src="icon-72.png" gap:platform="ios" width="72" height="72" />
    <icon src="152.png" gap:platform="ios" width="152" height="152" />
    <icon src="icon-120.png" gap:platform="ios" width="120" height="120" />
    <icon src="76.png" gap:platform="ios" width="76" height="76" />
    <icon src="icon-40.png" gap:platform="ios" width="40" height="40" />

    <!-- iPhone / iPod Touch - 5-5s -->
    <icon src="icon.png" gap:platform="ios" width="60" height="60" />
    <icon src="icon.png" gap:platform="ios" width="120" height="120" />
    <!-- iPhone6-6+ -->
    <icon src="icon.png" gap:platform="ios" width="180" height="180" />

    <!-- Settings Icon -->
    <icon src="icon-29.png" gap:platform="ios" width="29" height="29" />
    <icon src="icon.png" gap:platform="ios" width="58" height="58" />

    <!-- Spotlight Icon -->
    <icon src="icon.png" gap:platform="ios" width="40" height="40" />
    <icon src="icon.png" gap:platform="ios" width="80" height="80" />

    <plugin name="cordova-plugin-whitelist" version="1" source="npm"/>

    <gap:plugin name="cordova-plugin-geolocation" source="npm"/>

    <feature name="http://api.phonegap.com/1.0/battery" />
    <feature name="http://api.phonegap.com/1.0/camera" />
    <feature name="http://api.phonegap.com/1.0/network" />
    <feature name="http://api.phonegap.com/1.0/notification" />

    <gap:plugin name="cordova-plugin-x-socialsharing" source="npm" />

6 个答案:

答案 0 :(得分:20)

另一个编辑: 大多数插件都删除了变量以用于使用说明,所以现在设置它们的方法就是在config.xml中使用edit-config标记。

<edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="overwrite">
    <string>We are using the Camera for something...</string>
</edit-config>

但并非所有插件都已更新,所以最好先阅读插件的README.md。关于核心插件,它在一个名为iOS Quirks的部分中。

它还需要cli 7.0.1或更高版本,在config.xml中设置如下:

<preference name="phonegap-version" value="cli-8.0.0" />

编辑:

如果你有<preference name='phonegap-version' value='cli-7.0.1' />(或者如果你没有phonegap-version,那么我的旧回答将不再有效,因为它会将其用作默认值)

要设置使用说明,请使用插件上的参数

<plugin name="cordova-plugin-camera">
   <param name="CAMERA_USAGE_DESCRIPTION" value="We are using the Camera for something..." />
   <param name="PHOTOLIBRARY_USAGE_DESCRIPTION" value="We are using the Photo Library for something..." />
</plugin>

请注意,如果您的某些插件具有相同的使用说明,并且您没有使用param标签填充它们,则可能会使用默认的空字符串替换它们

您可以强制使用带有此标记的旧构建器,但不推荐使用,新构建器更好 <preference name='pgb-builder-version' value='1' />

老答案:

您可以像这样写一下info.plist:

<gap:config-file platform="ios" parent="NSCameraUsageDescription" overwrite="true">
   <string>We are using the Camera for something...</string>
</gap:config-file>

overwrite="true" 非常重要,因为最新版本的相机插件已经在写入空值。

我已经在示例应用上测试了它并且它正在运行 https://github.com/jcesarmobile/phonegap-template-hello-world/blob/454e852955e66470890cba636450abd422f50598/config.xml#L153-L155

答案 1 :(得分:2)

请在xcode中打开您的项目,然后转到资源文件夹中的.plist文件

然后在你.plist文件的最后点击“+”并添加“隐私 - 照片库使用说明”的搜索,并在列旁边添加它的值。

同样请为“ NSCameraUsageDescription ”再次点击“+”并搜索“隐私 - 相机使用说明”,然后在旁边的列中再次提供一些使用说明。

它会解决你的问题。

欲了解更多信息,请访问以下网址:

1)Stackoverflow question related to your question 2)Official apple doc for all required keys to be added

答案 2 :(得分:1)

在您访问隐私敏感数据(如相机,通讯录等)之前,您必须要求授权,当您访问它们时,您的应用会崩溃。然后Xcode会记录如下:

  

此应用已崩溃,因为它试图在没有使用说明的情况下访问隐私敏感数据。应用程序的Info.plist必须包含一个NSContactsUsageDescription键,其中包含一个字符串值,向用户解释应用程序如何使用此数据。

如何处理?正如苹果所说:

  

您必须通过在Info.plist文件中包含适当的用途字符串键,静态声明应用程序对受保护数据类的预期用途。

在您的情况下,您可能需要在info.plist中添加以下内容,

<!-- Photo Library --> <key>NSPhotoLibraryUsageDescription</key> <string>$(PRODUCT_NAME) photo use</string>

还建议您查看此link以获取更多有关此内容的详细信息。希望它有所帮助。

您还可以查看此plugin,这有助于操作* -info.plist

答案 3 :(得分:1)

在ios中,您必须将IdentityPoolId的下面的行覆盖camera-plugin文件之后,才需要在barcodescanner-plugin上安装config.xml

plist

答案 4 :(得分:0)

这里的答案都没有对我有用,所以我认为我应该加上我的两分钱来说明我的工作原理。

首先,我尝试了接受的答案(由jcesarmobile编写的答案)。当我尝试这个并运行时:每次从我的config.xml文件中删除配置时,都会使用phonegap构建ios。接下来我尝试了这里指出的解决方案:

http://geeklearning.io/how-to-add-specific-configuration-parameters-to-ios-p-list-and-android-manifest/

这首先不起作用,必须进行一些更改,所有这些都是我从github repo评论文件中得到的。我建议你运行构建,复制错误信息并在评论中搜索并按照他们的意思行事。一旦我再次构建它,它仍然无法上传itunes connect。

最后,我必须打开Info.plist文件并手动输入以下内容

<key>NSCameraUsageDescription</key>
<string>We are using the Camera to (blah blah blah, your explanation)</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>We are using the Photo Library to (your reason)</string>
<key>NSMainNibFile</key>

尽管钩子并没有完全按照它声称的那样做,但我仍然认为这很重要,因为在我这样做之前,一切都被删除了,现在它仍然存在。

我希望这可以帮助别人。

答案 5 :(得分:0)

Phonegap Build - 适用于任何使用cli-7.0.1的人,因为现在每个人都应该这样:

<edit-config target="NSPhotoLibraryUsageDescription" file="*-Info.plist" mode="overwrite">
    <string>Used to allow the user to select media to upload to us</string>
</edit-config>

这不会在标签内,只是在Widget标签内,就像其他一切一样。将字符串更改为适合您的字符串。