应用程序的Info.plist文件必须包含一个NSMicrophoneUsageDescription键,其字符串值解释了应用程序如何使用此数据。

68
收到构建拒绝通知。应用程序的 Info.plist 必须包含一个 NSMicrophoneUsageDescription 键和其对应的字符串值,解释应用程序如何使用该数据。
应用程序并未使用麦克风,至少我认为是这样的。
如何追踪麦克风的使用位置?
更新:既然那些懒惰的答案正在被投票支持,我已向苹果提出了一个新的功能请求,以关闭这个安全漏洞。
更新:仍然令人困扰的是,一旦你通过某些半吊子的 NSMicrophoneUsageDescription 将麦克风访问代理到某个第三方框架中,如果用户同意允许麦克风访问,你就无法控制它在何时何地被使用。请务必进行尽职调查,精确地编写 NSMicrophoneUsageDescription,反映出当使用由第三方二进制框架模糊的用途时,代码使用了麦克风而其完全不受您控制的事实。谢谢。
更新:在 iOS 的最新版本中,苹果已经采取了审计共享资源(例如麦克风)使用情况的措施,因此用户可以检查实际访问发生的时间。不过有多少人会进行尽职调查呢?
更新:在 iOS 16 中,苹果将审核轨迹的摘要添加到锁屏界面,以便您可以看到类似 MapsMe 的违规行为并摆脱间谍软件。

5
我猜OP的问题是为什么需要NSMicrophoneUsageDescription密钥,而他并没有在任何地方请求该权限。 - Jakub Truhlář
是的,你关于更新的笔记UPD05042017是正确的。对于任何你或者任何框架试图访问的内容,都需要提供描述。如果没有提供使用说明,则在尝试访问该内容时会生成错误,因此,如果您遇到了这些错误,那么您的应用程序必须正在请求它们。您应该发现为什么您的应用程序或其框架需要这些内容,并将适当的使用说明添加到您的应用程序的info.plist中,或考虑删除该框架。 - user8675
1
我听到苹果公司在说:“如果你想使用这些硬件,最好自己掌握细节,不要把它们委托给别人的框架。” - benc
在这种特定情况下,Instabug必须从您的应用程序中清除,因为它使用了麦克风。 - Anton Tropashko
7个回答

95

如果你想快速为大多数媒体访问(设备上的照片、相机、视频录制、位置)添加 usageDescriptions,可以这样操作:

右键点击 info.plist 文件 -> 打开方式 -> 源代码

然后将以下内容粘贴到当前值之间:

<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for uploading audio</string>
<key>NSCameraUsageDescription</key>
<string>Need camera access for uploading images</string>
<key>NSLocationUsageDescription</key>
<string>Need location access for updating nearby friends</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app will use your location to show features near you.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Need photo library access for saving and uploading images</string>

当然,这些描述取决于您。我尽量让它们尽可能通用。

希望可以为某人节省时间!


44

只需添加NSMicrophoneUsageDescription键,然后在值中添加一个解释,说明您的应用程序为什么要使用麦克风。这是iOS 10中的最新要求。


你甚至没有指定 plist。 - hmedia1
在我看来,这个答案不值得被接受。作者没有解释如何做,也没有提到必须在 Info.plist 文件中完成,并且没有提供任何示例。 - greenskin
在 Info.plist 文件的哪个位置添加这个键?在顶部吗?在其中一个主要键中?以什么格式?使用引号还是大括号? - MichM

20

罪魁祸首是(鼓声): Instabug框架。 他们在市场页面上明确告诉您,允许用户在反馈过程中进行音频记录。 因此,我已经在应用程序的plist中添加了NSMicrophoneUsageDescription来解释这一点。

请注意,Instabug使用了很多苹果API。

未定义的架构arm64符号: (我删除了一些根据该框架所声称的功能似乎合法的内容,并留下了在市场软件中看不到声称的内容)

"_AVMakeRectWithAspectRatioInsideRect",来自于: +[IBGIAMImageAttachmentView sizeForContent:forWidth:] in InstabugHost_lto.o

"OBJC_CLASS$_CTTelephonyNetworkInfo",来自于: objc-class-ref in InstabugHost_lto.o

"_AVNumberOfChannelsKey",来自于: -[IBGVoiceNoteManager startRecording] in InstabugHost_lto.o

"_CTRadioAccessTechnologyHSDPA",来自于: +[IBGInspector getCarrier] in InstabugHost_lto.o

"_CTRadioAccessTechnologyGPRS",来自于: +[IBGInspector getCarrier] in InstabugHost_lto.o

"_CTRadioAccessTechnologyWCDMA",来自于: +[IBGInspector getCarrier] in InstabugHost_lto.o

"_CTRadioAccessTechnologyEdge",来自于: +[IBGInspector getCarrier] in InstabugHost_lto.o

"_CTRadioAccessTechnologyCDMA1x",来自于: +[IBGInspector getCarrier] in InstabugHost_lto.o

"_CTRadioAccessTechnologyCDMAEVDORevA",来自于: +[IBGInspector getCarrier] in InstabugHost_lto.o

"_CTRadioAccessTechnologyCDMAEVDORevB",来自于: +[IBGInspector getCarrier] in InstabugHost_lto.o

"_CTRadioAccessTechnologyLTE",来自于:+ [IBGInspector getCarrier] 在 InstabugHost_lto.o 中被引用。 “OBJC_CLASS$_AVURLAsset”,在 InstabugHost_lto.o 中的 IBGAsset 中被引用。 “OBJC_METACLASS$_AVURLAsset”,在 InstabugHost_lto.o 中的 IBGAsset 中被引用。 “_CTRadioAccessTechnologyCDMAEVDORev0”,在 InstabugHost_lto.o 中的 +[IBGInspector getCarrier] 中被引用。 “_CTRadioAccessTechnologyHSUPA”,在 InstabugHost_lto.o 中的 +[IBGInspector getCarrier] 中被引用。 ld: 找不到架构 arm64 的符号。 所以在后斯诺登时代,我想知道为什么它需要 coretelephony 。 因此,我的意思是,如果您没有第三方框架的源代码,您必须告知用户,您的应用程序本身未使用麦克风或相机,以便用户有拒绝访问该设备的选项。 您不希望由于某些安全漏洞而成为新闻中的一员,这些漏洞是通过您的应用程序利用的。 未解决:精心制作的麦克风使用说明并不能完全解决安全问题,尤其是当您的应用程序确实使用麦克风,而第三方框架(认为它)也需要使用麦克风时。 您必须撰写一份详细的说明,概述风险。 在这里,信用披露可能会派上用场,让用户了解您依赖哪些第三方代码。给予应有的信用:^) 如果您像我一样懒得阅读 iOS 安全白皮书, 这里有一个简短的链接:https://developer.apple.com/videos/play/wwdc2016/705/

如果您不想完整观看视频:在约19:00的时间点,讲话者明确告诉您不要懒得编写描述(您需要对第三方代码负责,因为该代码可能会滥用用户授予您的应用程序的权限。真是爱那些二进制框架;^)。

iOS 15更新:苹果已经针对第三方仅限二进制框架请求访问麦克风的安全漏洞采取行动,并在iOS 15中添加了审计跟踪,其中包括麦克风使用。这被称为“应用程序隐私报告”,可以在设置中找到。因此,审核跟踪的部分责任转移给了嵌入第三方垃圾软件的应用程序的用户。阿门。


真正的无限循环风格:“如果你真的很懒,在19:00左右,演讲者明确告诉你不应该懒惰……”并从0:00开始。 - Pavel P
显然,我很懒。找不到演讲者支持这个19:00标记的观点。 - tresf
19:00 标记:大声并清楚地说,您对将第三方代码纳入您的应用程序负有全部责任。 - Anton Tropashko
tresf. 由于您的留言,我在19:00标记处的描述更加详细。 - Anton Tropashko

17

iOS应用程序需要用户在访问麦克风之前授权。未经用户授权尝试访问将导致应用程序崩溃。

要请求用户权限,我们只需在info.plist文件中添加NSMicrophoneUsageDescription键,并为此键提供一个值。该值可以是任何字符串,说明应用程序需要访问麦克风。

输入图像描述


6

Instabug使用NSMicrophoneUsageDescription来允许您的用户录制有关错误或反馈的语音记录。


3
对于正在使用较新的 XCode(目前运行版本为14)的人来说,info.plist 不再像以前那样暴露。你要做的是:
  1. 打开相关的目标页面
  2. 进入“信息”
  3. 点击最后一个条目上的加号
  4. 现在它被称为“隐私 - 麦克风使用说明”

3

只要在你的代码库中有 AVAudioSession.sharedInstance().requestRecordPermission() ,就足以触发 iTunes Connect 中的此错误。甚至不必主动调用该代码!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接