Keychain Group Access

转载 2015年07月07日 11:26:12

Since iPhone OS 3.0 it has been possible to share data between a family of applications. This can provide a better user experience if you follow the common path of free/premium applications or if you have a set of related applications that need to share some common account settings.

The main pre-requisite for shared keychain access is that all of the applications have a common bundle seed ID. To be clear what this means remember that an App ID consists of two parts:

<Bundle Seed ID> . <Bundle  Identifier>

The bundle seed ID is a unique (within the App Store) ten character string that is generated by Apple when you first create an App ID. The bundle identifier is generally set to be a reverse domain name string identifying your app (e.g. com.yourcompany.appName) and is what you specify in the application Info.plist file in Xcode.

So when you want to create an app that can share keychain access with an existing app you need to make sure that you use the bundle seed ID of the existing app. You do this when you create the new App ID in the iPhone Provisioning Portal. Instead of generating a new value you select the existing value from the list of all your previous bundle seed IDs.

One caveat, whilst you can create a provisioning profile with a wildcard for the bundle identifier I have never been able to get shared keychain access working between apps using it. It works fine with fully specified (no wildcard) identifiers. Since a number of other Apple services such as push notifications and in-app purchase also have this restriction maybe it should not be a surprise but I am yet to find this documented for keychain access.

Once you have your provisioning profiles setup with a common bundle seed ID the rest is pretty easy. The first thing you need to do is register the keychain access group you want to use. The keychain access group can be named pretty much anything you want as long as it starts with the bundle seed ID. So for example if I have two applications as follows:


I could define a common keychain access group as follows:

  • ABC1234DEF.amazingAppFamily

To enable the application to access this group you need to add an entitlements plist file to the project using xCode. Use Add -> New File and select the Entitlements template from the iPhone OS Code Signing section. You can name the file anything you like (e.g. KeychainAccessGroups.plist). In the file add a new array item named keychain-access-groups and create an item in the array with the value of our chosen keychain access group:

Note: Do not change the get-task-allow item that is created by default in the entitlements file unless you are creating an Ad-Hoc distribution of your app (in which case you should uncheck this option).

This same process should be repeated for all apps that share the bundle seed ID to enable them to access the keychain group. To actually store and retrieve values from this group requires adding an additional value to the dictionary passed as an argument to the keychain services. Using the example from the previous post on simple iPhone keychain access the search dictionary gets the following additional item:

[searchDictionary setObject:@"ABC1234DEF.amazingAppFamily" 

One final comment, using a shared keychain access group does not stop you from storing values in an applications private keychain as well. The Apple GenericKeychain example application builds two applications which both store data in a private and group keychain.

 Apr 3rd2010 4:07 pm  keychain

« Simple iPhone Keychain Accessthe iPad NDA is finally lifted »

ios下 KeyChain 的研究


Keychain Group Access

From:           Since iP...

Simple iPhone Keychain Access

MAR 29TH, 2010 The keychain is about the only place that an iPhone application can safely store...

Keychain Access中开发证书和秘钥的关系

首先我给大家献上一张图:   相信大家一定不陌生吧!keychains栏选择login,Category一栏选择My Certificates,你就会看到当前安装的所有开发者证书啦,有测...

Access里自定义类似MySQL group_concat 的函数

MySQL里的group_concat很方便,MS-Access里没有。网上找到一个: Concat...
  • KimSoft
  • KimSoft
  • 2011年09月21日 16:32
  • 3459

Optimizing Data Access and Messaging-Performing Entity Group Transactions Updated: September 13, 2011 The Tabl...

SQL编程实例:Access数据库,两张表的统计,count、sum聚合函数的使用,iif的使用,group by的使用

使用工具: FineReport报表设计器,Access数据库 需求描述: 有两张表,订单表和订单明细表 1、订单表结构: 2、订单明细表结构: 目的:根据这两张表做出下面...

spring启动失败:org.springframework.beans.factory.access.BootstrapException: Unable to initialize group d

从SVN上Checkout下来工程之后,导入Myeclipse不仅某些文件出现莫名错误,且启动报错。 根据看错误信息怀疑是配置问题或者缺包。 但是捏~包他多找不到哪一个,于是从checkout下...

16.Laravel报错SQLSTATE[42000] Syntax error or access violation 1055 'xxx' isn't in GROUP BY.txt

2016.11.15 1.问题描述 今天做项目优化时做了个视图来优化查询,创建视图语句为 select `edm_courses`.`cou_id` AS `cou_id`, `edm_cou...
您举报文章:Keychain Group Access