即使在使用钥匙串重新安装应用程序之后,还是为iOS设备生成唯一ID的正确方法

时间:2016-07-01 13:26:42

标签: ios swift

在SO上阅读各种链接和q后,我创建了唯一ID并将其保存在钥匙串中。

要求是在应用程序重新安装中保留唯一ID。但我希望阻止将此值同步到iCloud,以防止用户备份到不同设备时出现问题。

这就是我在 Swift

中创建唯一ID的方法
let kcWrapper = KeychainWrapper() 
let uuidObject = CFUUIDCreate(kCFAllocatorDefault);
let uniqueStr = CFUUIDCreateString(kCFAllocatorDefault, uuidObject)
kcWrapper.mySetObject(uniqueStr, forKey:kSecValueData)
kcWrapper.writeToKeychain()

我使用的包装器来自本教程:https://www.raywenderlich.com/92667/securing-ios-data-keychain-touch-id-1password

这会将唯一ID同步到云还是我必须明确将其设置为不同步?

1 个答案:

答案 0 :(得分:0)

您无需阻止与iCloud的同步。但是,如果您希望某些信息仅在当前设备上可用(例如您的唯一标识符),则可以使用正确的钥匙串项可访问性属性kSecAttrAccessible。一个带有后缀" ThisDeviceOnly",请参阅可能使用的常量列表:https://developer.apple.com/reference/security/1658642-keychain_services/1663541-keychain_item_accessibility_cons

默认使用iOS 8 kSecAttrAccessibleWhenUnlocked,因此您需要明确设置ThisDeviceOnly模式以限制与其他设备的同步。

更新: 对于github.com/kishikawakatsumi/KeychainAccess钥匙串包装器,您需要在初始化时指定所需的辅助功能属性:

let keychain = Keychain(service: "com.example.github-token")
    .label("github.com (kishikawakatsumi)")
    .synchronizable(true)
    .accessibility(.whenPasscodeSetThisDeviceOnly)

然后将此可访问属性添加到存储的项目中。