Как делиться данными о связях между приложениями 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.