iOS Mise à jour d'un mot de passe dans le trousseau


Exemple

Comme d'habitude, nous avons d'abord besoin d'un CFDictionary pour représenter l'élément que nous voulons mettre à jour. Cela doit contenir toutes les anciennes valeurs de l'élément, y compris les anciennes données privées. Ensuite, il faut un CFDictionary de tous les attributs ou des données que vous souhaitez modifier.

Donc, tout d'abord, construisons une clé de classe et une liste d'attributs. Ces attributs peuvent restreindre notre recherche, mais vous devez inclure tous les attributs et les anciennes valeurs si vous les modifiez.

Rapide

var dict = [String : AnyObject]()
dict[kSecClass as String] = kSecClassGenericPassword
// Label
dict[kSecAttrLabel as String] = "com.me.myapp.myaccountpassword" as CFString
// Username
dict[kSecAttrAccount as String] = "My Name" as CFString

Maintenant, nous devons ajouter les anciennes données:

Rapide

dict[kSecValueData as String] = "my_password!!".data(using: .utf8) as! CFData

Maintenant, créons les mêmes attributs, mais un mot de passe différent:

Rapide

var newDict = [String : AnyObject]()
newDict[kSecClass as String] = kSecClassGenericPassword
// Label
newDict[kSecAttrLabel as String] = "com.me.myapp.myaccountpassword" as CFString
// Username
newDict[kSecAttrAccount as String] = "My Name" as CFString
// New password
newDict[kSecValueData as String] = "new_password!!".data(using: .utf8) as! CFData

Maintenant, nous passons juste à Keychain Services:

Rapide

let status = SecItemUpdate(dict as CFDictionary, newDict as CFDictionary)

SecItemUpdate renvoie un code d'état. Les résultats sont décrits ici .