我已使用kSecAttrSynchronizable使用SecKeychain API在我的应用程序中实现了同步钥匙串存储。我是否认为必须启用iCloud钥匙串(iOS设置> iCloud> iCloud钥匙串)才能正确工作?
如果是这样,是否有任何方法可以告诉您是否启用了此功能?
最佳答案
您的应用程序使用kSecAttrSynchronizable
属性来告知钥匙串是否期望将此钥匙串条目同步到该用户的其他Apple设备上。
您为什么要同步而不是?例如。用户不想同步它,因为他想在iPhone和iPad上使用其他密码;因此,您可能想提供一个偏好,并让用户选择是否希望同步此密码。或同步此密码根本没有意义,例如它是用于加密应用程序本地数据的密码,本地数据仅存在于当前设备上,因此此密码对其他设备没有用,因为它们缺少用于解密的数据。
但是,您的应用只能表达对商品进行同步的愿望,而同步是否发生完全取决于用户。在所有密码同步都要求将密码存储在Apple的服务器上之后,用户可以决定是否要完全进行密码同步。它们以加密方式存储,甚至Apple本身也无法访问密码数据,但是当此类信息在Internet上的 public 服务器上散布时,某些用户仍然感觉不佳。因此,除非用户启用同步,否则不会同步任何密码。
为什么您需要知道用户是否启用了它?告诉用户除非启用了密码同步,否则密码不会同步?听起来有点像告诉用户房间是黑暗的,除非他打开灯。如果未启用,则用户可能是故意选择的,您不知道他是否这样做了,可以吗?如果您在应用程序偏好设置中提供了用于密码同步的选项,并且用户启用了,则只需在下面显示一个信息文本,即此功能要求启用iCloud钥匙串同步,否则将无效。
除此之外,如果您不提供这样的选项,那么对于所有用户来说,仍然应该显而易见的是,当您的应用 promise “现在支持iCloud钥匙串同步”时,该功能仅在启用“iCloud钥匙串同步”后才有效,你不觉得吗因此,据我所知,没有API可以直接告诉您。可能会通过其他方式间接检测到,但我不建议您使用此类骇客,因为它们非常脆弱,迟早会因更新而中断。