Как обмениваться данными между приложениями в iOS брелок


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

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

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

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

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

2 54

2 ответа:

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

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

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

приложения app1:

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

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

приложения app2:

  • откройте целевые возможности вашего приложения и включите общий доступ к связке ключей.
  • добавить идентификатор. (например, com.образец.sharedaccess)
  • добавить "UICKeyChainStore " к вашему проекту.
  • убедитесь, что в ваш проект App2 добавлен идентификатор команды.
  • Добавить Безопасности.фреймворк для вашего проекта App2.
  • и добавить эти коды где-то вы необходимость.

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

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