iOS中的kSecAttrIsInvisible相关性

时间:2018-10-11 00:27:36

标签: ios keychain

“钥匙串”项属性键kSecAttrIsInvisible描述为:

  

一个键,其值为布尔值,表示该项的可见性。

自iOS 2.0+起,此功能已在iOS SDK中提供。

我认为这可能会隐藏“钥匙串”项目,使其不会出现在macOS系统上,用户可以在其中通过“钥匙串访问”应用程序查看“钥匙串”项目。

我的问题是,启用此属性键在iOS设备上有什么作用?

2 个答案:

答案 0 :(得分:1)

我刚刚在Apple开发者论坛主题上发布了此后续报道:

注意

我最近添加了此属性,以便在iCloud钥匙串处于活动状态并且可以在Mac上看到时,从我的iOS应用程序中隐藏一些项目,这也是因为我们的应用程序的MacOS版本现已准备就绪。

我们面临着严重的情况,即iOS用户由于这种晦涩且无证的行为而无法将购买的商品存储在钥匙串中:

  • 如果您设置字典以删除和重写KC中的项目, 添加kSecAttrIsInvisible属性,则删除将失败 如果先前的写入是在没有invisible属性的情况下完成的。的 错误是errSecItemNotFound。因为没有删除项目,所以它 不能再次存储。
  • 相反,存储有invisible属性的项目可以 使用包含或不包含以下内容的查询字典删除 属性。

因此要正确迁移到使用此属性,应该:

  1. 使用不带kSecAttrIsInvisible的查询删除项目 属性。
  2. 如果删除失败,请使用属性重做删除。我们没有看到这种情况,但是应该在代码中对此进行计划。
  3. 然后写上带有属性的项目。

该属性可以成功进行将来的删除,但是在我们测试的任何情况下,前面的步骤只能进行一次删除尝试。

答案 1 :(得分:0)

我在Apple Developer forums上收到了对此的回复:

  

我认为这可能会使“钥匙串”项无法显示在   macOS系统,用户可以通过该系统查看钥匙串项目   钥匙串访问应用程序。

正确。

  

我的问题是,在iOS上启用此属性键有什么作用   设备,如果有的话?

不多。鉴于iOS没有通用的方式来查看钥匙串项目,因此我能想到的唯一特定效果与iCloud钥匙串有关。如果该商品已通过iCloud钥匙串同步到Mac,则可能要使其在此处不可见。