ios - El Info.plist de la aplicación debe contener una clave NSMicrophoneUsageDescription con un valor de cadena que explique al usuario cómo utiliza la aplicación esta información.
itunesconnect ios10 (7)
Instabug usa NSMicrophoneUsageDescription
para permitir que los usuarios graben una nota de voz sobre un error o un comentario.
Info.plist
un rechazo de compilación El Info.plist
la aplicación debe contener una clave NSMicrophoneUsageDescription
con un valor de cadena que explique al usuario cómo utiliza la aplicación esta información.
La aplicación no usa micrófono. O eso creo.
¿Cómo rastreo dónde se usa el micrófono?
UPD23112016: dado que la respuesta perezosa se está modificando, he archivado una nueva solicitud de función con Apple para cerrar este agujero de seguridad.
UPD05042017: todavía es molesto que una vez que el proxy del acceso de micrófono en un marco de terceros a través de algún medio NSMicrophoneUsageDescription horneado tenga cero control sobre dónde y cuándo se puede utilizar si el usuario acepta permitir el acceso al micrófono. Amigos, por favor, hagan la debida diligencia y elaboren NSMicrophoneUsageDescription preciso que refleje el hecho de que el micrófono es utilizado por el código que está completamente fuera de su control cuando el uso es oscurecido por un marco binario de terceros. Gracias.
La razón es la falta de marcos en Linked FrameWorks y Libraries, como avkit y avfoundation
Las aplicaciones iOS requieren que el usuario conceda permiso antes de acceder al micrófono. Si intenta acceder sin permiso del usuario, se producirá un bloqueo de la aplicación.
Para solicitar el permiso del usuario, solo necesitamos agregar la clave NSMicrophoneUsageDescription en el archivo info.plist y proporcionar un valor para esta clave. El valor puede ser cualquier cadena que indique que las aplicaciones necesitan acceder al micrófono.
Para los perezosos:
si desea agregar rápidamente descripciones de uso para la mayoría de los medios de comunicación (fotos en el dispositivo, cámara, grabación de video, ubicación):
haga clic derecho en su archivo info.plist y -> abrir como -> Código fuente
luego pegue lo siguiente entre los valores actuales:
<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>
Estas descripciones, por supuesto, son tu decisión. Traté de hacerlos tan genéricos como sea posible.
Espero que esto le ahorre tiempo a alguien!
Simplemente agregue la clave NSMicrophoneUsageDescription
& in value agregue la justificación de por qué su aplicación está utilizando el micrófono. Este es el último requisito en iOS 10.
Simplemente teniendo AVAudioSession.sharedInstance().requestRecordPermission()
en algún lugar de su base de código es suficiente para desencadenar este error con iTunes Connect. ¡Ni siquiera es necesario llamar activamente a ese código!
Y el culpable fue (batería): marco Instabug. Te dicen que en sus páginas de marketware les permiten a los usuarios tomar notas de audio durante la composición de los comentarios. Así que he agregado NSMicrophoneUsageDescription
en la aplicación que explica eso.
Tenga en cuenta que hay una gran cantidad de API de Apple que usa instabug
Símbolos indefinidos para la arquitectura de arm64: (he eliminado algunos que parecen legítimos de acuerdo con lo que afirma que hace ese framework y dejé lo que no veo en el marketware)
"_AVMakeRectWithAspectRatioInsideRect", referenciado de: + [IBGIAMImageAttachmentView sizeForContent: forWidth:] en InstabugHost_lto.o
"_OBJC_CLASS _ $ _ CTTelephonyNetworkInfo", a la que se hace referencia en: objc-class-ref en InstabugHost_lto.o
"_AVNumberOfChannelsKey", a la que se hace referencia desde: - [IBGVoiceNoteManager startRecording] en InstabugHost_lto.o
"_CTRadioAccessTechnologyHSDPA", referenciado de: + [IBGInspector getCarrier] en InstabugHost_lto.o
"_CTRadioAccessTechnologyGPRS", a la que se hace referencia desde: + [IBGInspector getCarrier] en InstabugHost_lto.o
"_CTRadioAccessTechnologyWCDMA", referenciado a partir de: + [IBGInspector getCarrier] en InstabugHost_lto.o
"_CTRadioAccessTechnologyEdge", referenciado desde: + [IBGInspector getCarrier] en InstabugHost_lto.o
"_CTRadioAccessTechnologyCDMA1x", referenciado de: + [IBGInspector getCarrier] en InstabugHost_lto.o
"_CTRadioAccessTechnologyCDMAEVDORevA", a la que se hace referencia desde: + [IBGInspector getCarrier] en InstabugHost_lto.o
"_CTRadioAccessTechnologyCDMAEVDORevB", a la que se hace referencia desde: + [IBGInspector getCarrier] en InstabugHost_lto.o
"_CTRadioAccessTechnologyLTE", a la que se hace referencia desde: + [IBGInspector getCarrier] en InstabugHost_lto.o
"_OBJC_CLASS _ $ _ AVURLAsset", referenciado de: _OBJC_CLASS _ $ _ IBGAsset en InstabugHost_lto.o
"_OBJC_METACLASS _ $ _ AVURLAsset", referenciado de: _OBJC_METACLASS _ $ _ IBGAsset en InstabugHost_lto.o
"_CTRadioAccessTechnologyCDMAEVDORev0", a la que se hace referencia desde: + [IBGInspector getCarrier] en InstabugHost_lto.o
"_CTRadioAccessTechnologyHSUPA", a la que se hace referencia desde: + [IBGInspector getCarrier] en InstabugHost_lto.o
ld: símbolo (s) no encontrado (s) para la arquitectura arm64
Entonces, en este mundo post-Snowden, me pregunto por qué necesita Coretelephony, por ejemplo.
Entonces, a lo que me refiero es que si no tiene la fuente, un marco de terceros, tiene que revelarle al usuario que su aplicación NO está utilizando el micrófono o la cámara, de modo que el usuario tiene la opción de denegar el acceso a ese dispositivo.
No querrás aparecer en las noticias algún día debido a algún defecto de seguridad explotado a través de TU aplicación.
Sin resolver: la descripción del uso del micrófono cuidadosamente diseñado no resuelve el problema con seguridad por completo, en caso de que su aplicación SÍ use el micrófono y un marco de terceros (creo que) también lo necesita.
Aquí es donde la divulgación de créditos podría ser útil, dando a los usuarios una idea de qué código de terceros está confiando. Dar el crédito donde corresponde: ^)
Si eres flojo como yo y nunca leo el documento de seguridad ios, aquí hay un breve https://developer.apple.com/videos/play/wwdc2016/705/
Si eres realmente flojo alrededor de las 19:00, el hablante te dice explícitamente que no debes ser flojo con esas descripciones.