Обновляет ли профиль настройки влияет на доступ к keychain, когда я отправляю обновление приложения в AppStore? - программирование
Подтвердить что ты не робот

Обновляет ли профиль настройки влияет на доступ к keychain, когда я отправляю обновление приложения в AppStore?

У меня есть приложение для iPhone, в котором использует цепочку ключей для хранилища, связанного с аутентификацией.

У меня также был истекающий профиль Provisioning.

В документации для доступа к цепочке ключей говорится:

На iPhone права на брелоки зависят от профиля предоставления, используемого для подпишите свою заявку. Обязательно последовательно используйте один и тот же профилирование в разных версиях вашего приложения.

Поскольку мой профиль Provisioning Profile истекал, я обновил его (в портале обеспечения), загрузил его и дважды щелкнул по нему, который "установил" его в организатор XCode.

После отправки обновления в приложение в хранилище приложений я в основном вижу пустую цепочку ключей (пользователю предлагается снова войти в систему).

Мой вопрос: обновляет ли профиль подготовки, используемый для подписи приложения, влияет на доступ к keychain, когда обновленный профиль используется для отправки обновления в приложение? Документы просто говорят, что используют "тот же профиль обеспечения", но неясно, относится ли обновленный профиль к другому профилю (как показывает мой опыт, описанный выше).

Что дает?

Обновление

Решено с помощью ответа tc. Глядя на файл embedded.mobileprovision в каждом из .ipas, представленном яблоку, было показано, что для подписания версии x приложения использовался устаревший сертификат и профиль обеспечения, а для подписывания версии x + 1 используется другой сертификат и профиль обеспечения приложение (виновник: функция "Автоматический выбор профиля" XCode для идентификатора подписи кода).

1-й сертификат и профиль остались после того, как разработчик использовал другую учетную запись программы разработчика iOS для разработки несвязанного приложения (на том же компьютере, с тем же пользователем OSX). Профили профилей в нескольких учетных записях программы для разработчиков iOS, по-видимому, хранятся вместе в ~/Library/MobileDevice/Provisioning Profiles, поэтому они все являются кандидатами для автоматической настройки профиля XCode.

Я изменил идентификатор подписи кода, выбрав совершенно другой профиль распространения, который я принял как обновленную/действительную версию истекающего профиля распространения, и представил обновление. Одно и то же приложение, другой сертификат, другой профиль подготовки == пустой брелок. D'ОН.

4b9b3361

Ответ 1

Связи ключей, которые вы разрешили использовать, определяются 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/и т.д.

Ответ 2

Пока ваш идентификатор пакета приложения не изменяется, проблем с цепочкой ключей не будет.

Учитывая, что каждый из нас должен обновлять наши сертификаты и профили распределения каждый год, это будет хаос, если это нарушит доступ к keychain для наших приложений.

У меня есть одно приложение, которое было в App Store уже более 4 лет. Он использует брелок. За последние годы он несколько раз обновлялся с обновленным профилем подготовки. Проблем с брелками не было.

Ответ 3

Для любого другого поиска у меня была другая проблема. Последовательные шаги, которые я выполнил для выхода из ipa, привели к тому, что у него не было прав, что означает отсутствие доступа к цепочке ключей. Поэтому я создал script, чтобы отменить ipa, но сохраняя права на оригинал. Я разместил его на http://baltaks.com/2013/08/resigning-enterprise-ios-apps и будет поддерживать это обновление при необходимости.