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

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

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

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

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

Документация Apple не дает того, что необходимо для этого?


person GtotheB    schedule 06.11.2010    source источник
comment
@GtotheB, хороший ответ! Если хотите, отделите свой ответ от вопроса и опубликуйте его как ответ на этот вопрос.   -  person Jesse Beder    schedule 10.11.2010
comment
@GtotheB: Что произошло, когда вы попытались опубликовать ответ? Возможно, требуется минимальная репутация, но если и так, то я об этом не знал. Если это так, стоит вернуться к этому вопросу и опубликовать ответ, как только вы заработаете больше повторений.   -  person outis    schedule 10.11.2010
comment
@GtotheB: Не могли бы вы сейчас ответить на свой вопрос?   -  person kennytm    schedule 14.11.2010
comment
Нажатие ответа ничего не дало. Однако, похоже, это было связано с репутацией. Я очистил все свои файлы cookie и потерял всю свою предыдущую репутацию, поэтому, похоже, я начал с нуля. Теперь ответ разделен. Ваше здоровье.   -  person GtotheB    schedule 16.11.2010
comment
Необходимо ли загружать приложения в магазин приложений для обмена данными через цепочку для ключей между приложениями. Как мы можем проверить это для нашей цели разработки.   -  person Imran    schedule 09.01.2015
comment
См. shaune.com.au/ios-keychain-sharing-data- между приложениями   -  person onmyway133    schedule 14.08.2015


Ответы (2)


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

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

person GtotheB    schedule 15.11.2010
comment
Я нашел следующую ссылку весьма полезной для предоставления более подробной информации. useyourloaf.com/blog/2010/04/03/keychain- групповой доступ.html - person DBD; 16.08.2012
comment
Будьте осторожны, в новом XCode (4.5.2) есть настройка для групп связки ключей на вкладке сводки приложения в настройках. Вы можете установить имя группы там, но умный XCode добавляет $(AppIdentifierPrefix), но не показывает его в сводке. Вы можете увидеть это в фактическом файле plist и отредактировать там. Короче говоря, если вы устанавливаете группу цепочки для ключей со сводной страницы, НЕ пишите идентификатор набора пакетов, XCode добавляет его автоматически. И прячет его на странице сводки, потому что это, ну, программное обеспечение Apple. - person mentat; 22.01.2013
comment
У меня есть дополнительный вопрос: у ваших приложений один и тот же идентификатор пакета/идентификатора разработчика? Или вы просто использовали Entitlements.plist для обмена данными между группами связки ключей? - person radj; 16.04.2013
comment
Можно ли поделиться группами доступа к цепочке ключей с другой компанией? Допустим, я создаю приложение с группой доступа, но я хочу, чтобы приложение от другой компании также могло обмениваться информацией? - person Redwarp; 06.05.2013
comment
Если у кого-то все еще есть проблема с ошибкой -25243 и попыткой использовать одну и ту же цепочку для ключей между несколькими приложениями, мне помогло установить начальный идентификатор цепочки для ключей, жестко закодированный в plist-файле прав вместо $(AppIdentifierPrefix), автоматически добавляемого XCode [url =http://postimg.org/image/52m2p4aor/][img=http://s9.postimg.org/52m2p4aor/Screen_Shot_2013_11_14_at_12_12_11_PM.jpg][/url] - person Gal Blank; 14.11.2013
comment
Кроме того, обязательно используйте AppIdentifierPrefix в accessGroup, если вы просто используете идентификатор пакета, это не сработает. - person Edgar; 26.10.2014
comment
Нужно ли, чтобы приложения загружались в магазин приложений для обмена данными через цепочку для ключей между приложениями. Как мы можем проверить это для нашей цели разработки. - person Imran; 09.01.2015
comment
@Imran Keychain находится на уровне устройства, поэтому магазин приложений не имеет значения. Однако с момента создания этой темы Apple добавила в проекты возможность общего доступа к цепочке ключей, поэтому вы можете ознакомиться с ней на веб-сайте Apple. - person GtotheB; 29.09.2015
comment
Просто примечание для тех, кто ищет общий доступ к связке ключей между iOS и watchOS 2+. Совместное использование связки ключей НЕдоступно между расширением WatchKit (в watchOS 2+) и сопутствующим приложением для iOS, поэтому вам потребуется использовать другой способ передачи данных между этими устройствами, например новый WatchConnectivity. forums.developer.apple.com/thread/5938 - person Alexandre OS; 22.10.2015

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

Приложение1:

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

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

Приложение2:

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

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

  • Я попробовал эти шаги на реальном устройстве iPhone.
  • Я также пробовал эти шаги с профилями Automatic и iOs Development.
  • Идентификаторы пакетов моих приложений были такими: com.example.app1, com.example.app2.
person alicanbatur    schedule 08.05.2015
comment
Обратите внимание, что, как вы можете видеть, мы не указываем группу доступа. По умолчанию он выберет первую группу доступа, указанную в вашем Entitlements.plist, при записи и будет выполнять поиск по всем группам доступа, если ни одна из них не указана. - person onmyway133; 14.08.2015
comment
@alicanbatur, отлично! Следует отметить одну вещь: описанный выше процесс не работал, если служба не была указана. - person sabiland; 07.10.2015
comment
ты меня очень спасаешь @alicabatur. Спасибо. - person Sanju; 24.06.2016
comment
не работает для моего, я сделал те же шаги, но [UICKeyChainStore stringForKey: @someKey service: @someService] возвращает nil - person Fadi Abuzant; 30.03.2018