Влияет ли обновление профиля обеспечения на доступ к цепочке для ключей при отправке обновления приложения в AppStore?
У меня есть приложение для iPhone, которое использует связку ключей для хранилища, связанного с аутентификацией.
У меня также был устаревший профиль обеспечения.
В документации для доступа к цепочке для ключей говорится:
На iPhone права связки ключей зависят от профиля обеспечения, используемого для подписи вашего приложения. Обязательно последовательно используйте один и тот же профиль обеспечения в разных версиях приложения.
Поскольку срок действия моего профиля обеспечения истекал, я обновил его (на портале обеспечения), загрузил и дважды щелкнул по нему, который "установил" его в органайзере XCode.
После отправки обновления в приложение в магазине приложений, я в основном вижу пустую цепочку для ключей (пользователя просят войти снова).
Мой вопрос: влияет ли обновление профиля обеспечения, используемого для подписи приложения, на доступ к цепочке для ключей, когда обновленный профиль используется для отправки обновления в приложение? В документах просто сказано использовать "тот же профиль обеспечения", но неясно, считается ли обновленный профиль другим профилем (как показывает мой опыт, описанный выше).
Что дает?
Обновить
Решено с помощью ответа ТС. Глядя на embedded.mobileprovision
файл в каждом из.ipas, отправленных в apple, показал, что сертификат с истекающим сроком действия и профиль обеспечения использовались для подписания версии x приложения, а другой сертификат и профиль обеспечения использовались для подписания версии x+1 приложения (виновник: " Функция автоматического выбора профиля "XCode для идентификации подписи кода).
Первый сертификат и профиль остались после того, как разработчик использовал другую учетную запись iOS Developer Program для разработки несвязанного приложения (на том же компьютере, с тем же пользователем OSX). Профили инициализации для нескольких учетных записей разработчиков iOS, по-видимому, все хранятся вместе в ~/Library/MobileDevice/Provisioning Profiles
так что все они являются кандидатами на функцию автоматического выбора профиля в XCode.
Я изменил удостоверение подписи кода, выбрав совершенно другой профиль распространения, который я принял за обновленную / действительную версию устаревшего профиля распространения, и отправил обновление. То же приложение, другой сертификат, другой профиль обеспечения == пустая цепочка для ключей. D'OH.
3 ответа
Цепочки для ключей, которые вы можете использовать, определяются keychain-access-groups
в правах, который ограничен подмножеством keychain-access-groups
в профиле обеспечения, который определяется "начальным числом пакета"/"префиксом"/ (ApplicationIdentifierPrefix
в профиле обеспечения), установите в "Идентификатор приложения".
Предполагая, что вы сохранили старое представленное приложение (или .ipa
из iTunes, который является просто почтовым индексом), посмотрите на embedded.mobileprovision
как в старых, так и в новых приложениях (less Foo.app/embedded.mobileprovision
в терминале следует делать свое дело, или вы можете открыть его в текстовом редакторе, хотя иногда они будут выбирать неправильные окончания строки). Вы ищете что-то вроде этого (вы можете увидеть дополнительные клавиши для push/iCloud):
<key>Entitlements</key>
<dict>
<key>application-identifier</key>
<string>A1B2C3D4E5.com.example.MyApp</string>
<key>get-task-allow</key>
<false/>
<key>keychain-access-groups</key>
<array>
<string>A1B2C3D4E5.*</string>
</array>
</dict>
Вы также можете просмотреть фактические права, с которыми ваше приложение было подписано:
codesign -d --entitlements - Foo.app/Foo | vis
IIRC группы доступа цепочки для ключей по умолчанию, например, A1B2C3D4E5.com.example.MyApp
, но вы можете установить это на все, что вы хотите, если он соответствует A1B2C3D4E5.*
(Xcode 4 даже имеет хороший редактор прав GUI). Если префикс пакета отличается, это вызовет проблему, которую вы видите. Я думаю, что вы можете изменить его обратно, если вы не включили push/Game Center/ и т.д.
Пока идентификатор пакета вашего приложения не меняется, с цепочкой для ключей не возникнет никаких проблем.
Учитывая, что мы все должны обновлять наши сертификаты и профили распространения каждый год, было бы хаосом, если бы это нарушило доступ к цепочке для ключей для наших приложений.
У меня есть одно приложение, которое было в App Store более 4 лет. Он использует брелок. За последние годы он несколько раз обновлялся, обновляя профиль обеспечения. Там не было никаких проблем с цепочкой для ключей.
Для всех, кто искал, у меня была другая проблема. Шаги, которые я выполнил, чтобы уйти в отставку, привели к тому, что у него не было никаких прав, что означает отсутствие доступа к брелку. Поэтому я создал скрипт для отставки ipa, но сохранил права от оригинала. Я разместил его по адресу http://baltaks.com/2013/08/resigning-enterprise-ios-apps и буду обновлять его при необходимости.