Имя профиля обеспечения, используемого для подписи приложения iPhone? - PullRequest
4 голосов
/ 24 февраля 2010

Я написал скрипт, который использует xcodebuild для генерации AdHoc-сборки приложения для iPhone.

Я хотел бы отредактировать этот скрипт, чтобы вывести имя профиля обеспечения , используемого для подписи сборки.
Это позволило бы мне включить профиль обеспечения в zip, который генерируется автоматически. Таким образом, я мог бы автоматически отправить архив тестерам AdHoc и убедиться, что у них есть правильный профиль обеспечения для установки приложения.

Есть ли способ извлечь имя или файл профиля обеспечения, используемый для подписи приложения :

  • из построенного и подписанного приложения
  • из проекта Xcode (я не хочу анализировать файл project.pbxproj вручную, так как это решение может сломаться при следующем обновлении Xcode)
  • любой другой способ, который можно использовать в сценариях

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


Вот что я попробовал:

К сожалению, вывод xcodebuild во время сборки не содержит эту информацию. На этапе CodeSign есть строка:

/usr/bin/codesign -f -s "iPhone Distribution: My name" ...

но я не могу сопоставить это с сертификатом.

Я изучил использование кодового знака, и команда

/usr/bin/codesign -d -vvv --entitlements - -r - /Users/lv/Desktop/TicTacBoo.app/TicTacBoo
выглядела многообещающе, но она не дает мне нужную информацию.
Я не нашел ни одной полезной опции в xcodebuild.

Ответы [ 3 ]

6 голосов
/ 04 марта 2010

Профиль обеспечения уже в приложении. Вам не нужна еще одна копия в вашем zip-файле (если ваши тестировщики не понимают, как использовать копию внутри приложения.)

Он назван YourApplication.app/embedded.mobileprovision

Это не отвечает на ваш вопрос, потому что оригинальное имя файла потеряно, однако, похоже, оно решает вашу большую проблему.

2 голосов
/ 04 марта 2010

Вы можете использовать команду «security» из терминала; к сожалению, по крайней мере на моем MBP с Snow Leopard это вызывает ошибку сегментации в одной из команд, которые вам нужно выполнить. Для получения дополнительной информации, выдача из терминала

man security

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

security unlock-keychain login.keychain;
security find-certificate -a -c "iPhone Distribution: Your name"  -p > cert.pem;

Вторая команда вызывает ошибку сегментации (вызванную аргументом -c), но это должно быть именно то, что вам нужно. Кроме того, вы можете использовать

security find-identity -p codesigning -v;

, чтобы получить список всех действительных сертификатов, которые вы можете использовать для кодовой подписи ваших приложений. Для каждого сертификата выходные данные также содержат дайджест сообщения SHA1, поэтому вы можете легко найти сертификат в цепочке для ключей, соответствующий дайджесту SHA1, связанному с «Распространением iPhone: Ваше имя». Это, однако, требует, чтобы вы написали свое собственное приложение, используя API цепочки для ключей.

Дайте мне знать, если это работает на вашем Mac или у вас возникла та же проблема с ошибкой сегментации.

РЕДАКТИРОВАНИЕ / ОБНОВЛЕНИЕ : я проверил ошибку на других машинах и подал ошибку в Apple.

0 голосов
/ 04 марта 2010

Как насчет поиска в файле plist _CodeSignature / CodeResources (встроенного приложения) для файлов типа "mobileprovision"?

Вот способ сделать это, используя defaults (1) для чтения файла plist. Вы должны скопировать файл CodeResources во что-то с суффиксом ".plist", чтобы сохранить настройки по умолчанию ...

cp /build/Distribution-iphoneos/MyApp.app/_CodeSignature/CodeResources /tmp/defaults.plist
defaults read /tmp/defaults files |grep .mobileprovision |grep -v embedded.mobileprovision

(в моем тестовом случае там было 2 записи .mobileprovision; не обращайте внимания на ту, которая называется "embedded.mobileprovision")

...