Errore Appstore connect: stringa scopo mancante nel file Info.plist


154

Ho inviato la mia app per la revisione ad App Store Connect. Sebbene l'app sia ancora in fase di revisione, ho ricevuto un'email per informarmi che devo correggere un errore. Ecco il contenuto del messaggio:

Gentile sviluppatore,

Abbiamo identificato uno o più problemi con una consegna recente per la tua app XXXXX. La consegna è andata a buon fine, ma potresti voler correggere i seguenti problemi nella consegna successiva:

"Stringa di scopo mancante nel file Info.plist. Il codice della tua app fa riferimento a una o più API che accedono a dati utente sensibili. Il file Info.plist dell'app deve contenere una chiave NSLocationAlwaysUsageDescription con una stringa di scopo rivolta all'utente che spieghi in modo chiaro e completo il motivo per cui la tua app ha bisogno i dati. A partire dalla primavera del 2019, tutte le app inviate all'App Store che accedono ai dati degli utenti dovranno includere una stringa di scopo. Se si utilizzano librerie o SDK esterni, possono fare riferimento a API che richiedono una stringa di scopi. potrebbe non utilizzare queste API, è comunque necessaria una stringa di scopo. Puoi contattare lo sviluppatore della libreria o l'SDK e richiedere che rilascino una versione del loro codice che non contenga le API.

Dopo aver corretto i problemi, puoi utilizzare Xcode o Caricatore applicazioni per caricare un nuovo file binario su iTunes Connect.

I migliori saluti,

Il team dell'App Store

La mia app è completamente costruita con Expo e non so come accedere e modificare la Info.plist.

Qualche idea?


3
Sto riscontrando lo stesso problema con l'ultima build, dato che non utilizzo nemmeno i servizi di localizzazione nella mia app. E Apple non ha documenti ufficiali su questo cambiamento.
huong

3
+1 È stata rilasciata per la stessa app 2 giorni fa e tutto è andato bene. 2 giorni dopo, ho appena cambiato un paio di righe di codice per fare una nuova versione (non ho aggiunto altri Pod o qualcosa del genere) e ho ricevuto questo messaggio
Tiago Ornelas,

2
Abbiamo riscontrato lo stesso problema. Sospetto che sia un bug nel processo di approvazione (si spera). Ho intenzione di ignorare per il fine settimana e spero che sia risolto lunedì.
AMB,

2
Ho affrontato lo stesso identico problema proprio ora, anche se la nostra app non ha sempre bisogno di servizi di localizzazione. Ha solo bisogno di NSLocationWhenInUseUsageDescription per cui abbiamo già una stringa di scopo. Probabilmente questo è solo un problema tecnico alla fine di Apple?
ilight,

3
E alla moda di Apple, il link che forniscono nell'e-mail per risolverlo, è rotto.
Gwalshington,

Risposte:


45

Se stai usando Expo, puoi aggiungere la risoluzione aggiungendo infoPlist ad app.json in questo modo:

  "expo": {
     "ios": {
       "bundleIdentifier": "com.app.myapp",
       "infoPlist": {
         "NSLocationAlwaysUsageDescription": "Some message to appease Apple.",
       },
     },
   }

Documenti Expo


25
In realtà NON è "un messaggio per placare Apple", ma per far sapere all'utente cosa stai facendo con i dati (posizione) generati dall'utente in questo caso. È una questione di privacy e penso che sia giusto essere onesti con gli utenti delle tue app.
Lookaji,

4
Gotcha! Stavo pensando ai neofiti che potrebbero essere tentati di lasciarlo così! Non volevo sembrare scontroso :) evviva!
Lookaji,

@gwalshington Non ho alcun oggetto expo in app.json
Heemanshu Bhalla

@HeemanshuBhalla hmm, non sono sicuro del perché. Nel mio app.json, è in alto e viene dichiarato il primo oggetto. È dove dichiari il numero di versione, l'identificatore del bundle, ecc. Se hai espulso l'app, forse ha un aspetto leggermente diverso?
Gwalshington,

2
Quale testo digitare se non raccogliamo e dati sulla posizione? Dobbiamo inventare una bugia: S
Primož Kralj

62

EDIT aprile 2019 : ora devi aggiungere questi due tasti, poiché la primavera 2019 è iniziata. Nota che NSLocationAlwaysUsageDescriptionora è deprecato (dal momento che iOS 11) ed è stato sostituito con NSLocationAlwaysAndWhenInUseUsageDescriptione NSLocationWhenInUseUsageDescription. Se desideri supportare un livello inferiore a iOS 11, dovrai utilizzare i tre valori.

Per riassumere devi:

  • Aggiungi NSLocationAlwaysAndWhenInUseUsageDescriptionAND NSLocationWhenInUseUsageDescriptionper iOS 11 e altro
  • E aggiungi NSLocationAlwaysUsageDescriptionse vuoi supportare iOS 10 e meno
  • E infine, puoi aggiungere NSLocationUsageDescriptionse vuoi supportare iOS 8 e meno.


Puoi inviare la tua app anche se hai ricevuto questo messaggio!

Ho appena affrontato lo stesso problema ieri, anche se l'app non utilizza la funzionalità di localizzazione. Potrebbe essere correlato ad alcuni framework inclusi nel progetto che dispongono di questa funzione opzionale.

Posso confermare che la mia app è stata approvata anche senza il tasto NSLocationAlwaysUsageDescriptioneNSLocationWhenInUseUsageDescriptioninfo.plist

Infatti, come ha affermato Apple nella posta:

A partire dalla primavera del 2019, tutte le app inviate all'App Store che accedono ai dati dell'utente dovranno includere una stringa di scopo.

Quindi l'unica cosa da fare è aggiungere questa chiave (in questo momento è meglio, in modo da non dimenticare) nel tuo progetto in modo che sia inclusa nel tuo prossimo aggiornamento .

Aggiungi solo due nuove voci nelle tue info.plist, con NSLocationAlwaysUsageDescriptione NSLocationWhenInUseUsageDescriptioncome chiavi e una breve descrizione del perché le usi come valore (anche se non le usi davvero ...).


2
Nella tua modifica di aprile 2019, sei sicuro di non aver annullato l'ammortamento? Da quello che vedo NSLocationUsageDescription è quello che è deprecato. Guardando qui: developer.apple.com/library/archive/documentation/General/…
apricity

L'e-mail che ho ricevuto da Apple menziona NSLocationAlwaysUsageDescription quindi penso che l'abbia invertito.
Dror Bar,

@apricity @DrorBar Scusate ragazzi, anzi avevo fatto un errore. Non è stato invertito ma c'era ancora un errore, NSLocationAlwaysUsageDescriptiondovrebbe essere sostituito da NSLocationAlwaysAndWhenInUseUsageDescriptione NSLocationWhenInUseUsageDescription , e non da NSLocationUsageDescription(come ho scritto in precedenza, scusa ...). Ho aggiornato la mia risposta per aggiungere un riepilogo del processo.
AnthoPak,

48

Ho alcune app nel negozio e ho provato a distribuire una versione per QA e la stessa cosa è successa in due app diverse. Penso che questo sia un nuovo criterio per accettare i caricamenti di build su Appstore connect.

La soluzione è semplice, aggiungi le seguenti righe nel file .plist.

<key>NSLocationAlwaysUsageDescription</key>

<string>custom message</string>

<key>NSLocationWhenInUseUsageDescription</key>

<string>custom message</string>

PS: Nel mio caso non ho utilizzato alcuna funzionalità di localizzazione, ma ho aggiunto queste righe per rispettare le linee guida di Appstore Connect. Tra l'altro dopo aver ricevuto quell'e-mail, ho potuto testare l'app anche quando mi hanno detto che la build aveva alcuni problemi.

Spero che questo lavoro per voi ragazzi.


5
Wow, l'ho appena capito, ho capito che anche tutti lo stanno prendendo!
Cameron A. Ellis,

la prima chiave è cambiata fin d'ora in<key>NSLocationUsageDescription</key>
Hudi Ilfeld,

1
Dobbiamo ri-archiviare dopo aver aggiornato info.plist?
Bishoy Hanna,

Devo aumentare la versione del bundle o il numero di versione per caricare un nuovo file binario?
Dror Bar,

20

È un nuovo requisito di Apple, anche se non si utilizza la posizione. Se si desidera aggiungere le autorizzazioni in Xcode, cercare "Privacy - Descrizione dell'uso della posizione" e "Privacy - Posizione dell'uso Descrizione dell'uso" e digitare una stringa personalizzata per ciascuna di esse.

inserisci qui la descrizione dell'immagine


1
In un altro aggiornamento dell'app, anche Apple ha richiesto questa autorizzazione: "Privacy - Posizione sempre descrizione d'uso"
Juan José Ramírez

2
Quindi, se non utilizzo queste funzionalità, cosa devo scrivere lì, una bugia, qualcosa del tipo "raccogli posizione per un uso futuro, forse"?
Ruslan Shashkov,

sì, Apple ti raggiungerà se hanno domande
Juan José Ramírez,

Non riesco a trovare l' elenco delle proprietà delle informazioni nel mio xcode 10.1, avresti dovuto menzionare dove trovarlo, ho cercato le impostazioni di costruzione sia per i target che per il progetto
Awais Nasir

1
Okay Targets-> Info-> Custom ios Target Properties era la posizione esatta
Awais Nasir

15

Per semplificare ulteriormente è possibile aggiungere queste righe nella tua info.plist. Questi errori stanno arrivando perché a partire dalla primavera del 2019, tutte le app inviate all'App Store che accedono ai dati dell'utente dovranno includere una stringa di scopo.

  1. Apri info.plist come codice sorgente.
  2. Aggiungi queste righe nella tua lista

    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>

2
Ho dovuto rimuovere spazi extra nei tag <key> e poi ha funzionato.
inn

@innich grazie per averlo sottolineato, ho cambiato la mia risposta.
Sachin Nautiyal,

8
## Utilizzare questa chiave nel file info.plist

NSLocationAlwaysUsageDescription La tua posizione è richiesta per i vantaggi xyz per te NSLocationWhenInUseUsageDescription La tua posizione è richiesta per i vantaggi xyz per te


8

Abbiamo ricevuto la stessa e-mail e non utilizziamo affatto CoreLocation. Dopo una rapida ricerca, abbiamo scoperto che Parse SDK poteva usare CoreLocation. Nell'email di Apple, dicono chiaramente:

Se stai utilizzando librerie o SDK esterni, potrebbero fare riferimento a API che richiedono una stringa di scopo.

Ciò significa che nel momento in cui il codice o qualsiasi altra libreria o SDK può utilizzare CoreLocation, anche se non lo si utilizza, è necessario fornire una descrizione della privacy per "In uso" e "Usa sempre".

È anche qualcosa di nuovo di Apple e per ora è solo un avvertimento, ma sarà richiesto a partire dalla primavera 2019 per i nuovi invii.


È semplicemente stupido .... Se non lo sto usando, potrebbe impedire alle persone di scaricare la mia app solo per questo. -_-
Mayoul

3
Non proprio. L'avviso che ti chiede di utilizzare la localizzazione non verrà visualizzato a meno che non venga CLLocationManager.requestWhenInUseAuthorization()chiamato da qualche parte nel codice . Apple ha analizzato ogni codice app per vedere se una tale funzione potesse essere chiamata. Se non viene mai chiamato, l'avviso non verrà visualizzato.
sebleclerc,

6

Questo problema si verifica perché non hai incluso

 <NSLocationAlwaysUsageDescription>

per la tua app. Ho riscontrato lo stesso problema quando ho provato a inviare la mia app sull'App Store. Dopo che l'app è stata elaborata, ho ricevuto la stessa posta. Ho appena aggiunto la descrizione e ora è stata risolta.

Spero che questo ti aiuti.


Questo mi ha aiutato. Se stai usando Posizione nella tua app (o forse solo sempre) devi aggiungere questa linea e una stringa sotto di essa. <key>NSLocationAlwaysUsageDescription</key> <string>Always And In Use Permission</string>
MaylorTaylor,

6

Vi sono i seguenti casi:

NSLocationAlwaysAndWhenInUseUsageDescription (iOS>11)
NSLocationWhenInUseUsageDescription          (iOS>11)
NSLocationAlwaysUsageDescription             (iOS<=10)
NSLocationUsageDescription                   (seems very old, iOS8?)

Apple afferma a:

Aggiungi la NSLocationWhenInUseUsageDescriptionchiave e la NSLocationAlwaysAndWhenInUseUsageDescriptionchiave al tuo file Info.plist .

e:

Se la tua app supporta iOS 10 e precedenti, aggiungi il NSLocationAlwaysUsage

NSLocationUsageDescriptionsembra morto, l'unico riferimento nel sito ADC è: https://developer.apple.com/ibeacon/Getting-Started-with-iBeacon.pdf

Quindi, per sicurezza, usa prima 3.


3

Queste risposte ti dicono come rispettare le regole dell'App Store per evitare l'avvertimento, ma la vera soluzione sarebbe che Expo ti consentisse di disabilitare i loro requisiti SDK per i servizi di localizzazione a meno che tu non li utilizzi effettivamente - non sono sicuro che questo sia possibile.


3

stesso problema nel 19 febbraio, ho ricevuto un'e-mail con un sacco di permessi che non sto usando, suppongo che provengano da plugin. Apple afferma che il 19 marzo è un requisito, quindi le sto aggiungendo in info.plst e le sto caricando di nuovo.

È davvero molto sciocco.


2
Più di un commento davvero ...?
Steve,

3

Devo anche affrontare lo stesso problema ma dopo 27 ore ho ricevuto l'e-mail di approvazione anche se non ho fatto nulla. Quindi attendi circa 24 ore invece di ripetere tutto questo processo.


1
Sì, è un bug!
Danh Huynh,

2

Ho avuto <key>NSLocationWhenInUseUsageDescription </key> invece di <key>NSLocationWhenInUseUsageDescription</key>

assicurarsi di rimuovere gli spazi vuoti finali


2

Controlla l'e-mail che hai ricevuto da ** App Store Connect **

Identificare la chiave mancante inserisci qui la descrizione dell'immagine

Istruzioni

  1. Apri il file info.plist.

  2. Aggiungi e cerca la chiave mancante tra le opzioni fornite (ad es. Contatti = Privacy - Descrizione utilizzo contatti)

  3. Aggiungi descrizione utilizzo:

$ (PRODUCT_NAME) necessita dell'accesso dei contatti a "Fornisci qui il motivo".

Esempio:


1
signore ho avuto lo stesso errore, ma perché aggiungere a info.plist in realtà non sono usato funzionalità di contatto nella mia app, quindi perché dobbiamo aggiungerlo?
Kapil soni,

@Kapilsoni Assicurati di non accedere a una o più API che hanno accesso a dati sensibili dell'utente
Zeus

1
: signore ho usato solo la fotocamera e la posizione nella mia app?
Kapil soni,

2

Con Xcode 11 copia la chiave NSLocationAlwaysUsageDescriptione aggiungila a Info-> Custom iOS Target Properties-> Fai clic +in basso a sinistra in questa scheda e come valore inserisci un tipo di descrizione come This app requires location access to function properly..


2

"Stringa di scopo mancante nel file Info.plist. Il codice della tua app fa riferimento a una o più API che accedono a dati utente sensibili. Il file Info.plist dell'app deve contenere una chiave NSLocationAlwaysUsageDescription con una stringa di scopo rivolta all'utente che spieghi in modo chiaro e completo il motivo per cui la tua app ha bisogno i dati. A partire dalla primavera del 2019, tutte le app inviate all'App Store che accedono ai dati degli utenti dovranno includere una stringa di scopo. Se si utilizzano librerie o SDK esterni, possono fare riferimento a API che richiedono una stringa di scopi. potrebbe non utilizzare queste API, è comunque necessaria una stringa di scopo. Puoi contattare lo sviluppatore della libreria o l'SDK e richiedere che rilascino una versione del loro codice che non contenga le API.

Apri info.plist come codice sorgente.
Aggiungi queste righe nella tua lista

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>

1

Anche la mia app ha capito , e non faccio nulla al riguardo, ma può funzionare bene, la prossima volta penso che dovrei aggiungere tale chiave in plist, basta fare una descrizione


1

Una breve risposta al problema sopra -

NSLocationAlwaysUsageDescription deve essere aggiornato con la seguente descrizione nel file Info.plist

{Il nome della tua app} richiede l'accesso alla posizione per suggerire zone di epidemia di dengue.


0

Nel nostro caso, stavamo usando NSLocationWhenInUseUsageDescriptionnella nostra app, ma non NSLocationAlwaysUsageDescription.

Leggendo i commenti qui (grazie a matt-oakes), sembra che NSLocationAlwaysUsageDescriptionvenga utilizzato da uno dei framework di dipendenza che utilizziamo.

L'esecuzione della nostra app non mostra l'attuale autorizzazione modale NSLocationAlwaysUsageDescription, quindi sembra gestirla solo in background.

Quindi, in sintesi, l'aggiunta NSLocationAlwaysUsageDescriptiona Info.plist ha corretto l'e-mail di avviso e non ha modificato alcun comportamento nell'app 👍🏻

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.