Имя профиля обеспечения, используемого для подписи приложения iPhone?

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

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

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

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

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


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

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

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

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

I looked into using codesign, and the command

/usr/bin/codesign -d -vvv --entitlements - -r - /Users/lv/Desktop/TicTacBoo.app/TicTacBoo
looked promising, but it doesn't give me the information I need.
I haven't found any useful option in xcodebuild either.


person Guillaume    schedule 24.02.2010    source источник


Ответы (3)


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

Он называется YourApplication.app/embedded.mobileprovision

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

person Jon-Eric    schedule 04.03.2010
comment
Блестяще! И имя файла сохраняется в файле под ключом Имя - person Guillaume; 04.03.2010
comment
Вот быстрый и хитрый способ получить имя файла: strings path_to_embedded_file.mobileprovision | grep -A1 '‹key› Имя ‹/key›' | хвост -n1 | awk -F '‹string›' '{print $ 2}' | awk -F '‹/string›' '{печать $ 1}' - person Guillaume; 04.03.2010

Вы можете использовать команду «безопасность» из терминала; к сожалению, по крайней мере, на моем 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.

person Massimo Cafaro    schedule 04.03.2010
comment
Три команды отлично работают на моем компьютере (Mac OS X 10.6.2 - установлены SDK 3.1.3 и 3.2 beta 3). Нет segfault. Я понял, что не очень ясно выразился, но моя конечная цель - получить файл профиля Provisionning Profile (или имя файла). Я отредактировал вопрос. - person Guillaume; 04.03.2010
comment
Извините, на самом деле я отвечал на строго связанный вопрос, как получить фактический сертификат, используемый для подписи приложения, а не профиль обеспечения! - person Massimo Cafaro; 04.03.2010

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

Вот способ сделать это, используя значения по умолчанию (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")

person David Gelhar    schedule 04.03.2010
comment
Интересный. Я получаю только 1 запись, которая выглядит так: embedded.mobileprovision = ‹d31e7825 222e71c0 83188040 37e4eec8 8b599d17›; Но как сопоставить эту строку с именем профиля обеспечения? - person Guillaume; 04.03.2010