ビルド拒否を取得アプリのInfo.plist
には、アプリがこのデータをどのように使用するかをユーザーに説明する文字列値を持つNSMicrophoneUsageDescription
キーが含まれている必要があります。
アプリはマイクを使用しません。またはそう思う。
マイクの使用場所を追跡するにはどうすればよいですか?
UPD23112016:怠answerな答えが支持されていることを考えると、このセキュリティホールを塞ぐために、Appleで新しい機能リクエストを提出しました。
UPD05042017:一度焼いたNSMicrophoneUsageDescriptionを介してサードパーティのフレームワークにマイクアクセスをプロキシすると、ユーザーがマイクアクセスを許可することに同意する場合、いつどこで使用できるかをゼロに制御するのは面倒です。皆さん、デューデリジェンスを行い、サードパーティのバイナリのみのフレームワークによって使用法が隠されている場合、マイクが完全に制御できないコードによって使用されているという事実を反映した正確なNSMicrophoneUsageDescriptionを作成してください。ありがとう。
NSMicrophoneUsageDescription
キーと値を追加するだけで、アプリがマイクを使用している理由を正当化できます。これはiOS 10の最新の要件です。
怠け者の場合:
ほとんどのメディアアクセス(デバイス上の写真、カメラ、ビデオ録画、場所)のusageDescriptionsをすばやく追加する場合:
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 Library access for uploading Images</string>
もちろん、これらの説明はあなた次第です。私はそれらをできるだけ汎用的にしようとしました。
これが誰かの時間を節約することを願っています!
そして犯人は(ドラム)でした:Instabugフレームワーク。彼らはマーケットウェアのページですぐにあなたに伝え、フィードバックの作成中にユーザーが音声メモを取ることができるようにします。そのため、NSMicrophoneUsageDescription
をアプリのplistに追加して説明しました。
Instabugが使用するApple APIがたくさんあることに注意してください
アーキテクチャarm64の未定義のシンボル:(フレームワークが主張する内容に従って正当と思われるものを削除し、マーケットウェアで主張していないものを残しました)
「_AVMakeRectWithAspectRatioInsideRect」、参照元:InstabugHost_lto.oの+ [IBGIAMImageAttachmentView sizeForContent:forWidth:]
「_OBJC_CLASS _ $ _ CTTelephonyNetworkInfo」、参照元:InstabugHost_lto.oのobjc-class-ref
「_AVNumberOfChannelsKey」、参照元:InstabugHost_lto.oの-[IBGVoiceNoteManager startRecording]
「_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のシンボルが見つかりません
ですから、この雪が降った後の世界では、たとえば、なぜコアテレフォニーが必要なのか疑問に思う必要があります。
私が得ているのは、サードパーティのフレームワークのソースがない場合、アプリ自体がマイクやカメラを使用していないことをユーザーに開示する必要があるため、ユーザーはアクセスを拒否するオプションがありますそのデバイス。
あなたのアプリを介して悪用されたセキュリティ上の欠陥のために、いつかニュースになりたくありません。
未解決:慎重に作成されたマイク使用法の説明では、アプリでマイクとサードパーティのフレームワークを使用する場合(考えてみてください)も必要な場合でも、セキュリティの問題は完全には解決しません。
ここで、クレジットの開示が役立ち、ユーザーがどのサードパーティコードに依存しているのかを知ることができます。それが原因であるクレジットを与える:^)
私のような怠け者で、iOSセキュリティホワイトペーパーを一度も読んでいない場合は、ここに短いものがあります https://developer.Apple.com/videos/play/wwdc2016/705/
ビデオを完全に見たいと思わない場合:19:00頃、スピーカーはあなたがそれらの説明に怠けてはならないことを明確に告げます。
InstabugはNSMicrophoneUsageDescription
を使用して、ユーザーがバグについての音声メモやフィードバックを録音できるようにします。
コードベースのどこかにAVAudioSession.sharedInstance().requestRecordPermission()
があるだけで、iTunes Connectでこのエラーをトリガーできます。そのコードを積極的に呼び出す必要さえありません!