繁体   English   中英

App Store意外拒绝:NSMotionUsageDescription和NSContactsUsageDescription缺少Info.Plist

[英]Unexpected App Store rejection: Missing Info.Plist for NSMotionUsageDescription and NSContactsUsageDescription

我已经提交了11个相关的(功能相同)cordova应用程序,它们有很多迭代。 突然我从苹果公司得到了对其中一个的拒绝(更新):

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

缺少Info.plist键-此应用尝试访问对隐私敏感的数据,而没有使用说明。 应用程序的Info.plist必须包含一个NSMotionUsageDescription密钥,该密钥具有字符串值,该字符串值向用户说明该应用程序如何使用此数据。

自初始发行以来,我没有添加任何功能。 但是,我注意到当ionic生成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"

从iOS 10开始,如果您的应用程序要求相关功能,则必须在.plist中有用法说明( 请参阅此处 )。

因此,许多插件现在以一种或另一种形式包括这些键,包括列表中的某些插件。 例如,cordova-plugin-camera允许通过插件变量指定NSCameraUsageDescription ,而cordova-diagnostic-plugin可以为其中的许多设置默认占位符, 包括NSMotionUsageDescription

但是,将这些密钥包含在.plist中并不意味着它们包含的消息会自动作为权限请求显示给用户。 仅当您通过插件调用相关的本机iOS方法时,它们才会显示。 例如,对于NSMotionUsageDescription ,仅当您调用诊断插件函数requestAndCheckMotionAuthorization()时,才会显示其中包含的消息。

当iOS应用包含本机调用以使用功能(需要使用UsageDescription),但plist中不存在此类使用描述键时,就会发生App Store拒绝。 例如,对于NSMotionUsageDescription ,如果您的应用包含对本机函数CMMotionActivityManager.startActivityUpdatesToQueue的调用,但在plist中不包含NSMotionUsageDescription ,则在将二进制文件上传到iTunes Connect时将拒绝您的应用。 我假设Apple使用某些软件在上传时扫描您的应用程序二进制文件,以检查对相关API函数的调用,并且存在相应的UsageDescription plist条目。

对于本机iOS应用程序,您只需删除(或不添加)对未使用的API函数的调用,即,如果您的应用程序不需要跟踪,则不会包含对CMMotionActivityManager.startActivityUpdatesToQueue的调用。运动。

但是,对于Cordova应用程序而言,您从本地代码中删除了一步,该本地代码包含在安装插件中。 例如,如果将cordova-diagnostic-plugin安装到Cordova项目中,则您的应用程序包含对CMMotionActivityManager.startActivityUpdatesToQueue的调用,因为这在插件代码中 您的应用程序是否实际调用了插件API函数(后者又调用了本机函数)并不重要,事实是它已出现在应用程序的代码中。 因此, NSMotionUsageDescription 必须出现在.plist中,以防止App Store被拒绝,因此为什么cordova-diagnostic-plugin为该密钥添加了一个占位符消息。 但是,如上所述,除非您调用requestAndCheckMotionAuthorization(),否则不会向用户显示该权限请求。

请注意,您可以使用cordova-custom-config自定义插件添加的默认“ UsageDescription”消息- 请参见此处

您必须向info.plist添加一个属性,该属性的键是NSContactsUsageDescription,值是要向用户显示的文本,向用户解释为什么要访问此文本。 NSMotionUsageDescription相同。

单击+符号信息属性列表

粘贴NSMotionUsageDescription并按Enter

它会自动成为“隐私-运动用法说明”。 两者都做,您就完成了。

希望对您有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM