Как обмениваться данными брелка между приложениями iOS - PullRequest
55 голосов
/ 07 ноября 2010

Я описываю проблему, для которой мне потребовалось довольно много времени, чтобы узнать ответ.

Пример " GenericKeychain " является хорошим началом для предоставления оболочки для обмена данными цепочки для ключей между приложениями при использовании accessGroup в init.

Однако реализация этого в моем приложении привела к неясному коду ошибки (который потребовался навсегда, чтобы найти) -25243, что означает: Нет контроля доступа.

Я запустил пример приложения Apple (GenericKeychain) на своем iPad только для того, чтобы получить ту же ошибку. А?

Не содержит ли документация Apple информацию о том, что необходимо для этого?

Ответы [ 2 ]

53 голосов
/ 16 ноября 2010

После некоторого (большого количества) копания в Интернете я нашел ответ. Группа доступа, которую вы используете при создании класса KeychainItemWrapper, должна также указываться в файле Entitlements.plist вашего приложения в разделе «keychain-access-groups».

Кажется почти очевидным, что я вижу " keychain-access-groups ". Тем не менее, я понятия не имел, даже посмотреть там. Надеюсь, что это помогает другим.

14 голосов
/ 08 мая 2015

На самом деле это не сложно сделать. Пожалуйста, следуйте инструкциям.

App1:

  1. Откройте целевые возможности вашего приложения и включите обмен ключами.
  2. Добавить идентификатор. (например, com.example.sharedaccess)
  3. Добавьте « UICKeyChainStore » в свой проект.
  4. Убедитесь, что у вас есть идентификатор команды, добавленный в ваш проект App1.
  5. Добавьте Security.framework в ваш проект App1.
  6. И добавьте эти коды куда вам нужно.

    [UICKeyChainStore setString:@"someValue" forKey:@"someKey" service:@"someService"];
    

App2:

  • Откройте целевые возможности вашего приложения и включите обмен ключами.
  • Добавить идентификатор. (например, com.example.sharedaccess)
  • Добавьте « UICKeyChainStore » в свой проект.
  • Убедитесь, что в проект App2 добавлен идентификатор команды.
  • Добавьте Security.framework в ваш проект App2.
  • И добавьте эти коды куда вам нужно.

    NSString *string = [UICKeyChainStore stringForKey:@"someKey" service:@"someService"];
    
  • Ваши TeamID должны быть одинаковыми для обоих проектов.

  • Я попробовал эти шаги на реальном устройстве iPhone .
  • Я также пытался выполнить эти шаги с Автоматически и iOs Development профиль обеспечения.
  • Идентификаторы комплекта моих приложений были такими: com.example.app1, com.example.app2.
...