在阅读了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)
则这个易访问属性将被添加到存储项中