В настоящее время я без проблем создаю все свои приложения с помощью hudson, используя xcodebuild, за которым следует xcrun
Я получил несколько файлов IPA от разных людей, которые я хотел бы повторно подписать с корпоративной учетной записью вместо корпоративной учетной записи (для магазина приложений или иногда для специальной рассылки).
Моя проблема в том, что когда я пытаюсь отказаться от приложения, оно не устанавливается на моем устройстве (и должно, поскольку это сборка Enterprise). Сообщение об ошибке находится на устройстве (не в iTunes) и просто говорит мне, что оно не может установить приложение. Больше информации не дается.
Я нашел некоторую информацию ( http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for- загрузить / )
И это могло быть возможно. Проблема, с которой я сталкиваюсь, заключается в том, что он, похоже, не встраивает профиль мобильной подготовки, как я делаю с моими обычными сборками (с использованием xcrun), можно ли это контролировать с помощью инструмента codeign или можно повторно подписать с помощью 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" --embed "$ mobileprovision"
Я просмотрел полученный файл ipa, и он кажется очень похожим на исходное приложение. Какие файлы здесь действительно нужно менять? Сначала я думал, что _CodeSignature / CodeResources изменится, но содержимое выглядит примерно так же.
Указатели очень ценятся.
/usr/bin/codesign -d --entitlements :entitlements.plist /Payload/appname.app
Затем во время отставки добавить--entitlements entitlements.plist
Ответы на этот вопрос немного устарели и в них отсутствуют потенциально ключевые шаги, поэтому это обновленное руководство по установке приложения от внешнего разработчика.
----- Как отказаться от приложения для iOS -----
Предположим, вы получили приложение (например, MyApp.ipa) от другого разработчика и хотите установить и запустить его на своих устройствах (например, с помощью ideviceinstaller ).
Подготовьте новые активы для подписи
Первый шаг - получить профиль обеспечения, который включает все устройства, которые вы хотите установить и использовать. Убедитесь, что профиль содержит сертификат, который вы установили в системе Keychain Access (например, iPhone Developer: Some Body (XXXXXXXXXX)). Загрузите профиль (MyProfile.mobileprovision), чтобы вы могли заменить профиль, встроенный в приложение.
Затем мы собираемся подготовить файл прав для включения в подписание. Откройте свой терминал и запустите следующее.
Это создаст XML-файл, описывающий ваш профиль обеспечения . Затем мы хотим извлечь права в файл.
Заменить профиль подготовки и уйти из приложения
Если вы работаете с файлом .ipa , сначала распакуйте приложение (если вместо этого у вас есть .app , этот шаг можно пропустить).
Теперь ваш рабочий каталог будет содержать
Payload/
иPayload/MyApp.app/
. Затем удалите старые файлы подписи кода.Замените существующий профиль обеспечения (например, embedded.mobileprovision) своим собственным.
Теперь подпишите приложение с помощью сертификата, включенного в ваш профиль обеспечения, и файла grantlements.plist, который вы создали ранее.
ВАЖНО: вы также должны отказаться от всех фреймворков, включенных в приложение . Вы найдете их в
Payload/MyApp.app/Frameworks
. Если приложение написано на Swift или включает какие-либо дополнительные фреймворки, они должны быть уволены, иначе приложение установится, но не запустится.Теперь вы можете повторно заархивировать приложение.
Готово
Теперь вы можете удалить
Payload
каталог, так как у вас есть исходное приложение (MyApp.ipa) и оставленная версия (MyApp-resigned.ipa). Теперь вы можете установить MyApp-resigned.ipa на любое устройство, включенное в ваш профиль подготовки.источник
Я успешно выполнил этот ответ, но, поскольку права изменились, я просто удалил
--entitlements "Payload/Application.app/Entitlements.plist"
часть предпоследнего оператора, и это сработало как шарм.источник
SecItemCopyMatching: missing entitlement
. Я не отдельный Entitlements.plist файл, поэтому для сохранения пособий , которые я использовал @ комментарий LordT в : сначала создать файл причитающихся сумм:echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>/usr/bin/codesign -d --entitlements - temp/Payload/$APP_NAME | sed -E -e '1d'" > temp/newEntitlements
, а затем использовать его при подписании:--entitlements temp/newEntitlements
.Проверено с Mac OS High Sierra и Xcode 10
Вы можете просто реализовать то же самое с помощью приложения iResign .
Укажите путь 1) .ipa
2) Новый профиль обеспечения
3) Файл с правами (необязательно, добавьте, только если у вас есть права)
4) Идентификатор пакета
5) Сертификат распространения
Вы можете увидеть выходной файл .ipa, сохраненный после повторной подписи
Простой и мощный инструмент
источник
Ни один из этих подходов к отставке не помог мне, поэтому мне пришлось придумать что-то другое.
В моем случае у меня был IPA с просроченным сертификатом. Я мог бы перестроить приложение, но поскольку мы хотели убедиться, что распространяем точно такую же версию (только с новым сертификатом), мы не хотели перестраивать его.
Вместо способов увольнения, упомянутых в других ответах, я обратился к методу Xcode для создания IPA, который начинается с .xcarchive из сборки.
Я продублировал существующий .xcarchive и начал заменять его содержимое. (Я проигнорировал файл .dSYM.)
Я извлек старое приложение из старого файла IPA (распаковав; приложение - единственное, что находится в папке Payload)
Я переместил это приложение в новый .xcarchive,
Products/Applications
заменив приложение, которое там было.Я редактировал
Info.plist
, редактируюApplicationProperties/ApplicationPath
ApplicationProperties/CFBundleIdentifier
ApplicationProperties/CFBundleShortVersionString
ApplicationProperties/CFBundleVersion
Name
Обычно я перемещал .xcarchive в папку архива Xcode
/Users/xxxx/Library/Developer/Xcode/Archives
.В Xcode я открыл окно Организатора, выбрал этот новый архив и выполнил обычный (в данном случае Enterprise) экспорт.
В результате получился хороший IPA, который работает.
источник
Думаю, проще всего использовать Fastlane:
источник
С опцией отставки Fastlane sigh это можно сделать очень легко.
Вы также можете загрузить профиль, используя вздох, непосредственно перед командой.
источник
Спасибо, Эрик, за публикацию этого сообщения. Это сработало для меня. Я хотел бы добавить примечание о необходимом мне дополнительном шаге. В «Payload / Application.app /» был каталог с именем « CACertChains », в котором находился файл с именем « cacert.pem ». Мне пришлось удалить каталог и .pem, чтобы выполнить эти шаги. Еще раз спасибо! -
источник
Если у вас есть приложение с расширениями и / или приложение для часов и у вас есть несколько профилей подготовки для каждого приложения расширения / просмотра, вам следует использовать этот скрипт для повторной подписи файла ipa.
Повторная подпись скрипта на Github
Вот пример того, как использовать этот скрипт:
Вы также можете включить другие профили подготовки расширений, добавив их с помощью еще одной опции -p.
Для меня - все профили обеспечения были подписаны одним и тем же удостоверением сертификата / подписи.
источник
fastlane sigh resign YourApp.ipa --signing_identity "iPhone Distribution: YourCompanyOrDeveloperName" -p <path_to_provisioning_profile_for_app>.mobileprovision -p <path_to_provisioning_profile_for_watchkitextension>.mobileprovision
Вместо этого используйте .