Estoy usando el código scifihifi-iphone de idandersen para llavero y guardo la contraseña usando
[SFHFKeychainUtils storeUsername:@"User" andPassword:@"123"
forServiceName:@"TestService" updateExisting:YES error:&error];
Cuando elimino la aplicación del dispositivo, la contraseña permanece en el llavero.
Quiero eliminar la contraseña del llavero cuando el usuario elimina la aplicación del dispositivo. ¿Cómo puedo hacer esto?
ios
objective-c
keychain
enc
fuente
fuente
Respuestas:
Puede aprovechar el hecho de que
NSUserDefaults
se eliminan mediante la desinstalación de una aplicación. Por ejemplo:Esto comprueba y establece una clave / valor "FirstRun"
NSUserDefaults
en la primera ejecución de su aplicación si aún no está configurada. Hay un comentario en el que debe poner código para eliminar valores del llavero. Se puede llamar a Sincronizar para asegurarse de que la clave / valor "FirstRun" persista inmediatamente en caso de que el usuario mate la aplicación manualmente antes de que el sistema la persista.fuente
synchronize
En ese caso, solo se pierden los valores que ha establecido, pero el sistema (periódicamente) o aún no se ha sincronizado con el disco (llamando ). Es una buena idea llamar a sincronizar después de configurar la primera tecla de ejecución. Y sí, NSUserDefaults se borran cuando un dispositivo se reinicia (y no se restaura desde la copia de seguridad), y eso está bien en este caso.Para los usuarios que buscan una versión Swift 3.0 de la respuesta de @ amro:
* tenga en cuenta que la función sincronizar () está en desuso
fuente
if !userDefaults.bool(forKey: "hasRunBefore") {
Es solo más limpio.No hay desencadenante para realizar código cuando la aplicación se elimina del dispositivo. El acceso al llavero depende del perfil de aprovisionamiento que se utiliza para firmar la aplicación. Por lo tanto, ninguna otra aplicación podría acceder a esta información en el llavero.
No ayuda con su objetivo eliminar la contraseña en el llavero cuando el usuario elimina la aplicación del dispositivo, pero debería brindarle cierta tranquilidad de que la contraseña no es accesible (solo desde una reinstalación de la aplicación original).
fuente
Para aquellos que buscan una versión Swift de la respuesta de @ amro:
fuente
Versión C # Xamarin
... y para borrar registros del llavero (TODO comentario arriba)
fuente
if (VersionTracking.IsFirstLaunchEver) {// remove keychain items}
desde Xamarin.Essentials no necesita el código parauserDefaults
. Xamarin.Essentials lo envuelve para ti .Los archivos se eliminarán del directorio de documentos de la aplicación cuando el usuario la desinstale. Sabiendo esto, todo lo que tiene que hacer es verificar si existe un archivo como lo primero que sucede
application:didFinishLaunchingWithOptions:
. Luego, crea incondicionalmente el archivo (incluso si es solo un archivo ficticio).Si el archivo no existía al momento de la verificación, sabe que esta es la primera ejecución desde la última instalación. Si necesita saber más adelante en la aplicación, guarde el resultado booleano en el miembro delegado de su aplicación.
fuente
La respuesta de @amro traducida a Swift 4.0:
fuente
if !UserDefaults.standard.bool(forKey: "FirstInstall")
qué valor predeterminado es falso si la clave no existe. Y .synchronize () no es necesario.Este parece ser el comportamiento predeterminado en iOS 10.3 basado en el comportamiento que las personas han presenciado en la versión beta # 2. Todavía no he encontrado ninguna documentación oficial sobre esto, así que comente si la tiene.
fuente