正确的方式生成唯一的id为iOS设备,即使在应用程序重新安装后使用钥匙链



在阅读了SO上的各种链接和q之后,我创建了唯一的id并将其保存在keychain中。

要求在重新安装应用程序时保持唯一id。但是我想防止将这个值同步到iCloud,以防止当用户备份到不同的设备时出现问题。

这是我如何创建唯一id在Swift:

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到云还是我必须显式设置它不同步?

您不需要阻止向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)

则这个易访问属性将被添加到存储项中

相关内容

最新更新