Повторно подписать 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 из сборки.
я дублировал существующий .xcarchive и начал заменять содержимое. (Я проигнорировал .dSYM файл.)
я извлек старое приложение из старого файла IPA (через распаковку; приложение является единственным в папке полезной нагрузки)
я переместил это приложение в новое .xcarchive ПО, под
Products/Applications
замена приложения, которое было там.-
я отредактировал
Info.plist
, редактированиеApplicationProperties/ApplicationPath
ApplicationProperties/CFBundleIdentifier
ApplicationProperties/CFBundleShortVersionString
ApplicationProperties/CFBundleVersion
Name
я переехал .xcarchive в папку архива Xcode, обычно
/Users/xxxx/Library/Developer/Xcode/Archives
.в 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.
для меня-вся подготовка профили были подписаны тем же сертификатом / идентификатором подписи.