Thanks, Quinn! Actually you already answered my first question ("Add item to a specific keychain").
Please, about the current state: in fact, my specific doubt is how I can delete a duplicated keychain.
Using your code, I'm trying this here (code below). Running at firt time, the keychain "test" is created
and the generic password is added to it (ok). At second time, I want the keychain to be deleted, but
what happens is that createErr = errSecDuplicateKeychain, and deleteErr is errSecInvalidKeychain
(lines 9 and 10 below are executed).
How can I delete a duplicated keychain? What mistakes am I making?
let keychainPath = "/Users/quinn/test.keychain"
let password = [UInt8]("Hello Cruel World!".data(using: .utf8)!)
var tmp: SecKeychain? = nil
let createErr = SecKeychainCreate(keychainPath, UInt32(password.count), password, false, nil, &tmp)
guard createErr == errSecSuccess else {
if createErr == errSecDuplicateKeychain {
let deleteErr = SecKeychainDelete(tmp)
guard deleteErr == errSecSuccess else {
print("SecKeychainDelete failed, error: %d", createErr)
return
}
print("Success!")
return
}
print("SecKeychainCreate failed, error: %d", createErr)
return
}
let keychain = tmp!
let addErr = SecItemAdd([
kSecClass: kSecClassGenericPassword,
kSecAttrService: "TestService",
kSecAttrAccount: "mrgumby",
kSecUseKeychain: keychain,
kSecValueData: "opendoor".data(using: .utf8)!
] as NSDictionary, nil)
if addErr != errSecSuccess {
print("SecItemAdd failed, error: %d", addErr)
}
print("success")