Erro Appstore conectar: ​​seqüência de finalidade ausente no arquivo Info.plist

153

Enviei meu aplicativo para revisão na App Store Connect. Embora o aplicativo ainda esteja sendo analisado, recebi um e-mail para informar que preciso corrigir um erro. Aqui está o conteúdo da mensagem:

Caro desenvolvedor,

Identificamos um ou mais problemas com uma entrega recente para seu aplicativo XXXXX. Sua entrega foi bem-sucedida, mas você pode corrigir os seguintes problemas na sua próxima entrega:

"String de finalidade ausente no arquivo Info.plist. O código do aplicativo faz referência a uma ou mais APIs que acessam dados confidenciais do usuário. O arquivo Info.plist do aplicativo deve conter uma chave NSLocationAlwaysUsageDescription com uma string de finalidade voltada para o usuário, explicando clara e completamente por que o aplicativo precisa A partir da primavera de 2019, todos os aplicativos enviados à App Store que acessam dados do usuário deverão incluir uma sequência de propósitos.Se você estiver usando bibliotecas externas ou SDKs, eles poderão fazer referência a APIs que exigem uma sequência de propósitos. pode não usar essas APIs, ainda é necessária uma sequência de objetivos.Você pode entrar em contato com o desenvolvedor da biblioteca ou do SDK e solicitar que eles liberem uma versão do código que não contenha as APIs.

Depois de corrigir os problemas, você pode usar o Xcode ou o Application Loader para carregar um novo binário no iTunes Connect.

Cumprimentos,

Equipe da App Store

Meu aplicativo foi totalmente desenvolvido com a Expo e não sei como acessar e modificar o Info.plist.

Qualquer ideia?

John doe
fonte
3
Estou tendo o mesmo problema com a versão mais recente, pois nem uso os Serviços de Localização no meu aplicativo. E a Apple não possui um documento oficial sobre essa mudança.
huong 24/08/18
3
+1 Lançou um aplicativo para o mesmo aplicativo há 2 dias e está tudo bem. 2 dias mais tarde, apenas mudou um par de linhas de código para fazer uma nova versão (não adicionar mais Pods ou algo parecido) e eu tenho esta mensagem
Tiago Ornelas
2
Tivemos o mesmo problema. Suspeito que seja um bug no processo de aprovação (espero). Vou ignorar no fim de semana e espero que seja consertado na segunda-feira.
AMB
2
Enfrentei o mesmo problema exato agora, embora nosso aplicativo não precise realmente dos serviços de localização sempre. Ele só precisa de NSLocationWhenInUseUsageDescription para o qual já temos uma string de propósito. Provavelmente, isso é apenas uma falha no final da Apple?
ilight
3
E à moda da Apple, o link que eles fornecem no e-mail para corrigi-lo está quebrado.
gwalshington

Respostas:

45

Se você estiver usando o Expo, poderá adicionar a solução resolvida adicionando infoPlist a app.json da seguinte forma:

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

Expo Docs

Gwalshington
fonte
25
Na verdade, NÃO é "alguma mensagem para apaziguar a Apple", mas para informar ao usuário o que você está fazendo com os dados gerados pelo usuário (local) nesse caso. É uma questão de privacidade e acho que é bom ser justo com os usuários de seus aplicativos.
Lookaji
4
Peguei vocês! Eu estava pensando em iniciantes que podem ficar tentados a deixar isso assim! Eu não queria parecer rabugento :) felicidades!
Lookaji 18/09/18
@gwalshington Eu não tenho qualquer objeto expo em app.json
Heemanshu Bhalla
@HeemanshuBhalla hmm, não sei porquê. No meu app.json, está no topo e o primeiro objeto é declarado. É onde você declara o número da versão, o identificador do pacote etc. Se você ejetar o aplicativo, talvez ele pareça um pouco diferente?
gwalshington
2
Que texto digitar se não coletarmos e dados de localização? Precisamos inventar uma mentira: S
Primož Kralj
62

EDITAR abril de 2019 : Agora você precisa adicionar essas duas chaves, já que a primavera de 2019 já começou. Observe que NSLocationAlwaysUsageDescriptionagora está obsoleto (desde o iOS 11) e foi substituído por NSLocationAlwaysAndWhenInUseUsageDescriptione NSLocationWhenInUseUsageDescription. Se você deseja oferecer suporte abaixo do iOS 11, precisará usar os três valores.

Para resumir, você deve:

  • Adicione NSLocationAlwaysAndWhenInUseUsageDescriptionAND NSLocationWhenInUseUsageDescriptionpara iOS 11 e mais
  • E adicione NSLocationAlwaysUsageDescriptionse você deseja oferecer suporte ao iOS 10 e menos
  • E, finalmente, você pode adicionar NSLocationUsageDescriptionse quiser oferecer suporte ao iOS 8 e menos.


Você pode enviar seu aplicativo mesmo que tenha recebido esta mensagem!

Acabei de enfrentar o mesmo problema ontem, mesmo que o aplicativo não esteja usando a funcionalidade de localização. Pode estar relacionado a alguma estrutura incluída no projeto que possui esse recurso opcional.

Posso confirmar que meu aplicativo foi aprovado mesmo sem as teclas NSLocationAlwaysUsageDescriptioneNSLocationWhenInUseUsageDescriptioninfo.plist

De fato, como a Apple afirmou no correio:

A partir da primavera de 2019, todos os aplicativos enviados à App Store que acessam dados do usuário deverão incluir uma sequência de objetivos.

Portanto, a única coisa a fazer é adicionar essa chave (agora é melhor, para que você não esqueça) em seu projeto, para que ela seja incluída em sua próxima atualização .

Basta adicionar duas novas entradas nas chaves info.plist, com NSLocationAlwaysUsageDescriptione NSLocationWhenInUseUsageDescriptioncomo, e uma breve descrição do motivo pelo qual você as usa como valor (mesmo se você realmente não as usa ...).

AnthoPak
fonte
2
Em sua edição de abril de 2019, você tem certeza de que a depreciação não foi revertida? Pelo que vejo, NSLocationUsageDescription é o que está obsoleto. Olhando aqui: developer.apple.com/library/archive/documentation/General/…
apricity
O email que recebi da apple menciona NSLocationAlwaysUsageDescription, então acho que ele foi revertido.
Dror Bar
@apricity @DrorBar Desculpe pessoal, na verdade eu cometi um erro. Não foi revertido, mas ainda havia um erro, NSLocationAlwaysUsageDescriptiondeveria ser substituído por NSLocationAlwaysAndWhenInUseUsageDescriptione NSLocationWhenInUseUsageDescription , e não por NSLocationUsageDescription(como escrevi anteriormente, desculpe ...). Atualizei minha resposta para adicionar uma soma do processo.
AnthoPak 16/07/19
48

Tenho alguns aplicativos na loja e tentei distribuir uma versão para o controle de qualidade, e o mesmo aconteceu em dois aplicativos diferentes. Acho que esse é um novo critério para aceitar os uploads de compilações na Appstore connect.

A solução é simples, adicione as seguintes linhas no arquivo .plist.

<key>NSLocationAlwaysUsageDescription</key>

<string>custom message</string>

<key>NSLocationWhenInUseUsageDescription</key>

<string>custom message</string>

PS: No meu caso, não usei nenhum recurso de localização, mas adicionei essas linhas para cumprir as diretrizes de conexão da Appstore. Btw depois de receber esse email, eu pude testar o aplicativo mesmo quando eles disseram que a compilação tinha alguns problemas.

Espero que este trabalho para vocês.

vroldan
fonte
5
Uau, acabei de perceber isso, percebi que todo mundo também está entendendo!
Cameron A. Ellis
primeira chave mudou a partir de agora para<key>NSLocationUsageDescription</key>
Hudi Ilfeld
1
Temos que arquivar novamente após atualizar o info.plist?
Bishoy Hanna
Preciso aumentar a versão do pacote ou o número da versão para fazer upload de um novo binário?
Dror Bar
20

É um novo requisito da apple, mesmo que você não use o local. Se você deseja adicionar as permissões no Xcode, procure "Privacidade - Descrição do Uso do Local" e "Privacidade - Local quando estiver em Uso da Descrição do Uso" e digite uma string personalizada para cada um deles.

insira a descrição da imagem aqui

Juan José Ramírez
fonte
1
Em outras atualizações de aplicativos, a Apple também solicitou esta permissão: "Privacidade - Descrição do uso sempre do local"
Juan José Ramírez
2
Então, se eu não usar esses recursos, o que tenho que escrever lá, uma mentira, algo como "local de coleta para uso futuro, talvez"?
Ruslan Shashkov
Sim, a Apple vai chegar a você se eles têm perguntas
Juan José Ramírez
Eu não sou capaz de encontrar informações Lista de propriedades na minha Xcode 10.1, você deveria ter mencionado onde encontrá-lo, eu olhei para configurações de compilação tanto para Metas e Projetos
Awais Nasir
1
Ok Então Targets-> Info-> Propriedades Alvo personalizado ios era a localização exata
Awais Nasir
15

Para simplificar, você pode adicionar essas linhas no seu info.plist. Esses erros estão ocorrendo porque a partir da primavera de 2019, todos os aplicativos enviados à App Store que acessam dados do usuário deverão incluir uma sequência de objetivos.

  1. Abra info.plist como código fonte.
  2. Adicione estas linhas a seguir no seu plist

    <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>
Sachin Nautiyal
fonte
2
Eu tive que remover espaços extras nas tags <key> e funcionou.
innich 28/03/19
@innich obrigado por apontar, eu mudei minha resposta.
Sachin Nautiyal
8
## Use esta chave no arquivo info.plist

NSLocationAlwaysUsageDescription Sua localização é necessária para obter benefícios xyz para você NSLocationWhenInUseUsageDescription Sua localização é necessária para obter benefícios xyz para você

Sumit Sharma
fonte
8

Recebemos o mesmo email e não estamos usando o CoreLocation. Após uma pesquisa rápida, descobrimos que o Parse SDK poderia usar o CoreLocation. No email da Apple, eles dizem claramente:

Se você estiver usando bibliotecas externas ou SDKs, eles podem fazer referência a APIs que exigem uma sequência de objetivos.

Isso significa que o minuto em que seu código ou qualquer outra biblioteca ou SDK pode usar o CoreLocation, mesmo que você não o use, é necessário fornecer uma descrição de privacidade para "Quando estiver em uso" e "Sempre usar".

Também é algo novo da Apple e, por enquanto, é apenas um aviso, mas será necessário a partir da primavera de 2019 para novos envios.

sebleclerc
fonte
É simplesmente estúpido .... Se eu não estiver usando, pode fazer com que as pessoas não baixem meu aplicativo apenas por causa disso. -_-
Mayoul
3
Na verdade não. O alerta solicitando que você use sua localização não será exibido, a menos que CLLocationManager.requestWhenInUseAuthorization()seja chamado algum lugar no código . A Apple analisou cada código de aplicativo para ver se essa função poderia ser chamada. Se nunca for chamado, o alerta não será exibido.
sebleclerc
6

Este problema está ocorrendo porque você não incluiu

 <NSLocationAlwaysUsageDescription>

para o seu aplicativo. Eu enfrentei o mesmo problema ao tentar enviar meu aplicativo na AppStore. Depois que o aplicativo foi processado, recebi o mesmo email. Acabei de adicionar a descrição e agora está resolvida.

Espero que isto ajude.

Sachin Nautiyal
fonte
Isso me ajudou. Se você estiver usando o Location no seu aplicativo (ou talvez apenas sempre), precisará adicionar esta linha e uma string abaixo dela. <key>NSLocationAlwaysUsageDescription</key> <string>Always And In Use Permission</string>
MaylorTaylor
6

Existem os seguintes casos:

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

A Apple declara em:

Adicione a NSLocationWhenInUseUsageDescriptionchave e a NSLocationAlwaysAndWhenInUseUsageDescriptionchave ao seu arquivo Info.plist .

e:

Se seu aplicativo suportar iOS 10 e versões anteriores, adicione o NSLocationAlwaysUsage

NSLocationUsageDescriptionparece morto, a única ref no site ADC é: https://developer.apple.com/ibeacon/Getting-Started-with-iBeacon.pdf

Portanto, para ter certeza, use os 3 primeiros.

ingconti
fonte
3

Todas essas respostas mostram como cumprir as regras da App Store para evitar o aviso, mas a verdadeira correção seria a Expo permitir que você desabilitasse os requisitos de SDKs para os Serviços de Localização, a menos que você realmente os use - não tenho certeza se isso é verdade. possível.

Calvin
fonte
3

mesmo problema em 19 de fevereiro, recebi um email com várias permissões que não estou usando, presumo que sejam de plugins. A Apple diz que em 19 de março é um requisito, por isso estou adicionando-os no info.plst e enviando novamente.

É muito bobo mesmo.

Panda Power
fonte
2
Mais um comentário realmente ...?
11119 Steve Steve
3

Também enfrento o mesmo problema, mas após 27 horas, recebi o email sobre aprovado, mesmo que não fiz nada. Portanto, aguarde aproximadamente 24 horas em vez de fazer todo esse processo novamente.

Abdul Qayum
fonte
1
Sim, é um bug!
Danh Huynh
2

Eu tinha em <key>NSLocationWhenInUseUsageDescription </key> vez de <key>NSLocationWhenInUseUsageDescription</key>

certifique-se de remover o espaço em branco à direita

Michael van de Waeter
fonte
2

Revise o e-mail que você recebeu da ** App Store Connect **

Identifique a chave ausente insira a descrição da imagem aqui

Instruções

  1. Abra o arquivo info.plist.

  2. Adicione e pesquise a chave ausente nas opções fornecidas (por exemplo, Contatos = Privacidade - Descrição de uso dos contatos)

  3. Adicionar descrição de uso:

$ (PRODUCT_NAME) precisa do acesso dos contatos a "Forneça a razão aqui".

Exemplo:

Zeus
fonte
1
senhor, eu tenho o mesmo erro, mas por que adicionar ao info.plist na verdade não sou usado no recurso de contato do meu aplicativo, por que precisamos adicioná-lo?
Kapil soni
@ Kapilsoni Verifique se você não está acessando uma ou mais APIs que têm acesso a dados confidenciais do usuário
Zeus
1
: senhor, usei apenas câmera e localização no meu aplicativo?
Kapil soni
2

Com o Xcode 11, copie a chave NSLocationAlwaysUsageDescriptione adicione-a em Info-> Custom iOS Target Properties-> Clique +no canto inferior esquerdo desta guia e, como valor, insira algum tipo de descrição como This app requires location access to function properly..

Daniel Danielecki
fonte
2

"String de finalidade ausente no arquivo Info.plist. O código do aplicativo faz referência a uma ou mais APIs que acessam dados confidenciais do usuário. O arquivo Info.plist do aplicativo deve conter uma chave NSLocationAlwaysUsageDescription com uma string de finalidade voltada para o usuário, explicando clara e completamente por que o aplicativo precisa A partir da primavera de 2019, todos os aplicativos enviados à App Store que acessam dados do usuário deverão incluir uma sequência de propósitos.Se você estiver usando bibliotecas externas ou SDKs, eles poderão fazer referência a APIs que exigem uma sequência de propósitos. pode não usar essas APIs, ainda é necessária uma sequência de objetivos.Você pode entrar em contato com o desenvolvedor da biblioteca ou do SDK e solicitar que eles liberem uma versão do código que não contenha as APIs.

Abra info.plist como código fonte.
Adicione estas linhas a seguir no seu plist

<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>
Supriya
fonte
1

Meu aplicativo também entendeu isso, e eu não faço nada a respeito, mas pode funcionar bem, da próxima vez que acho que devo adicionar essa chave, basta fazer uma descrição

liunianhuaguoyanxi
fonte
1

Uma resposta curta para o problema acima -

NSLocationAlwaysUsageDescription deve ser atualizado com a seguinte descrição no arquivo Info.plist

{Your App Name} requer acesso ao local para sugerir zonas de surto de dengue.

Soman Dubey
fonte
0

No nosso caso, estávamos usando NSLocationWhenInUseUsageDescriptionnosso aplicativo, mas não NSLocationAlwaysUsageDescription.

Lendo os comentários aqui (obrigado matt-oakes), parece que NSLocationAlwaysUsageDescriptionestá sendo usado por uma das estruturas de dependência que usamos.

Ao executar nosso aplicativo, ele não mostra o modal de permissão NSLocationAlwaysUsageDescription real, portanto, parece apenas lidar com isso em segundo plano.

Então, em resumo, adicionar NSLocationAlwaysUsageDescriptionao Info.plist corrigiu o email de aviso e não alterou nenhum comportamento no aplicativo 👍🏻

Harry Bloom
fonte