iOS 中 kSecAttrIsInvisible 的相关性
Relevance of kSecAttrIsInvisible in iOS
Keychain 项属性键 kSecAttrIsInvisible
描述为:
A key whose value is a Boolean indicating the item's visibility.
从 iOS 2.0+ 开始,iOS SDK 中就提供了此功能。
我认为这可能会隐藏钥匙串项目,使其不会出现在用户可以通过钥匙串访问应用程序查看钥匙串项目的 macOS 系统上。
我的问题是,如果有的话,在 iOS 设备上启用此属性键有什么作用?
我在 Apple Developer forums 上收到了对此的回复:
I assume that this may hide the Keychain item from appearing on a
macOS system where the user can view the Keychain items via the
Keychain Access app.
正确。
My question is, what does enabling this attribute key do on an iOS
device, if anything?
不多。鉴于 iOS 没有通用的方式来查看钥匙串项目,我能想到的唯一具体效果与 iCloud 钥匙串有关。如果项目通过 iCloud Keychain 同步到 Mac,您可能希望将其隐藏在那里。
我刚刚在 Apple 开发论坛帖子上发布了这个跟进:
小心 :
我最近添加了这个属性,以便在 iCloud 钥匙串处于活动状态时从我的 iOS 应用程序中隐藏一些项目,并且可以在 Mac 上看到,也是因为 MacOS 我们应用程序的版本现在差不多准备好了。
而且我们遇到了严重的情况,iOS 用户由于这种模糊和未记录的行为而无法将他们的购买存储在钥匙串中:
- 如果您设置字典来删除和重写 KC 中的项目,
添加 kSecAttrIsInvisible 属性,然后删除将失败
如果之前的写入是在没有不可见属性的情况下完成的。这
错误是 errSecItemNotFound。因为项目没有被删除,所以
无法再次存储。
- 相反,存储了不可见属性的物品可以
使用包含或不包含的查询字典删除
属性。
因此,要正确迁移到使用此属性,应该:
- 删除带有不带 kSecAttrIsInvisible 的查询的项目
属性。
- 如果删除失败,重新删除属性。我们没有看到这种情况,但应该在代码中进行规划。
- 然后用属性写项目。
未来删除该属性可以成功,但在我们测试的任何情况下,前面的步骤只尝试一次删除。
Keychain 项属性键 kSecAttrIsInvisible
描述为:
A key whose value is a Boolean indicating the item's visibility.
从 iOS 2.0+ 开始,iOS SDK 中就提供了此功能。
我认为这可能会隐藏钥匙串项目,使其不会出现在用户可以通过钥匙串访问应用程序查看钥匙串项目的 macOS 系统上。
我的问题是,如果有的话,在 iOS 设备上启用此属性键有什么作用?
我在 Apple Developer forums 上收到了对此的回复:
I assume that this may hide the Keychain item from appearing on a macOS system where the user can view the Keychain items via the Keychain Access app.
正确。
My question is, what does enabling this attribute key do on an iOS device, if anything?
不多。鉴于 iOS 没有通用的方式来查看钥匙串项目,我能想到的唯一具体效果与 iCloud 钥匙串有关。如果项目通过 iCloud Keychain 同步到 Mac,您可能希望将其隐藏在那里。
我刚刚在 Apple 开发论坛帖子上发布了这个跟进:
小心 :
我最近添加了这个属性,以便在 iCloud 钥匙串处于活动状态时从我的 iOS 应用程序中隐藏一些项目,并且可以在 Mac 上看到,也是因为 MacOS 我们应用程序的版本现在差不多准备好了。
而且我们遇到了严重的情况,iOS 用户由于这种模糊和未记录的行为而无法将他们的购买存储在钥匙串中:
- 如果您设置字典来删除和重写 KC 中的项目, 添加 kSecAttrIsInvisible 属性,然后删除将失败 如果之前的写入是在没有不可见属性的情况下完成的。这 错误是 errSecItemNotFound。因为项目没有被删除,所以 无法再次存储。
- 相反,存储了不可见属性的物品可以 使用包含或不包含的查询字典删除 属性。
因此,要正确迁移到使用此属性,应该:
- 删除带有不带 kSecAttrIsInvisible 的查询的项目 属性。
- 如果删除失败,重新删除属性。我们没有看到这种情况,但应该在代码中进行规划。
- 然后用属性写项目。
未来删除该属性可以成功,但在我们测试的任何情况下,前面的步骤只尝试一次删除。