来源: https://www.aliyun.com/jiaocheng/359007.html
默认的group 为 $(AppIdentifierPrefix).bundle identifier
其中的${AppldentifierPrefix}是开发者账户的的前缀,是apple的公司提供的,
acct,svce,group 3个属性 确定一条储存记录。
iOS Keychain 读写规则
1、未开启Keychain Sharing
写Keychain时不设置group,会写到默认的group里(app id prefix + bundle)
写Keychain时设置了group,只能设置默认的group,否则会导致Keychain写入失败。
总结:未开启Keychain Sharing时只能写入到默认的group里。
PS:未开启Keychain Sharing时,iOS10模拟器下Keychain可能无法正常使用。
2、已开启Keychain Sharing
若不添加Keychain Groups,只能写到默认的group中,无论写Keychain时是否设置了group。
若添加了Keychain Groups:
写Keychain时不设置group,会写到Keychain Groups里第一项group里。
这句话是错的。 会写到默认的group里,即默认的appidprefix.bundleidentfier。keychain groups中哪怕没有填appidprefix.bundleidentfier这一项。
写Keychain时设置了group,会写到设置的group里。但如果设置的group非法,即不在Keychain Groups中,也不是默认的group(app id prefix + bundle),则会写入失败。
读取Keychain
在设置了kSecMatchLimitOne的情况下,若曾写入过多个group,目前测试的结果显示可能与写入的先后顺序有关(没有在官方文档中找到依据,测试结果可能有偏差)
读keychain时,如果不设置group,kSecMatchLimitAll能读取到到sharing groups中所有group对应的数据。
如果设置group,能读取到指定的group。
1,给已经上线的app打开keychain sharing, groups中加入bundle identifier为名字的group。 因为原先未打开时,为设置group时,数据时存储到这个group中的。
2, 给新app打开keychain sharing, group中加入原来上线的app的bundle identifer。