Ответ 1
Если у вас есть разные идентификаторы семян пакета (десять буквенно-цифровых символов, предшествующих идентификатору пучка, Xs в XXXXXXXXXX.com.company.application
), вы не можете делиться группой доступа. Это ограничение на часть Apple и обход ее не допускается. Я предлагаю вам найти другое решение безопасного обмена данными (возможно, за пределами устройства, на сервере, но не iCloud, поскольку оно имеет те же ограничения).
Общая информация о группах доступа к цепочке ключей:
Так как iPhone OS 3.0 удалось обмениваться данными между семейством приложений. Это может обеспечить лучший пользовательский интерфейс, если вы будете следовать общему пути бесплатных/премиальных приложений или если у вас есть набор связанных приложений, которым необходимо поделиться некоторыми общими настройками учетной записи.
Основной предпосылкой для совместного доступа к ключам является то, что все приложения имеют общий идентификатор семпла пакета. Чтобы было ясно, что это значит, помните, что идентификатор приложения состоит из двух частей:
<Bundle Seed ID> . <Bundle Identifier>
Идентификатор семени пакета является уникальной (в пределах App Store) десятисимвольной строкой, созданной Apple при первом создании идентификатора приложения. Идентификатор связки, как правило, устанавливается как строка обратного имени домена, идентифицирующая ваше приложение (например,
com.yourcompany.appName
), и это то, что вы указали в файле приложения Info.plist в Xcode.Поэтому, когда вы хотите создать приложение, которое может совместно использовать доступ к цепочке ключей с помощью существующего приложения, вам нужно убедиться, что вы используете идентификатор семени пакета существующего приложения. Это делается при создании нового идентификатора приложения в iPhone Provisioning Portal. Вместо генерации нового значения вы выбираете существующее значение из списка всех предыдущих идентификаторов семян пакета.
Одно предостережение, в то время как вы можете создать профиль обеспечения с подстановочным знаком для идентификатора пакета, я никогда не мог получить доступ к совместному доступу к ключам между приложениями, использующими его. Он отлично работает с полностью указанными (без подстановочных) идентификаторов. Поскольку ряд других сервисов Apple, таких как push-уведомления и покупка в приложении, также имеют это ограничение, возможно, это не должно быть неожиданностью, но я еще не нашел это документально подтвержденным для доступа к цепочке ключей.
Как только у вас будет настроен профиль профилей с общим идентификатором семян пакета, остальное довольно просто. Первое, что вам нужно сделать, это зарегистрировать группу доступа к цепочке ключей, которую вы хотите использовать. Группу доступа к цепочке ключей можно назвать практически любой, что угодно, если она начинается с идентификатора семени пакета. Например, если у меня есть два приложения:
ABC1234DEF.com.useyourloaf.amazingApp1 ABC1234DEF.com.useyourloaf.amazingApp2
Я мог бы определить общую группу доступа к цепочке ключей следующим образом:
ABC1234DEF.amazingAppFamily
Чтобы включить приложение для доступа к этой группе, вам необходимо добавить файл plists для прав в проект с помощью xCode. Используйте "Добавить" - "Создать файл" и выберите шаблон "Права доступа" в разделе "Подписание кода iPhone OS". Вы можете назвать файл любым, что вам нравится (например,
KeychainAccessGroups.plist
). В файле добавьте новый элемент массива с именем keychain-access-groups и создайте элемент в массиве со значением нашей выбранной группы доступа к цепочке:Примечание. Не изменяйте элемент get-task-allow, который создается по умолчанию в файле прав, если вы не создаете Ad-Hoc-дистрибутив вашего приложения (в этом случае вы должны снять этот флажок).
Этот же процесс должен быть повторен для всех приложений, которые совместно используют идентификатор семени пакета, чтобы они могли получить доступ к группе ключей. Для фактического хранения и извлечения значений из этой группы требуется добавить дополнительное значение в словарь, переданный в качестве аргумента в службы keychain. Используя пример из предыдущего сообщения на простой доступ к keychain для iPhone, поисковый словарь получает следующий дополнительный элемент:
[searchDictionary setObject: @"ABC1234DEF.amazingAppFamily" forKey: (id)kSecAttrAccessGroup];
Один заключительный комментарий, использующий общую группу доступа к цепочке ключей, не мешает вам хранить значения в частной цепочке ключей приложений. Приложение примера Apple GenericKeychain создает два приложения, которые хранят данные в частной и групповой цепочке ключей.
Источник: Используйте свой хлеб