Два приложения, совместно использующие данные цепочки для ключей, прекрасно работают в симуляторе iOS, но не в устройстве
Я пытаюсь получить доступ к данным цепочки для ключей приложением из другого приложения с тем же идентификатором (тот же профиль). Я использовал эту ссылку для достижения этой цели.
Сохранение данных цепочки для ключей происходит должным образом, я получаю errSecSuccess для нижеследующего отчета (как в симуляторе, так и на устройстве)
OSStatus status = SecItemAdd((CFDictionaryRef)dictionary, NULL);
Пока все хорошо, но когда я пытаюсь получить учетные данные, которые мое приложение A сохранило в другом приложении B, оно работает по-разному в имитаторе и устройстве.
В симуляторе iOS 6.1 я получаю статус "0" для следующего утверждения.
OSStatus status = SecItemCopyMatching((CFDictionaryRef)searchDictionary, &foundDict);
На любом устройстве iOS я получаю статус "-25300".
Я знаю, что это коды ошибок в структуре безопасности:
//errSecSuccess = 0, /* No error. */
//errSecUnimplemented = -4, /* Function or operation not implemented. */
//errSecParam = -50, /* One or more parameters passed to a function where not valid. */
//errSecAllocate = -108, /* Failed to allocate memory. */
//errSecNotAvailable = -25291, /* No keychain is available. You may need to restart your computer. */
//errSecDuplicateItem = -25299, /* The specified item already exists in the keychain. */
//errSecItemNotFound = -25300, /* The specified item could not be found in the keychain. */
//errSecInteractionNotAllowed = -25308, /* User interaction is not allowed. */
//errSecDecode = -26275, /* Unable to decode the provided data. */
//errSecAuthFailed = -25293, /* The user name or passphrase you entered is not correct. */
и я получаю это элемент не найден, но почему отличается в устройстве и симуляторе.
1 ответ
Насколько мне известно, группы цепочки для ключей, с которыми вы работаете в своем приложении, по умолчанию не используются другими приложениями в системе. Если бы это было так, это означало бы, что, если вам удалось найти группу другого приложения, вы могли бы украсть их личные элементы цепочки для ключей, лишив их безопасности, которую обеспечивает цепочка для ключей.
В результате, существует концепция, известная как группы доступа цепочки для ключей, которая позволяет публично определить группу цепочки для ключей, которую вы хотели бы поделиться в своих приложениях. В документации говорится:
Включение совместного использования цепочки для ключей позволяет вашему приложению обмениваться паролями в цепочке для ключей с другими приложениями, разработанными вашей командой
Так что имейте в виду, что вы можете обмениваться элементами цепочки для ключей только с другими приложениями от того же разработчика (т.е. ваши другие приложения).