Estou usando o código scifihifi-iphone da idandersen para chaveiro e salvar a senha usando
[SFHFKeychainUtils storeUsername:@"User" andPassword:@"123"
forServiceName:@"TestService" updateExisting:YES error:&error];
Quando eu excluo o aplicativo do dispositivo, a senha permanece no chaveiro.
Desejo remover a senha das chaves quando o usuário excluir o aplicativo do dispositivo. Como posso fazer isso?
ios
objective-c
keychain
enc
fonte
fonte
Respostas:
Você pode tirar proveito do fato que
NSUserDefaults
é limpo pela desinstalação de um aplicativo. Por exemplo:Isso verifica e define uma chave / valor "FirstRun"
NSUserDefaults
na primeira execução do seu aplicativo, se ainda não estiver definido. Há um comentário em que você deve colocar o código para excluir valores do chaveiro. A sincronização pode ser chamada para garantir que a chave / valor "FirstRun" seja imediatamente persistida caso o usuário mate o aplicativo manualmente antes que o sistema o persista.fonte
synchronize
) são perdidos nesse caso. É uma boa idéia chamar a sincronização depois de definir a primeira chave de execução. E sim, os NSUserDefaults são limpos quando um dispositivo é redefinido (e não restaurado do backup), e isso é bom nesse caso.Para usuários que procuram uma versão Swift 3.0 da resposta do @ amro:
* observe que a função synchronize () está obsoleta
fonte
if !userDefaults.bool(forKey: "hasRunBefore") {
É apenas mais limpo.Não há acionador para executar o código quando o aplicativo é excluído do dispositivo. O acesso ao chaveiro depende do perfil de provisionamento usado para assinar o aplicativo. Portanto, nenhum outro aplicativo seria capaz de acessar essas informações no chaveiro.
Isso não ajuda você a remover a senha no chaveiro quando o usuário exclui o aplicativo do dispositivo, mas deve dar a você um certo conforto de que a senha não está acessível (apenas a partir de uma reinstalação do aplicativo original).
fonte
Para quem procura uma versão Swift da resposta do @ amro:
fonte
Versão C # Xamarin
... e para limpar registros do chaveiro (comentário do TODO acima)
fonte
if (VersionTracking.IsFirstLaunchEver) {// remove keychain items}
Xamarin.Essentials, você não precisa do código para ouserDefaults
. O Xamarin.Essentials envolve isso para você .Os arquivos serão excluídos do diretório de documentos do seu aplicativo quando o usuário desinstalar o aplicativo. Sabendo disso, tudo o que você precisa fazer é verificar se existe um arquivo como a primeira coisa que acontece
application:didFinishLaunchingWithOptions:
. Depois, crie incondicionalmente o arquivo (mesmo que seja apenas um arquivo fictício).Se o arquivo não existia no momento da verificação, você sabe que esta é a primeira execução desde a última instalação. Se precisar saber mais tarde no aplicativo, salve o resultado booleano no membro delegado do aplicativo.
fonte
A resposta de @ amro traduzida para o Swift 4.0:
fonte
if !UserDefaults.standard.bool(forKey: "FirstInstall")
qual padrão é false se a chave não existir. E .synchronize () não é necessário.Esse parece ser o comportamento padrão no iOS 10.3, com base no comportamento que as pessoas estão testemunhando na versão beta 2. Ainda não encontrou nenhuma documentação oficial sobre isso, então, por favor, comente se tiver.
fonte