J'utilise scifihifi-iphone de idandersen code pour porte - clés et enregistrer le mot de passe à l' aide
[SFHFKeychainUtils storeUsername:@"User" andPassword:@"123"
forServiceName:@"TestService" updateExisting:YES error:&error];
Lorsque je supprime l'application de l'appareil, le mot de passe reste dans le trousseau.
Je souhaite supprimer le mot de passe du trousseau lorsque l'utilisateur supprime l'application de l'appareil. Comment puis-je faire ceci?
Réponses:
Vous pouvez profiter du fait qu'ils
NSUserDefaults
sont effacés par la désinstallation d'une application. Par exemple:Cela vérifie et définit une clé / valeur "FirstRun" lors
NSUserDefaults
de la première exécution de votre application si elle n'est pas déjà définie. Il y a un commentaire où vous devez mettre du code pour supprimer des valeurs du trousseau. Synchronize peut être appelé pour s'assurer que la clé / valeur "FirstRun" est immédiatement conservée au cas où l'utilisateur tue l'application manuellement avant que le système ne la persiste.la source
synchronize
) sont perdues dans ce cas. C'est une bonne idée d'appeler synchronize après avoir défini la première clé d'exécution. Et oui, NSUserDefaults sont effacés lorsqu'un périphérique est réinitialisé (et non restauré à partir de la sauvegarde), et c'est bien dans ce cas.Pour les utilisateurs à la recherche d'une version Swift 3.0 de la réponse de @ amro:
* notez que la fonction synchronize () est déconseillée
la source
if !userDefaults.bool(forKey: "hasRunBefore") {
C'est juste plus propre.Il n'y a pas de déclencheur pour exécuter du code lorsque l'application est supprimée de l'appareil. L'accès au trousseau dépend du profil d'approvisionnement utilisé pour signer l'application. Par conséquent, aucune autre application ne pourrait accéder à ces informations dans le trousseau.
Cela ne vous aide pas à supprimer le mot de passe dans le trousseau lorsque l'utilisateur supprime l'application de l'appareil, mais cela devrait vous rassurer que le mot de passe n'est pas accessible (uniquement à partir d'une réinstallation de l'application d'origine).
la source
Pour ceux qui recherchent une version Swift de la réponse de @ amro:
la source
Version C # Xamarin
... et pour effacer les enregistrements du trousseau (commentaire TODO ci-dessus)
la source
if (VersionTracking.IsFirstLaunchEver) {// remove keychain items}
partir de Xamarin.Essentials, vous n'avez pas besoin du code pour leuserDefaults
. Xamarin.Essentials enveloppe cela pour vous .Les fichiers seront supprimés du répertoire de documents de votre application lorsque l'utilisateur désinstallera l'application. Sachant cela, tout ce que vous avez à faire est de vérifier si un fichier existe en premier
application:didFinishLaunchingWithOptions:
. Ensuite, créez inconditionnellement le fichier (même s'il ne s'agit que d'un fichier factice).Si le fichier n'existait pas au moment de la vérification, vous savez qu'il s'agit de la première exécution depuis la dernière installation. Si vous devez le savoir ultérieurement dans l'application, enregistrez le résultat booléen dans le membre délégué de votre application.
la source
@ amro a traduit sa réponse en Swift 4.0:
la source
if !UserDefaults.standard.bool(forKey: "FirstInstall")
défaut à false si la clé n'existe pas. Et .synchronize () n'est pas nécessaire.Cela semble être le comportement par défaut sur iOS 10.3 basé sur le comportement que les gens ont observé en version bêta # 2. Je n'ai pas encore trouvé de documentation officielle à ce sujet, veuillez commenter si vous en avez.
la source