Recebi este e-mail hoje dizendo que a última compilação do meu aplicativo foi rejeitada pelo iTunes Connect devido a algumas descrições de uso ausentes. Para ser exato:
Este aplicativo tenta acessar dados confidenciais sem uma descrição de uso. O Info.plist do aplicativo deve conter uma chave NSContactsUsageDescription com um valor de string explicando ao usuário como o aplicativo usa esses dados.
Este aplicativo tenta acessar dados confidenciais sem uma descrição de uso. O Info.plist do aplicativo deve conter uma chave NSCalendarsUsageDescription com um valor de string explicando ao usuário como o aplicativo usa esses dados.
Este aplicativo tenta acessar dados confidenciais sem uma descrição de uso. O Info.plist do aplicativo deve conter uma chave NSPhotoLibraryUsageDescription com um valor de string explicando ao usuário como o aplicativo usa esses dados.
Este aplicativo tenta acessar dados confidenciais sem uma descrição de uso. O Info.plist do aplicativo deve conter uma chave NSBluetoothPeripheralUsageDescription com um valor de string explicando ao usuário como o aplicativo usa esses dados.
Este aplicativo tenta acessar dados confidenciais sem uma descrição de uso. O Info.plist do aplicativo deve conter uma chave NSMicrophoneUsageDescription com um valor de string explicando ao usuário como o aplicativo usa esses dados.
Este aplicativo tenta acessar dados confidenciais sem uma descrição de uso. O Info.plist do aplicativo deve conter uma chave NSMotionUsageDescription com um valor de string explicando ao usuário como o aplicativo usa esses dados.
Depois que esses problemas forem corrigidos, você poderá reenviar o binário corrigido.
Descobri que eles se tornaram obrigatórios com o iOS 10, mas o único problema é que meu aplicativo não está solicitando permissão para acessar nenhum deles. Achei que a descrição só era obrigatória se você realmente solicitasse uma permissão?
É porque uma das minhas dependências (Cocoapods) pode conter algum código para solicitar essas permissões? Ou essas descrições são obrigatórias, mesmo que eu nunca solicite ver a agenda, os contatos etc. dos usuários?
fonte
PodFile
e a lista das bibliotecas que você usa (se você usa alguns cocoapods externos)?Respostas:
As descrições são obrigatórias para qualquer conteúdo que você ou qualquer estrutura que você vincule para tentar acessar. Os erros são gerados em uma tentativa de acessar o conteúdo se uma descrição de uso não foi fornecida, portanto, se você estiver recebendo esses erros, seu aplicativo deve estar solicitando-os. Você deve descobrir por que seu aplicativo ou suas estruturas exigem isso e adicionar descrições de uso adequadas ao info.plist do seu aplicativo.
Ou mais idealmente, se você não precisa de acesso, veja se há uma maneira de não solicitá-lo (ou use frameworks que precisam desnecessariamente).
fonte
O iOS 10 deve adicionar permissão em info.plist, basta revisar este BLOG: - settings-in-ios-10, você já tem uma ideia.
Adicione permissão no arquivo info.plist com base em seu log de erros .
NSCameraUsageDescription
NSContactsUsageDescription
NSPhotoLibraryUsageDescription
NSBluetoothPeripheralUsageDescription
NSMicrophoneUsageDescription
NSMotionUsageDescription
NSLocationAlwaysUsageDescription
NSLocationUsageDescription
NSLocationWhenInUseUsageDescription
NSRemindersUsageDescription
NSSiriUsageDescription
NSVideoSubscriberAccountUsageDescription
NSSpeechRecognitionUsageDescription
NSCalendarsUsageDescription
fonte
$(PRODUCT_NAME)
. Você pode ver a propriedade padrão comoBundle name
no arquivo plist.Você pode adicionar em seu info.plist como:
etc.
Espero que ajude alguem ...
fonte
Eu tive o mesmo problema e parece que se qualquer estrutura que você vincular tiver código que pede essa permissão (mesmo que seu aplicativo nunca a solicite), as descrições de uso são necessárias. Mas de acordo com meu teste, se você não os solicitar, eles não aparecerão na lista de permissões do seu aplicativo.
fonte
Calendário: Chave: Privacidade - Descrição de uso de calendários
Valor: $ (PRODUCT_NAME) eventos de calendário
Lembrete: Chave: Privacidade -
Valor de Descrição de Uso de Lembretes : $ (PRODUCT_NAME) uso de lembrete
Contato : Chave: Privacidade - Descrição de uso dos contatos
Valor: $ (PRODUCT_NAME) uso do contato
Foto: Chave: Privacidade - Descrição de uso da biblioteca de fotos
Valor: $ (PRODUCT_NAME) uso de fotos
Compartilhamento de Bluetooth: Chave: Privacidade - Descrição do uso de periféricos Bluetooth
Valor: $ (PRODUCT_NAME) Uso periférico de Bluetooth
Microfone: Chave: Privacidade - Descrição do uso do microfone
Valor: $ (PRODUCT_NAME) uso do microfone
Câmera: Chave: Privacidade - Descrição de uso da câmera
Valor: $ (PRODUCT_NAME) uso da câmera
Localização: Chave: Privacidade - Localização Sempre
Valor Descrição de Uso : $ (PRODUCT_NAME) uso de localização
Chave: Privacidade - Local quando em uso
Valor da descrição de uso : $ (PRODUCT_NAME) uso do local
Heath: Chave: Privacidade -
Valor da descrição do uso de compartilhamento de saúde : $ (PRODUCT_NAME) uso de compartilhamento de saúde
Chave: Privacidade -
Valor da descrição de uso da atualização de saúde : $ (PRODUCT_NAME) uso de atualização de saúde
HomeKit: Chave: Privacidade - Descrição de uso do HomeKit
Valor: $ (PRODUCT_NAME) uso do kit doméstico
Biblioteca de mídia: Chave: Privacidade - Descrição de uso da biblioteca de mídia
Valor: $ (PRODUCT_NAME) uso da biblioteca de mídia
Movimento: Chave: Privacidade -
Valor da descrição do uso do movimento : $ (PRODUCT_NAME) uso do movimento
Reconhecimento de fala: Chave: Privacidade -
Valor da descrição do uso do reconhecimento de fala : $ (PRODUCT_NAME) uso de fala
SiriKit: Chave: Privacidade -
Valor da descrição de uso da Siri : $ (PRODUCT_NAME) siri use
Provedor de TV: Chave: Privacidade - Descrição de uso do provedor de TV
Valor: $ (PRODUCT_NAME) uso do tvProvider
fonte
Para quem está se perguntando por que, de repente, seu aplicativo agora tem todas essas configurações de permissão, em primeiro lugar, pode ser por causa do CocoaPods ou do Carthage - eles colocam ganchos para todas essas permissões. Acabei de atualizar meu aplicativo para usar cordova-plugin-firebasex, que tem uma extensa instalação de Cocoapods (e dependências). Você pode desativar essas permissões ANTES de instalar cocoapods em seu projeto, colocando um PermissionsConfiguration.xcconfig na raiz de seu projeto - você pode ler mais sobre isso aqui: https://cocoapods.org/pods/Permission#installation
Isso tudo me surpreendeu quando a nova versão do meu aplicativo foi rejeitada com 7 chaves / string de permissões ausentes no arquivo Info.plist. Então, tive que cavar em meu projeto para descobrir o que estava causando isso, já que meu aplicativo não precisa ou usa nenhuma dessas permissões (nunca precisou).
Pode existir, mas no momento não consigo encontrar uma maneira de remover as permissões após a integração dos pods ... vou ter que pesquisar sobre como fazer isso sem começar meu projeto novamente.
fonte