应用的 Info.plist 必须包含一个 NSMicrophoneUsageDescription 键和一个字符串值,向用户解释应用如何使用此数据

The app's Info.plist must contain an NSMicrophoneUsageDescription key with a string value explaining to the user how the app uses this data

构建被拒绝 应用程序的 Info.plist 必须包含一个 NSMicrophoneUsageDescription 键和一个字符串值,向用户解释应用程序如何使用此数据。

该应用不使用麦克风。大概是这样吧。

如何追踪使用麦克风的位置?

UPD23112016:鉴于懒惰的回答被点赞,我已经向 Apple 提交了一项新功能请求以关闭此安全漏洞。

UPD05042017:代理mic访问还是很麻烦 通过一些半生不熟的 NSMicrophoneUsageDescription 进入一些第三方框架 如果用户同意,您可以对何时何地使用它进行零控制 允许麦克风访问。伙计们,请做尽职调查和工艺精确 NSMicrophoneUsageDescription 反映了麦克风的事实 当使用被第 3 方二进制框架掩盖时,由完全不受您控制的代码使用。谢谢

UPD2021:Apple 尽其所能为共享的审计跟踪 最近 iOS 中的资源(例如麦克风)使用情况,因此用户 在实际访问发生时进行一些资源检查。 不错的尝试,但是有多少人会进行尽职调查?

只需添加 NSMicrophoneUsageDescription 键并在值中添加您的应用使用麦克风的理由。这是 iOS 10.

中的最新要求

罪魁祸首是(鼓):Instabug 框架。 他们在他们允许的市场软件页面上告诉你 用户在反馈撰写过程中做音频笔记。 所以我将 NSMicrophoneUsageDescription 添加到应用程序列表中 解释一下。

注意instabug用的苹果API很多

架构 arm64 的未定义符号: (我已经删除了一些根据该框架声称要做的似乎合法的东西,并留下了我在市场软件中没有看到的东西)

“_AVMakeRectWithAspectRatioInsideRect”,引用自: +[IBGIAMImageAttachmentView sizeForContent:forWidth:] 在 InstabugHost_lto.o

"OBJC_CLASS$_CTTelephonyNetworkInfo",引用自: InstabugHost_lto.o

中的 objc-class-ref

“_AVNumberOfChannelsKey”,引用自: - [IBGVoiceNoteManager startRecording] 在 InstabugHost_lto.o

“_CTRadioAccessTechnologyHSDPA”,引用自: +[IBGInspector getCarrier] 在 InstabugHost_lto.o

“_CTRadioAccessTechnologyGPRS”,引用自: +[IBGInspector getCarrier] 在 InstabugHost_lto.o

“_CTRadioAccessTechnologyWCDMA”,引用自: +[IBGInspector getCarrier] 在 InstabugHost_lto.o

“_CTRadioAccessTechnologyEdge”,引用自: +[IBGInspector getCarrier] 在 InstabugHost_lto.o

“_CTRadioAccessTechnologyCDMA1x”,引用自: +[IBGInspector getCarrier] 在 InstabugHost_lto.o

“_CTRadioAccessTechnologyCDMAEVDORevA”,引用自: +[IBGInspector getCarrier] 在 InstabugHost_lto.o

“_CTRadioAccessTechnologyCDMAEVDORevB”,引用自: +[IBGInspector getCarrier] 在 InstabugHost_lto.o

“_CTRadioAccessTechnologyLTE”,引用自: +[IBGInspector getCarrier] 在 InstabugHost_lto.o

"OBJC_CLASS$_AVURLAsset",引用自: OBJC_CLASS$_IBG资产在InstabugHost_lto.o

"OBJC_METACLASS$_AVURLAsset",引用自: OBJC_METACLASS$_IBG资产在InstabugHost_lto.o

“_CTRadioAccessTechnologyCDMAEVDORev0”,引用自: +[IBGInspector getCarrier] 在 InstabugHost_lto.o

“_CTRadioAccessTechnologyHSUPA”,引用自: +[IBGInspector getCarrier] 在 InstabugHost_lto.o

ld:未找到架构 arm64 的符号

所以在这个 post-Snowden 世界里我想知道为什么它需要 coretelephony, 例如。

所以我要说的是,如果你没有源代码,那么第三个 您必须向用户披露您的应用程序的派对框架 本身不使用麦克风或摄像头,以便用户 可以选择拒绝访问该设备。

你不想有一天因为某些安全漏洞而出现在新闻中 通过您的应用程序被利用。

未解决:精心制作的麦克风使用说明并没有完全解决安全问题,但以防万一您的应用确实使用麦克风并且第 3 方框架(认为它)也需要它。 您必须起草一份概述风险的冗长描述。

在这里,信用披露可以派上用场,让用户了解您所依赖的第 3 方代码。归功于到期的地方:^)

如果你像我一样懒惰,从不通读 ios 安全白皮书 这是一个简短的 https://developer.apple.com/videos/play/wwdc2016/705/

如果您不想完整观看视频:在 19:00 标记周围,演讲者明确告诉您,您不能偷懒这些描述(您对第 3 方负责 代码可能会滥用用户授予您的应用程序的权限。 必须喜欢二进制框架 ;^)

对于懒人:

如果您想为大多数媒体访问(设备上的照片、相机、视频录制、位置)快速添加使用说明:

右键单击您的 info.plist 文件并 -> 打开为 -> 源代码

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

<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for uploading videos</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 cool stuffs near you.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Need photo library access for uploading images</string>

当然,这些描述由您决定。我试图让它们尽可能通用。

希望这可以节省一些人的时间!

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

iOS 应用要求用户在访问麦克风之前授予权限。试图在未经用户许可的情况下访问它会导致应用程序崩溃。

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

只需在您的代码库中的某处设置 AVAudioSession.sharedInstance().requestRecordPermission() 就足以在 iTunes Connect 中触发此错误。甚至不需要主动调用该代码!

我想这需要另一个答案来赞美我的另一个长篇大论的答案(因为人们通常懒得去阅读,到目前为止开发人员大多是人)

Apple 已针对请求访问麦克风的仅第三方二进制框架的安全漏洞采取行动,并在 ios15 中添加了对(除其他外)麦克风使用情况的审计跟踪。 App Privacy Report 它在设置中调用。因此,审计该踪迹的部分责任转移到了嵌入了第 3 方垃圾软件的应用程序的用户身上。阿们。