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

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

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

моя проблема в том, что когда я пытаюсь уйти в отставку, приложение не будет установлено на моем устройстве (и это должно быть, так как это корпоративная сборка). Сообщение об ошибке на устройстве (не в 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?

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

  • распаковать приложение.ИПА
  • appname=$(полезная нагрузка ls)
  • xcrun-sdk iphoneos PackageApplication-s "$provisioning_profile" "$project_dir/полезная нагрузка/$appname "- o " $project_dir/app-ушел в отставку.ipa "--знак "$provisioning_profile "--вставить "$mobileprovision"

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

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

8 ответов


наконец-то это работает!

протестировано с IPA, подписанным cert1 для отправки в app store без устройств, добавленных в профиль подготовки. Результаты нового 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

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


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

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

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

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

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

заменить профиль подготовки и подать в отставку App

если вы работаете с .ИПА файл, сначала распакуйте приложение (если у вас есть .app вместо, вы можете пропустить этот шаг).

$ 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.ipa) и ваша отставная версия (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).ИПА

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

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

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

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

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

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


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

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

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


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


Если у вас есть приложение с расширениями и/или приложение watch, и у вас есть несколько профилей подготовки для каждого расширения/приложения 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.

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