在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同步到云还是我必须明确将其设置为不同步?
答案 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)
然后将此可访问属性添加到存储的项目中。