Recursos de segurança e privacidade do iOS

Este artigo aborda o trabalho com segurança e privacidade no iOS e como elas afetam um aplicativo Xamarin.iOS.

A Apple fez várias melhorias na segurança e privacidade no iOS 10 (e superior) que ajudarão o desenvolvedor a melhorar a segurança de seus aplicativos e garantir a privacidade do usuário final. Este artigo abordará a implementação desses recursos em um aplicativo Xamarin.iOS.

Aprimoramentos gerais

As seguintes alterações gerais foram feitas na Segurança e Privacidade no iOS 10:

  • A API CDSA (Common Data Security Architecture) foi preterida e deve ser substituída pela API SecKey para gerar chaves assimétricas.
  • A nova NSAllowsArbitraryLoadsInWebContent chave pode ser adicionada ao arquivo Info.plist de um aplicativo e permitirá que as páginas da Web sejam carregadas corretamente enquanto a proteção do Apple Transport Security (ATS) ainda está ativada para o resto do aplicativo. Para obter mais informações, consulte nossa documentação de Segurança de Transporte de Aplicativos.
  • Como a nova Área de Transferência no iOS 10 e no macOS Sierra permite que o usuário copie e cole entre dispositivos, a API foi expandida para permitir que uma área de transferência seja limitada a um dispositivo específico e tenha carimbo de data/hora para ser limpa automaticamente em um determinado ponto. Além disso, as pasteboards nomeadas não são mais persistentes e devem ser substituídas pelos contêineres de pasteboard compartilhados.
  • Para todas as conexões SSL/TLS, a cifra simétrica RC4 agora está desabilitada por padrão. Além disso, a API de Transporte Seguro não oferece mais suporte a SSLv3 e é recomendável que o desenvolvedor pare de usar criptografia SHA-1 e 3DES o mais rápido possível.

Acessando dados privados do usuário

Os aplicativos executados no iOS 10 (ou posterior) devem declarar estaticamente sua intenção de acessar recursos específicos ou informações do usuário inserindo uma ou mais Chaves de Privacidade em seus arquivos Info.plist que explicam ao usuário por que o aplicativo deseja obter acesso.

Importante

Os aplicativos que não fornecerem as chaves necessárias serão encerrados silenciosamente pelo sistema quando tentarem acessar um dos recursos restritos ou informações do usuário, sem erro! Se um aplicativo iniciar com falha inesperada no iOS 10, verifique se todas as informações.plist necessárias foram especificadas.

As seguintes chaves relacionadas à privacidade estão disponíveis:

  • Privacidade - Descrição de uso do Apple Music (NSAppleMusicUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja acessar a biblioteca de mídia do usuário.
  • Privacidade - Descrição de uso do periférico Bluetooth (NSBluetoothPeripheralUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja acessar o Bluetooth no dispositivo do usuário.
  • Privacidade - Descrição de uso de calendários (NSCalendarsUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja acessar o calendário do usuário.
  • Privacidade - Descrição de uso da câmera (NSCameraUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja acessar a câmera do dispositivo.
  • Privacidade - Descrição de uso de contatos (NSContactsUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja acessar os contatos do usuário.
  • Privacidade - Descrição de uso do compartilhamento de integridade (NSHealthShareUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja acessar os dados de saúde do usuário. Para obter mais informações, consulte a Referência de classe HKHealthStore da Apple.
  • Privacidade - Descrição de uso da atualização de integridade (NSHealthUpdateUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja editar os dados de integridade do usuário. Para obter mais informações, consulte a Referência de classe HKHealthStore da Apple.
  • Privacidade - Descrição de uso do HomeKit (NSHomeKitUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja acessar os Dados de Configuração do HomeKit do usuário.
  • Privacidade - Localização Sempre Uso Descrição (NSLocationAlwaysUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja sempre ter acesso à localização do usuário.
  • [Preterido] Privacidade - Descrição de uso do local (NSLocationUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja acessar a localização do usuário. NOTA: Esta chave foi preterida no iOS 8 (e superior). Em vez disso, use NSLocationAlwaysUsageDescription ou NSLocationWhenInUseUsageDescription.
  • Privacidade - Localização quando em uso Descrição (NSLocationWhenInUseUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja acessar a localização do usuário enquanto ele está em execução.
  • [Preterido] Privacidade - Descrição de uso da biblioteca de mídia - Permite que o desenvolvedor descreva por que o aplicativo deseja acessar a biblioteca de mídia do usuário. NOTA: Esta chave foi preterida no iOS 8 (e superior). Use NSAppleMusicUsageDescription em vez disso.
  • Privacidade - Descrição de uso do microfone (NSMicrophoneUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja acessar o microfone do dispositivo.
  • Privacidade - Descrição de uso de movimento (NSMotionUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja acessar o acelerômetro do dispositivo.
  • Privacidade - Descrição de uso da biblioteca de fotos (NSPhotoLibraryUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja acessar a biblioteca de fotos do usuário.
  • Privacidade - Descrição de uso de lembretes (NSRemindersUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja acessar os lembretes do usuário.
  • Privacidade - Descrição de uso da Siri (NSSiriUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja enviar dados do usuário para a Siri.
  • Privacidade - Descrição de uso do reconhecimento de fala (NSSpeechRecognitionUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja enviar dados do usuário para os servidores de reconhecimento de fala da Apple.
  • Privacidade - Descrição de uso do provedor de TV (NSVideoSubscriberAccountUsageDescription) - Permite que o desenvolvedor descreva por que o aplicativo deseja acessar a conta do provedor de TV do usuário.

Para obter mais informações sobre como trabalhar com chaves Info.plist, consulte Information Property List Key Reference da Apple.

Definindo chaves de privacidade

Veja o exemplo a seguir de acesso ao HomeKit no iOS 10 (e superior), o desenvolvedor precisará adicionar a NSHomeKitUsageDescription chave ao arquivo Info.plist do aplicativo e fornecer uma cadeia de caracteres declarando por que o aplicativo deseja acessar o banco de dados HomeKit do usuário. Essa cadeia de caracteres será apresentada ao usuário na primeira vez que ele executar o aplicativo:

Um exemplo de alerta NSHomeKitUsageDescription

No momento, o Xamarin.iOS para Visual Studio não oferece suporte à edição das chaves de privacidade Info.plist de dentro do editor de manifesto padrão do iOS. Em vez disso, você precisará usar o editor PList genérico, então faça o seguinte:

  1. Clique com o botão direito do mouse no arquivo Info.plist no Gerenciador de Soluções e selecione Abrir com....

  2. Selecione o Generic PList Editor na lista de programas para abrir o arquivo e clique em OK.

    Selecione o Editor PList Genérico

  3. + Clique no botão na última linha do editor para adicionar uma nova entrada à lista. Isso será chamado de "Propriedade Personalizada", com o Tipo definido como String e um valor vazio.

  4. Clique no nome da propriedade e uma lista suspensa será exibida.

  5. Na lista suspensa, selecione uma chave de Privacidade (como Privacidade - Descrição de uso do HomeKit):

    Selecione uma chave de privacidade

  6. Insira uma descrição na coluna Valor para saber por que o aplicativo deseja acessar o recurso ou as informações do usuário fornecidos:

    Insira uma descrição

  7. Salve as alterações no arquivo.

Importante

No exemplo dado acima, a falha ao definir a NSHomeKitUsageDescriptionchave no arquivo Info.plist resultaria na falha silenciosa do aplicativo (sendo fechado pelo sistema em tempo de execução) sem erro quando executado no iOS 10 (ou superior).

Resumo

Este artigo abordou as alterações de segurança e privacidade que a Apple fez no iOS 10 e como elas afetam um aplicativo Xamarin.iOS.