Ich verwende den Scifihifi-iPhone- Code von idandersen für den Schlüsselbund und speichere das Passwort mit
[SFHFKeychainUtils storeUsername:@"User" andPassword:@"123"
forServiceName:@"TestService" updateExisting:YES error:&error];
Wenn ich die Anwendung vom Gerät lösche, bleibt das Kennwort im Schlüsselbund.
Ich möchte das Kennwort aus dem Schlüsselbund entfernen, wenn der Benutzer die Anwendung vom Gerät löscht. Wie kann ich das machen?
ios
objective-c
keychain
enc
quelle
quelle
Antworten:
Sie können die Vorteile aus der Tatsache ziehen , dass
NSUserDefaults
sich durch die Deinstallation einer App gelöscht. Beispielsweise:Dadurch wird
NSUserDefaults
beim ersten Ausführen Ihrer App nach einem "FirstRun" -Schlüssel / -Wert gesucht und dieser festgelegt, sofern dieser noch nicht festgelegt ist. Es gibt einen Kommentar, in den Sie Code einfügen sollten, um Werte aus dem Schlüsselbund zu löschen. Die Synchronisierung kann aufgerufen werden, um sicherzustellen, dass der Schlüssel / Wert "FirstRun" sofort beibehalten wird, falls der Benutzer die App manuell beendet, bevor das System sie beibehält.quelle
synchronize
In diesem Fall gehen nur Werte verloren, die Sie festgelegt haben, aber entweder das System (regelmäßig) oder die Sie noch nicht mit der Festplatte synchronisiert haben (durch Aufrufen ). Es ist eine gute Idee, synchronize aufzurufen, nachdem Sie den ersten Ausführungsschlüssel festgelegt haben. Und ja, NSUserDefaults werden gelöscht, wenn ein Gerät zurückgesetzt (und nicht aus dem Backup wiederhergestellt) wird, und das ist in diesem Fall in Ordnung.Für Benutzer, die nach einer Swift 3.0- Version der Antwort von @ amro suchen:
* Beachten Sie, dass die Funktion synchronize () veraltet ist
quelle
if !userDefaults.bool(forKey: "hasRunBefore") {
Es ist nur sauberer.Es gibt keinen Auslöser zum Ausführen von Code, wenn die App vom Gerät gelöscht wird. Der Zugriff auf den Schlüsselbund hängt vom Bereitstellungsprofil ab, mit dem die Anwendung signiert wird. Daher können keine anderen Anwendungen auf diese Informationen im Schlüsselbund zugreifen.
Es hilft Ihnen nicht, das Kennwort im Schlüsselbund zu entfernen, wenn der Benutzer die Anwendung vom Gerät löscht. Es sollte Ihnen jedoch den Komfort bieten, dass auf das Kennwort nicht zugegriffen werden kann (nur bei einer Neuinstallation der ursprünglichen Anwendung).
quelle
Für diejenigen, die nach einer Swift-Version der Antwort von @ amro suchen:
quelle
C # Xamarin-Version
... und um Datensätze aus dem Schlüsselbund zu löschen (TODO-Kommentar oben)
quelle
if (VersionTracking.IsFirstLaunchEver) {// remove keychain items}
von Xamarin.Essentials benötigen Sie den Code für das nichtuserDefaults
. Xamarin.Essentials verpackt das für Sie .Dateien werden aus dem Dokumentverzeichnis Ihrer App gelöscht, wenn der Benutzer die App deinstalliert. Wenn Sie dies wissen, müssen Sie nur prüfen, ob eine Datei als erstes vorhanden ist
application:didFinishLaunchingWithOptions:
. Erstellen Sie anschließend die Datei unbedingt (auch wenn es sich nur um eine Dummy-Datei handelt).Wenn die Datei zum Zeitpunkt der Überprüfung nicht vorhanden war, wissen Sie, dass dies der erste Lauf seit der letzten Installation ist. Wenn Sie es später in der App wissen müssen, speichern Sie das boolesche Ergebnis in Ihrem App-Delegierten-Mitglied.
quelle
@ amros Antwort übersetzt in Swift 4.0:
quelle
if !UserDefaults.standard.bool(forKey: "FirstInstall")
was standardmäßig false ist, wenn der Schlüssel nicht vorhanden ist. Und .synchronize () wird nicht benötigt.Dies scheint das Standardverhalten auf iOS 10.3 auf dem Verhalten basiert zu sein Menschen wurden Zeugen in der Beta # 2. Ich habe noch keine offizielle Dokumentation dazu gefunden. Bitte kommentieren Sie diese, falls vorhanden.
quelle