我已经提交了11个相关的(功能相同的) cordova应用程序很好,与许多迭代。突然,我从苹果那里得到了其中一个(更新)的拒绝:
缺少Info.plist键-这个应用程序试图访问隐私敏感的数据,而没有使用说明。应用程序的Info.plist必须包含一个带有字符串值的NSContactsUsageDescription键,向用户解释应用程序如何使用这些数据。 缺少Info.plist键-这个应用程序试图访问隐私敏感的数据,而没有使用说明。应用程序的Info.plist必须包含一个带有字符串值的NSMotionUsageDescription键,向用户解释应用程序如何使用这些数据。
从最初的版本开始,我就没有添加任何功能。然而,我注意到,当离子生成Xcode项目时,我刚刚创建的一个全新的应用程序会自动卡在这些Plist条目中。
我认为这是因为我是用iOS 9目标创建的,而以前所有的应用程序都是使用iOS 8目标创建的。
我的问题是:这是突如其来的iOS 9要求吗?如果我在使用这些东西,我如何才能找到我的应用程序中需要它们的东西?
我担心这些会以许可请求或通知的形式出现给用户,这是不可取的。
这是我的插件列表:
com.dawsonloudon.videoplayer 1.0.0 "VideoPlayer"
com.passslot.cordova.plugin.passbook 0.1.0 "Passbook"
com.telerik.plugins.nativepagetransitions 0.6.5 "Native Page Transitions"
com.unarin.cordova.beacon 3.4.1 "Proximity Beacon Plugin"
cordova-plugin-app-event 1.2.0 "Application Events"
cordova-plugin-appavailability 0.4.2 "AppAvailability"
cordova-plugin-badge 0.7.2 "Badges"
cordova-plugin-bluetooth-serial 0.4.5 "Bluetooth Serial"
cordova-plugin-camera 2.1.1 "Camera"
cordova-plugin-console 1.0.7 "Console"
cordova-plugin-customurlscheme 4.1.5 "Custom URL scheme"
cordova-plugin-device 1.1.1 "Device"
cordova-plugin-facebook4 1.7.4 "Facebook Connect"
cordova-plugin-file 4.1.1 "File"
cordova-plugin-file-transfer 1.5.0 "File Transfer"
cordova-plugin-geolocation 2.1.0 "Geolocation"
cordova-plugin-google-analytics 0.8.1 "Google Universal Analytics Plugin"
cordova-plugin-inappbrowser 1.3.0 "InAppBrowser"
cordova-plugin-network-information 1.2.0 "Network Information"
cordova-plugin-splashscreen 3.2.1 "Splashscreen"
cordova-plugin-statusbar 2.1.2 "StatusBar"
cordova-plugin-vibration 2.1.0 "Vibration"
cordova-plugin-whitelist 1.0.0 "Whitelist"
cordova-plugin-x-socialsharing 5.1.1 "SocialSharing"
cordova-sqlite-storage 2.0.4 "Cordova sqlite storage plugin"
cordova.plugins.diagnostic 3.6.5 "Diagnostic"
ionic-plugin-keyboard 2.2.1 "Keyboard"
jaeger.Html5Video 1.2.2 "Html5Video"
org.nypr.cordova.hockeyappplugin 0.1.0 "Device"
org.nypr.cordova.nslogger-cocoalumberjack-connector-plugin 0.1.0 "Device"
pushwoosh-cordova-plugin 6.5.3 "Pushwoosh"发布于 2017-07-20 06:59:09
由于iOS 10,如果您的应用程序请求相关功能(请看这里),则在.plist中有一个用法描述。
因此,许多插件现在都以一种或另一种形式包含这些键,包括列表中的一些插件。例如,cordova插件摄像头使NSCameraUsageDescription能够被指定为通过插件变量,科多瓦-诊断插件为其中的许多NSMotionUsageDescription设置默认占位符。
但是,在您的.plist中包含这些键并不意味着它们包含的消息将自动以权限请求的形式呈现给用户。只有当您通过插件调用相关的本机iOS方法时,它们才会显示。例如,在NSMotionUsageDescription的情况下,只有当您调用诊断插件函数requestAndCheckMotionAuthorization()时,才会显示包含在其中的消息。
当iOS应用程序包含本机调用以使用需要UsageDescription的功能时,App商店拒绝就会发生,但是在plist中不存在这样的使用描述键。例如,对于NSMotionUsageDescription,如果应用程序包含对本机函数CMMotionActivityManager.startActivityUpdatesToQueue的调用,但在plist中不包含NSMotionUsageDescription,则在将二进制文件上传到iTunes连接时,应用程序将被拒绝。我假设苹果使用了一些软件,它在上传时扫描应用程序二进制文件,以检查对相关API函数的调用,并且存在相应的UsageDescription plist条目。
对于本机iOS应用程序,您只需删除(或不添加)对不使用的API函数的调用,也就是说,如果应用程序不需要跟踪运动,就不会包含对CMMotionActivityManager.startActivityUpdatesToQueue的调用。
然而,在Cordova应用程序的情况下,您将从本机代码中移出一步,这是通过安装插件而包含的。例如,如果您将Cordova诊断插件安装到您的Cordova项目中,您的应用程序将包含对CMMotionActivityManager.startActivityUpdatesToQueue的调用,因为这是在插件代码中。不管你的应用程序是否真的调用了插件API函数,而插件API函数反过来又调用了这个本地函数,事实是它存在于应用程序的代码中。因此,NSMotionUsageDescription 必须在.plist中出现,以防止App被拒绝,因此cordova-诊断插件为该密钥添加了占位符消息。但是,如前所述,除非调用requestAndCheckMotionAuthorization(),否则该权限请求不会出现给用户。
请注意,您可以使用UsageDescription - 请看这里自定义插件添加的默认cordova-定制-config消息。
发布于 2017-07-20 03:56:50
您必须向info.plist添加一个属性,该属性的键是NSContactsUsageDescription,值是您正在呈现的文本,向用户解释为什么要访问该属性。NSMotionUsageDescription也一样。
粘贴NSMotionUsageDescription并按enter键
它将自动成为隐私-运动使用描述。做这两件事,你就完蛋了。
希望能帮上忙!
https://stackoverflow.com/questions/45203349
复制相似问题