Очень сложный вопрос об iPhone / iPad. - PullRequest
5 голосов
/ 31 мая 2011

Вот в чем дело ..

Сценарий:

Я получил файл ipa, который я получил в результате процесса Archive + Share используя XCode. Файл ipa подписан с использованием специальных сертификатов распространения и может быть установлен без проблем.

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

После этого я переподписываю приложение с помощью команды Cossign с Enterprise сертификат распространения после внесения некоторых изменений в пакет applicationaction.app. Эти изменения включают в себя изменение имени приложения и идентификатора пакета из info.plist, и, конечно, замените встроенный профиль мобильной подготовки на тот, который соответствует новому сертификату.

Проблема:

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

Идеи, почему это происходит?

Ответы [ 2 ]

8 голосов
/ 29 ноября 2012

Я искал часы для этой проблемы ... Это решение, как отказывающее приложение работало с нашим приложением.Мы получили файл IPA от клиента и отказались от него с нашим сертификатом.Доступ к связке ключей работает.В нашем случае не изменился bundle.id.

Какие файлы вам нужны:

  • MyApp.ipa
  • MyApp_EnterpriseDistribution.mobileprovision (профиль обеспечения корпоративной дистрибуции)
  • Entitlements.plist

Все файлы находятся в одном каталоге.Если файлы были расположены в разных папках, вы должны изменить путь в коде

Сначала мы создаем «Entitlements.plist».Создайте текстовый файл и вставьте следующий код.Введите идентификатор приложения.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>GBA9L2EABG.com.your.bundle.id.MyApp</string>
    <key>get-task-allow</key>
    <false/>
</dict>
</plist>

Сохраните этот файл и переименуйте его в: «Entitlements.plist»

Откройте терминал, перейдите в папку и выполните эти коды, замените «MyApp»«с вашим именем приложения и« ИМЯ ВАШЕГО ... »с названием вашего сертификата и« MyApp_EnterpriseDistribution »для вашего файла обеспечения:

unzip MyApp.ipa

//we didn't used the following, maybe necessary...
//rm -r "Payload/MyApp.app/_CodeSignature" "Payload/MyApp.app/CodeResources" 2> /dev/null | true

cp MyApp_EnterpriseDistribution.mobileprovision Payload/MyApp.app/embedded.mobileprovision

codesign -f -s "iPhone Distribution: NAME OF YOUR DISTRIBUTION CERTIFICATE" --resource-rules Payload/MyApp.app/ResourceRules.plist --entitlements Entitlements.plist  Payload/MyApp.app

zip -qr MyApp-resigned.ipa Payload/

И теперь у вас есть Ipa с вашим сертификатом.

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

4 голосов
/ 24 августа 2011

Хорошо, вот решение, которое сработало для нас.

Поскольку это была сборка Enterprise, нам потребовалось изменить файл Entitlements.plist / dist.plist, чтобы идентификатор приложения совпадал с тем, что было введено на сайте Apple. Файл Entitlements может быть предоставлен в утилите кодов.

Используйте эти инструкции, но убедитесь, что файл Entitlements соответствует полному идентификатору приложения. Это включает в себя идентификатор семян + идентификатор пакета.

Переподпись IPA (iPhone)

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

...