58

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

该应用程序不使用麦克风。或者我认为。

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

UPD23112016:鉴于懒惰的答案正在被赞成,我已经向苹果提交了一个新的功能请求以关闭这个安全漏洞。

UPD05042017:一旦您通过一些半生不熟的 NSMicrophoneUsageDescription 将麦克风访问代理到某个 3rd 方框架中,如果用户同意允许麦克风访问,您对何时何地可以使用它的控制为零,这仍然很麻烦。伙计们,请尽职尽责并制作精确的 NSMicrophoneUsageDescription 以反映这样一个事实,即当使用被第 3 方仅二进制框架所掩盖时,麦克风被完全超出您控制范围的代码使用。谢谢。

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

4

7 回答 7

79

对于懒人:

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

右键单击您的 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>

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

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

于 2016-10-31T17:46:46.260 回答
45

只需添加NSMicrophoneUsageDescription键和值添加您的应用程序使用麦克风的理由。这是 iOS 10 中的最新要求。

于 2016-09-20T09:21:05.650 回答
19

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

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

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

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

OBJC_CLASS $_CTTelephonyNetworkInfo”,引用自:InstabugHost_lto.o 中的 objc-class-ref

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

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

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

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

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

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

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

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

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

OBJC_CLASS $_AVURLAsset”,引用自: InstabugHost_lto.o中的 OBJC_CLASS $_IBGAsset

OBJC_METACLASS $_AVURLAsset”,引用自: InstabugHost_lto.o中的 OBJC_METACLASS $_IBGAsset

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

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

ld:未找到架构 arm64 的符号

因此,在这个后斯诺登时代,我不得不想知道为什么它需要核心电话。

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

由于您的应用程序利用了一些安全漏洞,您不希望有一天出现在新闻中。

未解决:精心设计的麦克风使用描述并不能完全解决安全问题,但万一您的应用确实使用了麦克风并且第 3 方框架(认为它)也需要它。您必须编写一份冗长的描述来概述风险。

在这里,信用披露可以派上用场,让用户了解您所依赖的第 3 方代码。给予应得的功劳:^)

如果您像我一样懒惰并且从未阅读过 ios 安全白皮书,这里有一个简短的https://developer.apple.com/videos/play/wwdc2016/705/

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

于 2016-09-20T09:21:30.787 回答
15

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

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

在此处输入图像描述

于 2018-02-21T04:31:03.363 回答
6

Instabug 用于NSMicrophoneUsageDescription允许您的用户录制有关错误或对您的反馈的语音注释。

于 2017-02-22T21:28:37.443 回答
2

AVAudioSession.sharedInstance().requestRecordPermission()在代码库中的某个位置就足以触发 iTunes Connect 的此错误。甚至没有必要主动调用该代码!

于 2018-03-13T17:10:32.273 回答
0

我想这需要另一个答案来补充我的其他大量答案(因为人们通常都懒得阅读,到目前为止,开发人员大多是人)

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

于 2021-06-09T15:00:49.490 回答