iOS 钥匙串替代方案,无法在另一台设备上恢复
Posted
技术标签:
【中文标题】iOS 钥匙串替代方案,无法在另一台设备上恢复【英文标题】:iOS Key Chain alternative without possibility to restore on another device 【发布时间】:2014-09-29 15:02:39 【问题描述】:是否可以在ios上存储一些在删除应用时不会删除的信息(如Keychain),并且也无法恢复到其他设备?
据我了解 - 如果您选择加密备份选项,钥匙串将恢复到另一台设备。 Does iOS keychain storage persist when restoring an app to a new device?
那么是否有可能以某种方式保留一些数据 - 在删除应用程序后(在重新安装后读取它)并且它仅在添加/创建它的设备上可用。
【问题讨论】:
【参考方案1】:有以下选项:
kSecAttrAccessibleAlwaysThisDeviceOnly
kSecAttrAccessibleWhenUnlockedThisDeviceOnly
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
来自文档:
[...] 具有此属性的项目不会迁移到新设备。 [...]
我认为它们正是您所需要的。他们在这个 WWDC 演讲中得到了很好的解释:
https://developer.apple.com/videos/wwdc/2014/#711
上述谈话的示例用法:
SecAccessControlRef sacObject =
SecAccessControlCreateWithFlags(kCFAllocatorDefault,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
kSecAccessControlUserPresence, &error);
NSData* secret = [@"top secret" dataWithEncoding:NSUTF8StringEncoding];
NSDictionary *query = @
(id)kSecClass: (id)kSecClassGenericPassword,
(id)kSecAttrService: @"myservice",
(id)kSecAttrAccount: @"account name here",
(id)kSecValueData: secret;
OSStatus status = SecItemAdd((CFDictionaryRef)query, nil);
另见:https://developer.apple.com/library/ios/documentation/Security/Reference/keychainservices/index.html#//apple_ref/doc/constant_group/Keychain_Item_Accessibility_Constants
【讨论】:
以上是关于iOS 钥匙串替代方案,无法在另一台设备上恢复的主要内容,如果未能解决你的问题,请参考以下文章