it-roy-ru.com

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

В настоящее время я создаю все свои приложения с помощью hudson, используя xcodebuild, за которым следует xcrun без каких-либо проблем.

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

Моя проблема в том, что когда я пытаюсь перезапустить приложение, оно не будет установлено на моем устройстве (и должно быть, так как это сборка Enterprise). Сообщение об ошибке на устройстве (не в iTunes), и оно просто говорит мне, что не может установить приложение. Больше информации не дается.

Я нашел некоторую информацию, ( http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode- организатор для загрузки / )

И это может быть возможно. Проблема, с которой я сталкиваюсь, заключается в том, что, похоже, он не внедряет профиль обеспечения мобильной связи, как я это делаю с моими обычными сборками (с использованием xcrun), это можно контролировать с помощью инструмента CoSignSign или можно переподписать с помощью xcrun ?

С моим отставным сценарием я сейчас делаю

  • распаковать app.ipa
  • appname = $ (ls Payload)
  • xcrun -sdk iphoneos PackageApplication -s "$ provisioning_profile" "$ project_dir/Payload/$ appname" -o "$ project_dir/app-resigned.ipa" --sign "$ provisioning_profile" --включить "$ mobileprovision"

Я посмотрел в итоговом файле ipa, и он, похоже, очень похож на оригинальное приложение. Какие файлы должны действительно изменить здесь? Сначала я думал, что _CodeSignature/CodeResources изменится, но содержимое выглядит примерно так же.

Указатели очень ценятся.

125
Erik

Наконец-то все заработало!

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

Решение:

Разархивируйте IPA

unzip Application.ipa

Удалить старую CodeSignature

rm -r "Payload/Application.app/_CodeSignature" "Payload/Application.app/CodeResources" 2> /dev/null | true

Заменить встроенный мобильный профиль обеспечения

cp "MyEnterprise.mobileprovision" "Payload/Application.app/embedded.mobileprovision"

Уходить в отставку

/usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"

Переупаковать

Zip -qr "Application.resigned.ipa" Payload

Правка: Удалена часть Прав (см. Комментарий к переулкам, спасибо)

208
Erik

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

----- Как отказаться от приложения iOS -----

Допустим, вы получили приложение (например, MyApp.ipa) от другого разработчика и хотите иметь возможность установить и запустить его на своих устройствах (с помощью ideviceinstaller , например).

Подготовьте новые подписывающие активы

Первым шагом является получение профиля обеспечения , который включает в себя все устройства, на которых вы хотите установить и запустить. Убедитесь, что профиль содержит сертификат, который вы установили в своем доступе к цепочке ключей (например, iPhone Developer: Some Body (XXXXXXXXXX)). Загрузите профиль (MyProfile.mobileprovision), чтобы заменить профиль, встроенный в приложение.

Далее мы собираемся подготовить файл разрешений для включения в подпись. Откройте свой терминал и запустите следующее.

$ security cms -D -i path/to/MyProfile.mobileprovision > provision.plist

Это создаст XML-файл, описывающий ваш профиль обеспечения . Далее мы хотим извлечь права в файл.

$ /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' provision.plist > entitlements.plist

Заменить профиль обеспечения и уйти в отставку

Если вы работаете с файлом . Ipa , сначала разархивируйте приложение (если у вас есть . App вместо этого вы можете пропустить этот шаг).

$ unzip MyApp.ipa

Ваш рабочий каталог теперь будет содержать Payload/ и Payload/MyApp.app/. Затем удалите старые файлы подписи кода.

$ rm -rf Payload/MyApp.app/_CodeSignature

Замените существующий профиль обеспечения (т. Е. Embedded.mobileprovision) своим собственным.

$ cp path/to/MyProfile.mobileprovision Payload/MyApp.app/embedded.mobileprovision

Теперь подпишите приложение с помощью сертификата, включенного в ваш профиль обеспечения и созданный ранее файл rightlements.plist.

$ /usr/bin/codesign -f -s "iPhone Developer: Some Body (XXXXXXXXXX)" --entitlements entitlements.plist Payload/MyApp.app

ВАЖНО: Вы также должны отказаться от всех платформ, включенных в приложение. Вы найдете их в Payload/MyApp.app/Frameworks. Если приложение написано в Swift или если оно включает какие-либо дополнительные интегрированные среды, они должны быть отклонены, иначе приложение будет установлено, но не запущено.

$ /usr/bin/codesign -f -s "iPhone Developer: Some Body (XXXXXXXXXX)" --entitlements entitlements.plist Payload/MyApp.app/Frameworks/*

Теперь вы можете разархивировать приложение.

$ Zip -qr MyApp-resigned.ipa Payload

Готово

Теперь вы можете удалить каталог Payload, поскольку у вас есть исходное приложение (MyApp.ipa) и ваша отказавшаяся версия (MyApp-resigned.ipa). Теперь вы можете установить MyApp-resigned.ipa на любое устройство, включенное в ваш профиль обеспечения.

35
grez

Я успешно последовал этому ответу, но так как права изменились, я просто удалил часть --entitlements "Payload/Application.app/Entitlements.plist" из второго до последнего оператора, и это сработало как талисман.

11
alleus

Проверено с Mac OS High Sierra и Xcode 10

Вы можете просто реализовать то же самое, используя приложение iResign .

Дайте путь 1) .ipa

2) Новый профиль обеспечения

3) Файл прав (Необязательно, добавляйте только если у вас есть права)

4) Идентификатор пакета

5) Сертификат распространения

Вы можете увидеть выходной файл .ipa, сохраненный после повторной подписи

Простой и мощный инструмент

4
Saranjith

Ни один из этих уходящих в отставку подходов не работал для меня, поэтому я должен был выработать что-то еще.

В моем случае у меня был IPA с просроченным сертификатом. Я мог бы перестроить приложение, но, поскольку мы хотели убедиться, что мы распространяем точно такую ​​же версию (только с новым сертификатом), мы не хотели перестраивать его.

Вместо способов отставки, упомянутых в других ответах, я обратился к методу Xcode по созданию IPA, который начинается с .xcarchive из сборки.

  1. Я продублировал существующий .xcarchive и начал заменять содержимое. (Я проигнорировал файл .dSYM.)

  2. Я извлек старое приложение из старого файла IPA (через разархивирование; приложение - единственная вещь в папке Payload)

  3. Я переместил это приложение в новый .xcarchive, под Products/Applications, заменив приложение, которое было там.

  4. Я редактировал Info.plist, редактирование

    • ApplicationProperties/ApplicationPath
    • ApplicationProperties/CFBundleIdentifier
    • ApplicationProperties/CFBundleShortVersionString
    • ApplicationProperties/CFBundleVersion
    • Name
  5. Я переместил .xcarchive в архивную папку Xcode, обычно /Users/xxxx/Library/Developer/Xcode/Archives.

  6. В Xcode я открыл окно Organizer, выбрал этот новый архив и выполнил обычный (в данном случае Enterprise) экспорт.

Результатом стал хороший IPA, который работает.

3
Gary Makin

С опцией отставки Fastlane Sigh вы можете сделать это очень легко.

sigh resign -p <path-to-profile-with-mobileprovision-ext> -i <code-sighning-identity-of-your-app>

Вы также можете загрузить профиль с помощью команды sigh, непосредственно перед командой.

1
Vineeth

Спасибо, Эрик, за публикацию этого. Это сработало для меня. Я хотел бы добавить примечание о дополнительном шаге, в котором я нуждался. В "Payload/Application.app /" находился каталог с именем "CACertChains", который содержал файл с именем "cacert.pem". Мне пришлось удалить каталог и .pem, чтобы выполнить эти шаги. Еще раз спасибо! -

0
William Power

Я думаю, что проще всего использовать Fastlane:

Sudo gem install fastlane -NV
hash -r # for bash
rehash # for zsh
fastlane sigh resign ./path/app.ipa --signing_identity "iPhone Distribution: Felix Krause" -p "my.mobileprovision"
0
Marián Černý