Как узнать, какой профиль / сертификат подписи использовался для подписи .ipa?

У меня есть куча файлов .ipa, и я использовал сценарий, чтобы отказаться от них.

Итак, как можно проверить профиль обеспечения / сертификат подписи, чтобы убедиться, что они используют правильную информацию?

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

Предыстория: Срок действия нашего корпоративного сертификата распространения истекает, и я хочу повторно подписать наши материалы. Это простой вариант для всего того, что мы создали и заархивировали в Xcode, но для распространяемых материалов сторонних поставщиков я не могу этого сделать. Я не хочу просить повторно подписанный файл .ipa, потому что новый .ipa может включать неизвестные изменения и вызывать проблемы, и они, вероятно, тоже взимают с нас плату ... но меня больше беспокоит первый выпуск.

Поскольку и наш старый, и новый сертификаты распространения по-прежнему действительны (вы получаете перекрытие в 6 месяцев), мне нужно иметь возможность подтвердить, что используется новый, иначе я бы выглядел очень глупо, когда срок действия старого истекает, а сценарий «отставки» не работает. Я действительно делаю свою работу.


person DBD    schedule 14.02.2013    source источник


Ответы (6)


Профили подготовки имеют UUID, который можно увидеть с помощью команды терминала:

безопасность cms -D -i (путь_к_профиль_провидения)

См. Раздел UUID выходных данных команды, например:

<key>UUID</key> <string>A008C022-7B82-4E40-8B37-172763E1E3CC</string>

Xcode вставляет профиль обеспечения, используемый для подписи приложения, в пакет .app. Чтобы найти его, переименуйте свой .ipa в .zip, распакуйте его с помощью Finder, найдите файл .app в / Payload. «Показать содержимое пакета» в файле .app и найти профиль обеспечения с именем embedded.mobileprovision.

Сбросьте его права, используя указанную выше команду, и сравните это с UUID, найденным в ваших профилях в вашем Xcode Organizer> вкладка «Устройства»> раздел «Профиль обеспечения» в разделе «Библиотека». Вы можете использовать «Показать в Finder» на них, чтобы показать их местоположение на диске.

person Bobjt    schedule 14.02.2013
comment
Было сложно начать тестирование, но я написал сценарий, который использует .ipa, вытаскивает имя профиля подготовки и проверяет дату истечения срока действия, поэтому я смогу автоматизировать это для более быстрого тестирования. Так что для меня ... это будет лучшим решением. - person DBD; 15.02.2013
comment
Эта командная строка дает вывод: безопасность: не удалось добавить данные в декодер: НЕИЗВЕСТНО (-8183 (d) Ошибка шины: 10 - person Adam; 20.01.2014
comment
Адам - ​​убедитесь, что вы декодируете embedded.mobileprovision, а не сам ipa. - person BuvinJ; 23.02.2015
comment
Дополнительно: как вы видите UDID профиля подготовки на портале разработчика? - person Robert Atkins; 24.11.2015
comment
Как это узнать, какой сертификат использовался? Все, что я здесь вижу, это как определить профиль обеспечения. - person Logicsaurus Rex; 28.02.2016
comment
Существует несколько способов определения сертификата, связанного с профилем. Использование codesign -dvvv {path_to_the_app} перечисляет общее имя сертификата подписи в качестве центра. - person Bobjt; 28.02.2016

Поздно на вечеринку ....

Но этот инструмент позволяет мне сэкономить время: nomad / shenzhen

$ ipa info /path/to/app.ipa

+-----------------------------+----------------------------------------------------------+
| ApplicationIdentifierPrefix | DJ73OPSO53                                               |
| CreationDate                | 2014-03-26T02:53:00+00:00                                |
| Entitlements                | application-identifier: DJ73OPSO53.com.nomad.shenzhen    |
|                             | aps-environment: production                              |
|                             | get-task-allow: false                                    |
|                             | keychain-access-groups: ["DJ73OPSO53.*"]                 |
| CreationDate                | 2017-03-26T02:53:00+00:00                                |
| Name                        | Shenzhen                                                 |
| TeamIdentifier              | S6ZYP4L6TY                                               |
| TimeToLive                  | 172                                                      |
| UUID                        | P7602NR3-4D34-441N-B6C9-R79395PN1OO3                     |
| Version                     | 1                                                        |
+-----------------------------+----------------------------------------------------------+

2020: обновление от сопровождающего

https://github.com/nomad/shenzhen/blob/master/README.md

Примечание: shenzhen использует API сборки Xcode 6, который устарел уже почти 3 года. Это вызывает проблемы, если ваше приложение использует Swift 3, watchOS и другие приложения.

Поддерживаемая альтернатива для создания ваших приложений для iOS - тренажерный зал, в котором используется последняя версия Xcode API. Для распространения сборок можно использовать fastlane. Дополнительные сведения о том, как начать работу, можно найти в руководстве по развертыванию бета-версии iOS.

person maersu    schedule 19.03.2015
comment
Похоже, что инструмент устарел уже несколько лет. - person Martin O'Shea; 01.06.2019

Основываясь на ответе Bobjt, я использовал IPCU, чтобы получить подробную информацию о профиле:

  1. Переименуйте ваш .ipa в .zip
  2. Распакуйте его с помощью Finder
  3. Найдите файл .app в / Payload.
  4. «Показать содержимое пакета» в файле .app и найти профиль обеспечения с именем embedded.mobileprovision.

  5. Перетащите файл mobileprovisioning в Утилиту настройки iPhone.

IPCU показывает имя / дату истечения срока действия профиля и т. Д.

person HaemEternal    schedule 21.08.2013
comment
Если не ошибаюсь, этот инструмент не работает с iOS ›= 8 - person gnichola; 22.12.2015
comment
@gnichola, вам не нужно подключать iPad / iPhone, чтобы выполнить эти шаги, поэтому версия iOS не должна иметь значения. - person HaemEternal; 04.01.2016
comment
Думаю, мой комментарий мог бы быть более ясным, если бы у вас был инструмент, который вы могли бы использовать, моя проблема заключалась в том, что, поскольку инструмент был для более старой версии ОС, он больше не доступен, или, по крайней мере, когда я искал его, я не мог найти. - person gnichola; 04.01.2016
comment
Вы по-прежнему можете загрузить и установить его на El Capitan, хотя вам придется загружать его из Интернета (а не из магазина приложений). Кроме того, вы можете открыть профиль в TextEdit и проверить такие ключи, как ExpirationDate и Name. - person HaemEternal; 04.01.2016

В итоге я использовал смесь предложений решений Bobjt и HaemEternal.

  1. Найдите архив.
  2. Показать содержимое пакета.
  3. Скопируйте файл .app
  4. Показать содержимое пакета файла .app.
  5. Скопируйте файл embedded.mobileprovision.
  6. Запустите "security cms -D -i (path_to_your_provisioning_profile)"
  7. Найдите номер UUID в результате вызова на шаге 6.
  8. Откройте служебную программу настройки Iphone и просмотрите профили, чтобы найти тот, который имеет такой же номер UUID.
person Lasse    schedule 26.03.2014

Мне удалось успешно протестировать, используя следующий процесс.

  1. Установите на устройство оригинальный .ipa.
  2. Перейдите в Настройки-> Общие-> Профили (см. Старый профиль обеспечения).
  3. Удалить приложение и старый профиль с устройства
  4. Уйти в отставку.
  5. Установить повторно подписанное приложение на устройство
  6. Перейдите в Настройки-> Общие-> Профили (см. Новый профиль обеспечения).

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

(но я все еще хочу найти лучший способ)

person DBD    schedule 14.02.2013

Если вы пытаетесь определить, использовался ли конкретный сертификат для подписи .ipa, вы можете сделать следующее:

Если вам комфортно работать с python, вы можете использовать этот сценарий, который я создал, чтобы сравнить сертификаты, встроенные в .ipa, с тем, что у вас есть.

https://gist.github.com/ronsims2/1b7a8b9e15898f9406788988106b2f9406788988106b2f

python ipa_cert_checker.py /Users/janedoe/Dcouments/Foobar.ipa /Users/janedoe/Dcouments/barfoo.cer

Кроме того, вы можете сделать то, что делает сценарий, вручную из командной строки вашего Mac.

  1. Распаковать архив IPA. Будет создана папка с названием «Payload».

    unzip Foobar.ipa

  2. Прочтите информацию о встроенной инициализации. Обратите внимание, что пакет / папка внутри каталога Payload называется так же, как .ipa, за исключением расширения .app.

    security cms -Di Payload/Foobar.app/embedded.mobileprovision

В выходных данных вышеуказанной команды сертификат (ы) встроены в элементы данных массива, связанные с ключом «DeveloperCertificates» в виде строки base64. 3. Скопируйте сертификат (ы) (не включайте теги xml и убедитесь, что нет лишних пробелов) и сохраните их в удобном месте в виде текста. В этом примере я назову его "cert_from_foobar.txt".

  1. Base64 кодирует известный сертификат и сохраняет результат в файл.

    base64 barfoo.cer > barfoo.txt

  2. Сравните известный сертификат со встроенными, которые вы сохранили. cmp cert_from_foobar.txt barfoo.txt || echo 'These files are NOT the same.'

Если они совпадают, вы не увидите ни одного сообщения.

person Ron Sims II    schedule 19.03.2019