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


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

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

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

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

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

с моим сценарием отставки я в настоящее время делаю

  • распаковать приложение.ipa
  • appname=$(полезная нагрузка ls)
  • xcrun -SDK для PackageApplication -с троянца iPhoneOS "$provisioning_profile" "$project_dir/грузоподъемности/$имя_приложения" -о "$project_dir/приложение-в отставку.ipa "--знак "$provisioning_profile "--вставить "$mobileprovision"

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

указатели высоко ценится.

8 125

8 ответов:

наконец-то получил эту работу!

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

устранение:

распакуйте IPA

unzip Application.ipa

удалить старый кодовый дизайн

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"

Re-package

zip -qr "Application.resigned.ipa" Payload

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

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

- - - - - как подать в отставку приложение iOS - - - - -

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

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

первый шаг заключается в достижении Профиль Подготовки которая включает в себя все устройства, которые вы хотите установить и запустить на. Убедитесь, что профиль содержит сертификат, установленный в Открыть Брелок (например, разработчик iPhone: некоторое тело (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 файл, во-первых, распакуйте приложение (если у вас есть .приложение вместо, вы можете пропустить этот шаг).

$ unzip MyApp.ipa

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

$ rm -rf Payload/MyApp.app/_CodeSignature

замените существующий профиль подготовки (т. е. встроенный.mobileprovision) с вашим собственным.

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

теперь подпишите приложение с сертификатом, включенным в ваш профиль подготовки и права.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/*

теперь вы можете rezip приложение.

$ zip -qr MyApp-resigned.ipa Payload

сделал

теперь вы можете удалить Payload каталог, так как у вас есть исходное приложение (MyApp.МПа) и подал в отставку редакции (приложение myapp-в отставку.МФА.) Теперь вы можете установите MyApp-ушел в отставку.ipa на любом устройстве, включенном в ваш профиль подготовки.

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

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

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

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

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

  2. я извлек старое приложение из старого файла IPA (через распаковку; приложение является единственным в папке полезной нагрузки)

  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 я открыл окно организатора, выбрал этот новый архив и сделал регулярный (В данном случае корпоративный) экспорт.

результат был хороший IPA, что завод.

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

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

дать путь 1).ipa

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

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

4) Bundle id

5) Распределения Сертификат

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

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

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

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

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

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

Если у вас есть приложение с расширениями и/или приложение watch, и у вас есть несколько профилей подготовки для каждого приложения extension/watch, то вы должны использовать этот скрипт для повторного подписания файла ipa.

перезапись скрипта на Github

вот пример использования этого скрипта:

./resign.sh YourApp.ipa "iPhone Distribution: YourCompanyOrDeveloperName" -p <path_to_provisioning_profile_for_app>.mobileprovision -p <path_to_provisioning_profile_for_watchkitextension>.mobileprovision -p <path_to_provisioning_profile_for_watchkitapp>.mobileprovision -p <path_to_provisioning_profile_for_todayextension>.mobileprovision  resignedYourApp.ipa

вы также можете включить другие профили подготовки расширения, добавив его с еще одной опцией-P.

для меня-вся подготовка профили были подписаны одним и тем же удостоверением сертификата/подписи.