Rejet de la construction L'application Info.plist
doit contenir une clé NSMicrophoneUsageDescription
avec une valeur de chaîne expliquant à l'utilisateur comment l'application utilise ces données.
L'application n'utilise pas de microphone. Ou alors je pense.
Comment savoir où le micro est utilisé?
UPD23112016: étant donné que la réponse paresseuse a été votée, j'ai déposé une nouvelle demande de fonctionnalité auprès d'Apple afin de fermer cette faille de sécurité.
UPD05042017: il est toujours gênant qu'une fois que vous avez un accès proxy Dans un framework tiers via un NSMicrophoneUsageDescription à moitié cuit. . Mesdames, faites preuve de diligence raisonnable et définissez avec précision NSMicrophoneUsageDescription qui reflète le fait que le micro est utilisé par le code qui échappe totalement à votre contrôle lorsque son utilisation est masquée par un framework tiers uniquement binaire. Merci.
Il suffit d’ajouter la clé NSMicrophoneUsageDescription
et, dans la valeur, la justification de l’utilisation du microphone par votre application. Ceci est la dernière exigence dans iOS 10.
Pour les paresseux:
si vous souhaitez ajouter rapidement des descriptions d'utilisation pour la plupart des accès aux médias (photos sur l'appareil, appareil photo, enregistrement vidéo, emplacement):
faites un clic droit sur votre fichier info.plist et -> ouvrez en tant que -> code source
puis collez le texte suivant entre les valeurs actuelles:
<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>
Ces descriptions, bien sûr, sont à vous. J'ai essayé de les rendre aussi génériques que possible.
J'espère que cela fait gagner du temps à quelqu'un!
Et le coupable était (batterie): Cadre Instabug . Ils vous disent ici même sur leurs pages marketware qu’ils autorisent Les utilisateurs à prendre des notes audio pendant la composition des commentaires . J'ai donc ajouté NSMicrophoneUsageDescription
à la liste des applications expliquant cela.
Notez qu’il ya beaucoup d’API Apple qui utilise instabug
Symboles non définis pour l'architecture arm64: (J'en ai enlevé quelques-uns qui semblent légitimes selon ce que prétend faire le cadre et j'ai laissé ce que je ne vois pas dans le marketware)
"_AVMakeRectWithAspectRatioInsideRect", référencé depuis: + [IBGIAMImageAttachmentView sizeForContent: forWidth:] dans InstabugHost_lto.o
"_OBJC_CLASS _ $ _ CTTelephonyNetworkInfo", référencé depuis: Objc-class-ref dans InstabugHost_lto.o
"_AVNumberOfChannelsKey", référencé depuis: - [IBGVoiceNoteManager startRecording] dans InstabugHost_lto.o
"_CTRadioAccessTechnologyHSDPA", référencé depuis: + [IBGInspector getCarrier] dans InstabugHost_lto.o
"_CTRadioAccessTechnologyGPRS", référencé depuis: + [IBGInspector getCarrier] dans InstabugHost_lto.o
"_CTRadioAccessTechnologyWCDMA", référencé depuis: + [IBGInspector getCarrier] dans InstabugHost_lto.o
"_CTRadioAccessTechnologyEdge", référencé depuis: + [IBGInspector getCarrier] dans InstabugHost_lto.o
"_CTRadioAccessTechnologyCDMA1x", référencé depuis: + [IBGInspector getCarrier] dans InstabugHost_lto.o
"_CTRadioAccessTechnologyCDMAEVDORevA", référencé depuis: + [IBGInspector getCarrier] dans InstabugHost_lto.o
"_CTRadioAccessTechnologyCDMAEVDORevB", référencé depuis: + [IBGInspector getCarrier] dans InstabugHost_lto.o
"_CTRadioAccessTechnologyLTE", référencé depuis: + [IBGInspector getCarrier] dans InstabugHost_lto.o
"_OBJC_CLASS _ $ _ AVURLAsset", référencé depuis: _ OBJC_CLASS _ $ _ IBGAsset dans InstabugHost_lto.o
"_OBJC_METACLASS _ $ _ AVURLAsset", référencé depuis: _ OBJC_METACLASS _ $ _ IBGAsset dans InstabugHost_lto.o
"_CTRadioAccessTechnologyCDMAEVDORev0", référencé depuis: + [IBGInspector getCarrier] dans InstabugHost_lto.o
"_CTRadioAccessTechnologyHSUPA", référencé depuis: + [IBGInspector getCarrier] dans InstabugHost_lto.o
ld: symbole (s) non trouvé (s) pour l'architecture arm64
Donc, dans ce monde post-Snowden, je me demande pourquoi il a besoin de la corétéléphonie, par exemple
Donc, ce que je veux dire, c'est que si vous n'avez pas la source d'un tiers-cadre, vous devez indiquer à l'utilisateur que votre application, elle-même, n'utilise PAS de microphone, ni d'appareil photo a une option pour refuser l'accès à ce périphérique.
Vous ne voulez pas être dans les nouvelles un jour en raison d'une faille de sécurité Exploitée via VOTRE application.
Non résolue: la description d'utilisation du microphone soigneusement conçue ne résout pas complètement le problème de la sécurité, même si votre application DOIT utiliser un microphone et un framework tiers (pensez-le) en a également besoin.
C'est ici que la divulgation de crédits peut s'avérer utile pour donner aux utilisateurs une idée du code tiers sur lequel vous vous appuyez. Donnez le crédit où il est dû: ^)
Si vous êtes paresseux comme moi et ne lisez jamais le livre blanc sur la sécurité ios .__, voici un bref https://developer.Apple.com/videos/play/wwdc2016/705/
Si vous êtes vraiment paresseux aux alentours de 19h00, l’orateur vous dit explicitement que vous ne devriez pas être paresseux à propos de ces descriptions.
les applications iOS nécessitent que l'utilisateur accorde une autorisation avant d'accéder au microphone. Essayer d'y accéder sans la permission de l'utilisateur entraînera un blocage de l'application.
Pour demander l'autorisation de l'utilisateur, il suffit d'ajouter la clé NSMicrophoneUsageDescription dans le fichier info.plist & et de fournir une valeur pour cette clé. La valeur peut être n'importe quelle chaîne indiquant que les applications doivent accéder au microphone.
Instabug utilise NSMicrophoneUsageDescription
pour permettre à vos utilisateurs d'enregistrer une note vocale à propos d'un bogue ou d'un commentaire.
Le fait d'avoir AVAudioSession.sharedInstance().requestRecordPermission()
quelque part dans votre base de code suffit à déclencher cette erreur avec iTunes Connect. Il n'est même pas nécessaire d'appeler activement ce code!