Повторно подписать 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 ответов:
наконец-то получил эту работу!
протестировано с 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 из сборки.
я продублировал существующую .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).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.
вот пример использования этого скрипта:
./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.
для меня-вся подготовка профили были подписаны одним и тем же удостоверением сертификата/подписи.