1. Por que a privacidade é importante em aplicativos de memorandos

Ideias de trabalho, rascunhos pessoais, registros diários. O aplicativo de memorando coleta informações antes de mostrá-las às pessoas. Tão importante quanto ser capaz de escrever rapidamente, é importante entender onde é armazenado e para onde é enviado.

Este artigo explica a criptografia, o cache de comunicação, a exibição da tela, o registro de diagnóstico e a análise de uso no terminal separadamente. Uma proteção não garante a proteção de outras rotas.

6 de setembro de 2026 atualização:A fonte da mesma versão (5.8.17) que a versão pública foi correspondida, e a explicação da proteção de tela, registro e análise de uso foi corrigida. Anote o que você pode fazer e o que você limita.

2 A função de ocultar notas automaticamente no switcher de aplicativos não está ativada

iOS usa a tela como um instantâneo depois que o aplicativo se move para o fundo. O Apple orienta você a remover informações confidenciais na tela ao passar para o fundo.

Na fonte de 5.8.17 confirmado, sceneWillResignActive e sceneDidEnterBackground salvam o rascunho e não chamam o processo de exibição de sobreposição de privacidade. A função de exibição anterior permanece, mas não é um caminho que funcione como uma proteção válida.

As notas exibidas podem permanecer na imagem do switcher de aplicativos. Criptografar Outbox não oculta a imagem da tela. Corrija a explicação de "sempre oculte o conteúdo do memorando" na versão antiga deste artigo.

3. URLFêmera Sessão: Reduza o armazenamento em disco em caches de comunicação

O padrão URLSession armazena cache, cookies e informações de autenticação no disco. Este é um recurso útil para aplicativos gerais, mas é desnecessário para aplicativos de memorando e pode ser um risco.

O fato de o cache de comunicação permanecer no terminal significa que há vestígios no disco do qual URL foi acessado e quando. Se um cookie for salvo, isso significa que as informações da sessão permanecerão no terminal.

Este aplicativo usa URLSessionConfiguration.ephemeral.

private let session: URLSession = {
    let config = URLSessionConfiguration.ephemeral
    config.httpCookieAcceptPolicy = .never
    config.httpShouldSetCookies = false
    config.urlCache = nil
    return URLSession(configuration: config)
}()
  • Sem cache de disco:Não salve o cache desta sessão de URL no disco
  • Desative o uso de cookies:Esta sessão de URL não aceita cookies e não define a solicitação
  • Cache URL desativado:Defina o próprio armazenamento de cache para nil
  • Configuração que não usa armazenamento persistente:Não salva as informações da sessão da URLSession no disco

Esta é uma proteção relacionada ao cache URLSession, etc., e não é uma função que elimina eventos de uso que o aplicativo armazena e transmite separadamente ou registros de transmissão do lado do servidor. A associação pelo identificador da análise de uso também é realizada separadamente dessa configuração.

4. Faixa de saída do registro de medição de desempenho

PerformanceLogger é cercada por #if DEBUG. Em compilações onde o DEBUG não está definido, o processamento de saída de log deste registrador não está incluído.

O logError deste registrador registra o tipo, não a instrução detalhada do erro. Por exemplo, use o tipo URLError e não libere o localizedDescription como está, que pode conter caminhos de arquivo e entrada do usuário.

Por outro lado, não é um mecanismo que automaticamente torna inofensivos todos os nomes de eventos e strings adicionais passadas para logEvent. É necessário não passar o endereço de e-mail, o corpo do memorando ou as informações de autenticação para o chamador.

Esta explicação não deve ser ampliada para uma garantia de ausência de logs em todo o aplicativo, nos SDKs externos ou no sistema operacional. O envio de eventos de uso próprio e AppsFlyer estão ativos como mecanismos separados. O escopo da coleta é explicado nas perguntas frequentes sobre análise de uso deste artigo e na política de privacidade.

5 AES-GCM Criptografia Outbox Faixa de Proteção

Memorandos aguardando para serem enviados são gerenciados na fila chamada Outbox no terminal. Ao salvar, use o CryptoKit do Apple para criptografar com o AES-GCM. A nova chave de criptografia é gerada com bits 256.

Mantenha a chave no Chaveiro e use kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly. Com essa configuração, você pode acessar desde o primeiro desbloqueio após a reinicialização até a próxima reinicialização, e a chave não será transferida ao restaurar o backup para outro terminal. O aplicativo lê a chave para criptografia e descriptografia.

Esta é a proteção dos dados armazenados, para não ocultar a tela exibida ou garantir a segurança de todas as violações do terminal. Antes de alterar o modelo, certifique-se de que as notas necessárias chegaram ao endereço de armazenamento.

Ao usar o envio de e-mail, o texto é processado pelo nosso Relay API e pela plataforma de entrega, e permanece como um e-mail na caixa de entrada. Criptografia no terminal não significa criptografia de ponta a ponta (E2EE) para entrega de correio. Os detalhes são explicados em Política de Privacidade e Caminho de Dados.

Para filas de espera, consulte Explanação da arquitetura Outbox.

6. Proteção do corpo do memorando e do papel do SDK externo

iOS No aplicativo, use CryptoKit para criptografar o corpo do memorando, Chaveiro para armazenamento de chaves e URLSession para enviar o texto. Network.framework monitora o status da conexão, e o BackgroundTasks é responsável por agendar a transmissão em segundo plano.

Por outro lado, o aplicativo também usa um SDK externo. O GoogleSignIn e o Firebase Authentication são usados para inserir automaticamente e-mails arbitrários com a conta Google, e o Firebase App Check é inicializado na inicialização para proteger o back-end API. O AppsFlyer é usado para análise de aquisição e uso, e define um identificador de instalação que é comum à sua própria análise.

Mesmo que o design não inclua o corpo do memorando no item do evento, a associação de identificadores e registros de transmissão permanece. O escopo da análise de uso, incluindo o SDK, precisa ser confirmado separadamente da criptografia do texto. Itens e usos são descritos em Política de Privacidade.

7. Especifique o escopo da proteção

Criptografia no terminal, manuseio do cache de comunicação e análise de utilização têm funções diferentes. Mesmo com criptografia Outbox e URLSession efêmera, a coleção de eventos de uso não desaparece.

Valorize tanto ser capaz de deixar notas rapidamente quanto ser capaz de entender as informações adquiridas. Explique o destino, o identificador e o escopo da associação da análise de uso e revise-o de acordo com as alterações no aplicativo.

Perguntas frequentes

P. O conteúdo do memorando será salvo no servidor?
Ao enviar um e-mail, o texto passa pelo nosso Relay API e pela plataforma de entrega. Nosso Relay API não preserva permanentemente o texto, a menos que haja uma necessidade legítima de conformidade legal ou resposta de falha. É diferente de salvar na caixa de correio do destino de entrega. A descrição de cada destino de armazenamento éDesign de privacidade.
P. O aplicativo criptografa a comunicação?
Sim. HTTPS é usado para comunicação API. Sessão de URL efêmera é uma configuração que não armazena permanentemente o cache, o cookie e as informações de autenticação da sessão no disco. Não elimina a análise de uso e os registros do lado do servidor que são realizados separadamente.
P. Se eu perder meu terminal, o memorando está seguro?
Outbox é criptografado e salvo com AES-GCM, e a nova chave é gerada em bits 256. A chave usa a classe de proteção do Keychain que não migra para outro terminal. No entanto, não é um mecanismo que protege a tela e o e-mail para o endereço de entrega. A criptografia no terminal sozinha não garante a segurança de todas as informações em caso de perda.
P. Há alguma análise ou rastreamento?
Sim. Usamos nossa própria análise de uso e AppsFlyer SDK. Identificadores de instalação aleatória, identificadores de sessão, tipo e hora do evento, versão do aplicativo, resultados de transmissão, etc. serão enviados para nossa própria análise. O AppsFlyer envia eventos como transmissão inicial de memorando bem-sucedida, autenticação bem-sucedida, exibição da tela de cobrança, seleção do plano e sucesso da compra, e o valor, moeda, período, etc. podem ser adicionados no momento da compra. O mesmo identificador de instalação também é definido para o ID de Usuário do Cliente do AppsFlyer, para que as informações de aquisição e os eventos de uso possam ser associados. Os itens do evento definidos a partir do aplicativo não incluem diretamente um endereço de e-mail, corpo do memorando ou código de autenticação, mas o ID de envio da análise interna está vinculado ao hash do endereço de e-mail de destino, portanto, não é uma informação completamente anônima. Para detalhesMedidas técnicas para a política de privacidade.
P. Como você usa a estrutura genuína Apple e o SDK externo separadamente?
Use CryptoKit e Keychain para criptografar e armazenar o texto da nota no aplicativo iOS e enviar o texto usando URLSession. Por outro lado, o SDK externo é usado para login Google, proteção de back-end pelo Firebase e análise de aquisição e uso pelo AppsFlyer. A proteção do texto e a análise de uso com identificadores são explicadas separadamente.