Как делиться данными о связях между приложениями iOS
Я описываю проблему, для которой мне потребовалось некоторое время, чтобы узнать ответ.
" GenericKeychain" пример - хороший старт в предоставлении оболочки для обмена данными о связях ключей между приложениями при использовании accessGroup в init.
Однако, реализация этого в моем приложении дала скрытый код ошибки (который нашел навсегда найти) -25243, что означает: Нет контроля доступа.
Я запустил пример приложения Apple (GenericKeychain) на своем iPad только для получения той же ошибки. А?
Не удалось ли документация Apple не выполнить то, что необходимо для этого?
Ответы
Ответ 1
После некоторых (много) копаний по всему Интернету я нашел ответ. Группа доступа, которую вы используете при построении вашего класса KeychainItemWrapper, также должна быть указана в каждом файле приложения Entitlements.plist в разделе "Группы ключей для доступа".
Теперь кажется почти очевидным, что я вижу " keychain-access-groups". Тем не менее, я понятия не имел, что даже смотреть там. Надеюсь, это поможет другим.
Ответ 2
На самом деле это не сложно. Следуйте инструкциям.
App1:
- Откройте целевые возможности приложения и включите общий доступ к KeyChain.
- Добавить идентификатор. (например: com.example.sharedaccess)
- Добавьте "UICKeyChainStore" в свой проект.
- Убедитесь, что в проект App1 добавлен идентификатор команды.
- Добавьте Security.framework в ваш проект App1.
-
И добавьте эти коды туда, где вам нужно.
[UICKeyChainStore setString:@"someValue" forKey:@"someKey" service:@"someService"];
App2:
- Откройте целевые возможности приложения и включите общий доступ к KeyChain.
- Добавить идентификатор. (например: com.example.sharedaccess)
- Добавьте "UICKeyChainStore" в свой проект.
- Убедитесь, что в проект App2 добавлен идентификатор команды.
- Добавьте Security.framework в ваш проект App2.
-
И добавьте эти коды туда, где вам нужно.
NSString *string = [UICKeyChainStore stringForKey:@"someKey" service:@"someService"];
-
Ваши TeamIDs должны быть одинаковыми для обоих проектов.
- Я пробовал эти шаги на реальном устройстве iPhone.
- Я также проделал эти шаги с помощью профилей Автоматический и iOs Development.
- Идентификаторы пакетов моих приложений были такими: com.example.app1, com.example.app2.