App rifiutata a causa di descrizioni di utilizzo mancanti (Xcode8)


91

Così oggi ho ricevuto questa mail che diceva che l'ultima build della mia app è stata rifiutata da iTunes Connect a causa di alcune descrizioni di utilizzo mancanti. Per essere precisi:

Questa app tenta di accedere ai dati sensibili alla privacy senza una descrizione dell'utilizzo. Il file Info.plist dell'app deve contenere una chiave NSContactsUsageDescription con un valore stringa che spiega all'utente come l'app utilizza questi dati.

Questa app tenta di accedere ai dati sensibili alla privacy senza una descrizione dell'utilizzo. Il file Info.plist dell'app deve contenere una chiave NSCalendarsUsageDescription con un valore di stringa che spiega all'utente come l'app utilizza questi dati.

Questa app tenta di accedere ai dati sensibili alla privacy senza una descrizione dell'utilizzo. Il file Info.plist dell'app deve contenere una chiave NSPhotoLibraryUsageDescription con un valore stringa che spiega all'utente come l'app utilizza questi dati.

Questa app tenta di accedere ai dati sensibili alla privacy senza una descrizione dell'utilizzo. Il file Info.plist dell'app deve contenere una chiave NSBluetoothPeripheralUsageDescription con un valore stringa che spiega all'utente come l'app utilizza questi dati.

Questa app tenta di accedere ai dati sensibili alla privacy senza una descrizione dell'utilizzo. Il file Info.plist dell'app deve contenere una chiave NSMicrophoneUsageDescription con un valore stringa che spiega all'utente come l'app utilizza questi dati.

Questa app tenta di accedere ai dati sensibili alla privacy senza una descrizione dell'utilizzo. Il file Info.plist dell'app deve contenere una chiave NSMotionUsageDescription con un valore stringa che spiega all'utente come l'app utilizza questi dati.

Una volta che questi problemi sono stati corretti, puoi inviare nuovamente il file binario corretto.

Ho capito che questi sono diventati obbligatori con iOS 10, ma l'unico problema è che la mia app non richiede il permesso per accedere a nessuno di questi .. Pensavo che la descrizione fosse obbligatoria solo se hai effettivamente richiesto un permesso?

È perché una delle mie dipendenze (Cocoapods) potrebbe contenere del codice per richiedere queste autorizzazioni? O queste descrizioni sono obbligatorie anche se non chiedo mai di vedere il calendario, i contatti, ecc. Degli utenti?


3
Dalla mia esperienza, questi sono necessari solo se stai richiedendo le autorizzazioni. Quindi forse qualche dipendenza sta facendo questo per te. Inoltre TUTTE queste autorizzazioni hanno un odore di pesce soprattutto se la tua app è una semplice lista di cose da fare. Forse qualche dipendenza sta andando a phishing?
Eimantas,

Potresti postare il tuo PodFilee l'elenco delle biblioteche che usi (se usi qualche cocoapod esterno)?
Julien Quere,

Era github.com/nickoneill/PermissionScope .. Grazie per il tuo aiuto!
KimHafr

La sua spiegato e spettacolo utilizzo: iosdevcenters.blogspot.com/2016/09/...
Saeid

Ho esattamente lo stesso problema e credo che essa è causata da: pod 'ReactNativePermissions',: PATH =>' ../node_modules/react-native-permissions'
luky

Risposte:


33

Le descrizioni sono obbligatorie per qualsiasi contenuto tu o qualsiasi framework a cui colleghi contro il tentativo di accesso. Gli errori vengono generati al tentativo di accedere al contenuto se non è stata fornita una descrizione dell'utilizzo, quindi se ricevi tali errori la tua app deve richiederli. Dovresti scoprire il motivo per cui la tua app oi suoi framework li richiedono e aggiungere le descrizioni di utilizzo appropriate al file info.plist della tua app.

O più idealmente, se non hai bisogno dell'accesso, vedi se c'è un modo per non richiederlo (o usa framework che lo fanno inutilmente).


11
Non potevo per la vita di me immaginare che avrei aggiunto una libreria che richiede tutte queste autorizzazioni. Ma era così ovvio quando l'ho trovato: github.com/nickoneill/PermissionScope
KimHafr

1
Sì, un framework del genere potrebbe non essere una grande idea perché fa sì che la tua app dichiari molte più autorizzazioni di quelle necessarie.
Matthew Seaman

3
Immagino che questa sia più una funzionalità che un bug .. iTunes Connect rileva che da qualche parte nella tua app, qualcuno potrebbe richiedere le autorizzazioni. In tal caso è necessario compilare le descrizioni di utilizzo per tutti questi, nel caso in cui si possa effettivamente richiamare parte del codice in permissionscope. Anche il framework mi piace e non sono pronto a sostituirlo. Quindi ho inserito del testo fasullo e l'app è stata approvata. L'ho inviato all'AppStore, quindi spero che sia ok :-)
KimHafr

15
Hai bisogno di un modo per rilevare quale framework richiede tali autorizzazioni?
neobie

5
Neobie - hai scoperto come rilevare i framework che richiedono i permessi?
Nitesh

140

iOS 10 deve aggiungere l'autorizzazione in info.plist, basta rivedere questo BLOG: - settings-in-ios-10 hai un'idea.

Aggiungi l'autorizzazione nel file info.plist in base al tuo registro degli errori .

Nota: scrivi il motivo appropriato per l'autorizzazione nel valore stringa, altrimenti Apple rifiuta di nuovo l'app.

NSCameraUsageDescription

<key>NSCameraUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSContactsUsageDescription

<key>NSContactsUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSPhotoLibraryUsageDescription

<key>NSPhotoLibraryUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSBluetoothPeripheralUsageDescription

<key>NSBluetoothPeripheralUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSMicrophoneUsageDescription

<key>NSMicrophoneUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSMotionUsageDescription

<key>NSMotionUsageDescription</key>
    <string>$(PRODUCT_NAME) motion use.</string>

NSLocationAlwaysUsageDescription

<key>NSLocationAlwaysUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSLocationUsageDescription

<key>NSLocationUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSLocationWhenInUseUsageDescription

<key>NSLocationWhenInUseUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSRemindersUsageDescription

<key>NSRemindersUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSSiriUsageDescription

<key>NSSiriUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSVideoSubscriberAccountUsageDescription

<key>NSVideoSubscriberAccountUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSSpeechRecognitionUsageDescription

<key>NSSpeechRecognitionUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSCalendarsUsageDescription

<key>NSCalendarsUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

inserisci qui la descrizione dell'immagine


Non dovrebbe essere "$ {PRODUCT_NAME}" invece di "$ (PRODUCT_NAME)"? "{}" invece di "()".
barra rovesciata-f

@ backslash-f, controlla il file plist esistente nel nuovo progetto e dovrebbe essere $(PRODUCT_NAME). Puoi vedere la proprietà predefinita come Bundle namenel file plist.
Jayesh Thanki

1
Tieni presente che una descrizione generica come questa non ti consentirà più l'approvazione dell'app store. Siamo stati colpiti solo due volte per descrizioni simili. Devi descrivere il vero utilizzo per un essere umano
O'Rooney il

9

Puoi aggiungere nel tuo info.plist come:

<key>NSCalendarsUsageDescription</key>
    <string>Explain the reasons for accessing...</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>Explain the reasons for accessing...</string>
    <key>NSBluetoothPeripheralUsageDescription</key>
    <string>Explain the reasons for accessing...</string>

eccetera.

La speranza aiuterà qualcuno ...


6

Ho avuto lo stesso problema e sembra che se qualsiasi framework a cui ti colleghi ha un codice che richiede questa autorizzazione (anche se la tua app non li richiede mai), le descrizioni di utilizzo sono necessarie. Ma secondo il mio test, se non li richiedi, non verranno visualizzati nell'elenco delle autorizzazioni della tua app.


3

Calendario: Chiave: Privacy - Descrizione utilizzo calendari
Valore: $ (PRODUCT_NAME) eventi di calendario

Promemoria: Chiave: Privacy - Descrizione utilizzo promemoria
Valore: $ (PRODUCT_NAME) utilizzo promemoria

Contatto : Chiave: Privacy - Contatti Utilizzo Descrizione
Valore: $ (PRODUCT_NAME) utilizzo contatto

Foto: Chiave: Privacy - Utilizzo della libreria di foto Descrizione
Valore: $ (PRODUCT_NAME) utilizzo di foto

Condivisione Bluetooth: Chiave: Privacy - Utilizzo della periferica Bluetooth Descrizione
Valore: $ (PRODUCT_NAME) Utilizzo della periferica Bluetooth

Microfono: Chiave: Privacy - Descrizione utilizzo microfono
Valore: utilizzo microfono $ (PRODUCT_NAME)

Fotocamera: Chiave: Privacy - Descrizione utilizzo fotocamera
Valore: $ (PRODUCT_NAME) utilizzo fotocamera

Posizione: Chiave: Privacy - Posizione sempre Utilizzo Descrizione
Valore: $ (PRODUCT_NAME) utilizzo posizione

Chiave: Privacy - Posizione quando in uso Descrizione utilizzo
Valore: $ (PRODUCT_NAME) utilizzo posizione

Heath: Chiave: Privacy - Condivisione integrità Utilizzo Descrizione
Valore: $ (PRODUCT_NAME) utilizzo condivisione salute

Chiave: Privacy - Descrizione utilizzo aggiornamento integrità
Valore: utilizzo aggiornamento $ (PRODUCT_NAME)

HomeKit: Chiave: Privacy - Uso di HomeKit Descrizione
Valore: utilizzo del kit da casa $ (PRODUCT_NAME)

Libreria multimediale: Chiave: Privacy - Descrizione utilizzo libreria multimediale
Valore: utilizzo libreria multimediale $ (PRODUCT_NAME)

Movimento: Chiave: Privacy - Descrizione utilizzo movimento
Valore: utilizzo movimento $ (PRODUCT_NAME)

Riconoscimento vocale: Chiave: Privacy - Descrizione dell'utilizzo del riconoscimento vocale
Valore: $ (PRODUCT_NAME) uso vocale

SiriKit: Chiave: Privacy - Descrizione utilizzo Siri
Valore: $ (PRODUCT_NAME) uso siri

Fornitore TV: Chiave: Privacy - Descrizione utilizzo provider TV
Valore: $ (PRODUCT_NAME) utilizzo tvProvider


0

Per chiunque si chieda perché all'improvviso la tua app ora ha tutte queste impostazioni di autorizzazione in primo luogo, potrebbe essere a causa di CocoaPods o Carthage: hanno agganciato tutte queste autorizzazioni. Ho appena aggiornato la mia app per utilizzare cordova-plugin-firebasex che ha un'installazione estesa di Cocoapods (e dipendenze). Puoi disattivare questi permessi PRIMA di installare cocoapods nel tuo progetto mettendo un PermissionsConfiguration.xcconfig nella radice del tuo progetto - puoi leggere di più su questo qui: https://cocoapods.org/pods/Permission#installation

Tutto questo mi ha sorpreso quando la nuova versione della mia app è stata rifiutata con 7 chiavi / stringhe di autorizzazioni mancanti dal file Info.plist. Ho quindi dovuto scavare nel mio progetto per trovare la causa di ciò poiché la mia app non ha bisogno o utilizza nessuna di queste autorizzazioni (non ha mai).

Potrebbe esistere ma al momento non riesco a trovare un modo per rimuovere i permessi dopo l'integrazione dei pod ... dovrò scavare un po 'su come farlo senza ricominciare il mio progetto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.