You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用访问组时,如何仅删除iOS私有钥匙串中的指定条目?

iOS Keychain 删除行为问题解答

这种删除行为是正常的,核心原因在于Keychain的查询匹配逻辑:

当调用SecItemDelete时,如果查询字典里没有指定kSecAttrAccessGroup,系统会在当前应用有权限访问的所有Keychain容器中查找匹配条件的条目——包括应用的私有容器(默认无访问组标识)和已授权的共享访问组容器(group.com.mycompany)。

你的两个条目(私有和共享)的kSecClass、kSecAttrAccount、kSecAttrService完全一致,唯一区别是访问组属性,所以当查询条件不包含访问组时,两个条目都会被判定为匹配,进而被一并删除。

解决办法

有两种可靠的方式避免这种误删:

  1. 精准指定访问组:删除时明确在查询字典中添加kSecAttrAccessGroup字段,只匹配目标容器的条目。
    • 删除私有容器条目:保持原查询(不添加访问组)
    • 删除共享容器条目:在查询中加入kSecAttrAccessGroup as String: "group.com.mycompany"
  2. 区分条目标识:为私有和共享容器的条目使用不同的kSecAttrAccount或kSecAttrService值,比如把共享条目的account设为"my_item_key_shared",这样即使不指定访问组,查询条件也只会匹配对应容器的条目。

内容的提问来源于stack exchange,提问作者piotr_ch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:52:04