Влияет ли обновление профиля обеспечения на доступ к цепочке для ключей при отправке обновления приложения в 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 и буду обновлять его при необходимости.

Другие вопросы по тегам