Precisa de proteção de dados completa enquanto o processamento de dados do núcleo está em segundo plano
-
27-09-2019 - |
Pergunta
Estou preso no meio do projeto.
Meu objetivo é proteger meus dados.
Eu passei pelo blog de Nickharris sobre (Dados principais e aplicativos do iPhone corporativo - protegendo seus dados)
Mas na conclusão, é mencionado claramente que:
Se o seu aplicativo precisar do seu Armazenamento de dados principais em qualquer processamento de fundo, então você não pode usar proteção de dados. Qualquer tentativa de acessar arquivos que são O NSFileProtectionComplete causará uma exceção.
E estou usando dados principais no processamento em segundo plano.
Por favor, ajude sobre isso. Eu quero criptografar e proteger meus dados de qualquer maneira
Obrigado, Tariq
Solução
De acordo com documentação O NSFileProtectionComplete determina que o arquivo não pode ser lido ou gravado para enquanto o aplicativo estiver em segundo plano (ou não está em execução).
Você deve ficar bem em ler / escrever a loja SQLite enquanto o aplicativo estiver em execução, mas você não terá acesso a ele enquanto estiver no "fundo".
Isso significa que as operações que aproveitam as APIs de fundo do iOS como:
- Notificações via push
- AUDIO / LOCAL
- Conclusão da tarefa (plano de fundo)
- Voz sobre IP
Não terá acesso à sua loja SQLite. Quando o aplicativo estiver em execução, no entanto, você poderá acessar o NSPERSistentStoreCoordinator como normalmente faria. Suspeito que um teste lateral do dispositivo resultaria em uma falha em criar o coordenador persistente da loja a partir de uma das APIs de segundo plano.
Outras dicas
No iOS 5, você pode usar qualquer um, mas ainda há um problema para cada um deles.
NSFileProtectionCompleteUnlessOpen - O arquivo é armazenado em um formato criptografado no disco e deve ser aberto enquanto o dispositivo é desbloqueado. Uma vez aberto, seu arquivo pode continuar a acessar o arquivo normalmente, mesmo que o usuário bloqueie o dispositivo.
NSFileProtectionCompleteUntilFirstUserauthentication - O arquivo é armazenado em um formato criptografado no disco e não pode ser acessado até que o dispositivo seja inicializado. Depois que o usuário desbloqueia o dispositivo pela primeira vez, seu aplicativo pode acessar o arquivo e continuar a acessá -lo, mesmo que o usuário bloqueie posteriormente o dispositivo.
Faça as chamadas de acesso ao arquivo no tópico principal - há um método realmente útil no NSObject que deve ajudá -lo :)
// When you need to get the data from the file do this :
NSData *data = [self performSelectorInMainThread:@selector(getFileData:) withObject:filename waitUntilDone:YES];
// And somewhere else in your class have this method
- (NSData *)getFileData:(NSString *)filename {
...
// Get data from file and return it
....
}
Espero que ajude.