Как переподписать файл ipa?
Как подписать файл.ipa профилем обеспечения после создания IPA, подобного следующему, с другим профилем обеспечения? Я хотел бы подписать IPA с помощью специального профиля обеспечения для бета-тестирования, а затем заново подписать точный IPA с помощью профиля обеспечения отправки приложений для магазина приложений.
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${RELEASE_BUILDDIR}/${APPLICATION_NAME}.app" -o "${BUILD_HISTORY_DIR}/${APPLICATION_NAME}.ipa" --sign "${DEVELOPER_NAME}" --embed "${PROVISONING_PROFILE}"
11 ответов
Это действительно легко сделать из командной строки. У меня был суть сценария для этого. Теперь он включен в скрипт ipa_sign в https://github.com/RichardBronosky/ota-tools который я использую ежедневно. Если у вас есть какие-либо вопросы об использовании этих инструментов, не стесняйтесь спрашивать.
Сердце этого таково:
IPA="/path/to/file.ipa"
PROVISION="/path/to/file.mobileprovision"
CERTIFICATE="Name of certificate: To sign with" # must be in keychain
# unzip the ipa
unzip -q "$IPA"
# remove the signature
rm -rf Payload/*.app/_CodeSignature
# replace the provision
cp "$PROVISION" Payload/*.app/embedded.mobileprovision
# sign with the new certificate (--resource-rules has been deprecated OS X Yosemite (10.10), it can safely be removed)
/usr/bin/codesign -f -s "$CERTIFICATE" --resource-rules Payload/*.app/ResourceRules.plist Payload/*.app
# zip it back up
zip -qr resigned.ipa Payload
Ваше новое подписанное приложение называется resigned.ipa
Проверьте iResign для простого инструмента о том, как это сделать!
[править] после некоторого недоразумения я нашел решение отставки с учетом цепочки для ключей. Вы можете проверить это на https://gist.github.com/Weptun/5406993
Ответы, размещенные здесь, не совсем сработали для меня. В основном они пропускали подпись встроенных фреймворков (или включая права).
Вот что сработало для меня (предполагается, что один файл ipa существует в текущем каталоге):
PROVISION="/path/to/file.mobileprovision"
CERTIFICATE="Name of certificate: To sign with" # must be in the keychain
unzip -q *.ipa
rm -rf Payload/*.app/_CodeSignature/
# Replace embedded provisioning profile
cp "$PROVISION" Payload/*.app/embedded.mobileprovision
# Extract entitlements from app
codesign -d --entitlements :entitlements.plist Payload/*.app/
# Re-sign embedded frameworks
codesign -f -s "$CERTIFICATE" --entitlements entitlements.plist Payload/*.app/Frameworks/*
# Re-sign the app (with entitlements)
codesign -f -s "$CERTIFICATE" --entitlements entitlements.plist Payload/*.app/
zip -qr resigned.ipa Payload
# Cleanup
rm entitlements.plist
rm -r Payload/
Вид старого вопроса, но с последним XCode, codesign
это просто:
$ codesign -s my_certificate example.ipa
$ codesign -vv example.ipa
example.ipa: valid on disk
example.ipa: satisfies its Designated Requirement
Вздох Fastlane обеспечивает довольно надежное решение для отставки IPA.
Из их README:
Уходить в отставку
Если вы создали свой
ipa
файл, но хотите применить другую подпись кода на файл IPA, вы можете использоватьsigh resign
:
fastlane sigh resign
sigh
найдет для вас файл ipa и профиль обеспечения, если они находятся в текущей папке.Вы можете передать больше информации, используя командную строку:
fastlane sigh resign ./path/app.ipa --signing_identity "iPhone Distribution: Felix Krause" -p "my.mobileprovision"
Он даже будет обрабатывать профили обеспечения для вложенных приложений (например, если у вас есть приложения watchkit)
Я обновил код Брайана для моего Sierra iMac:
# this version was tested OK vith macOs Sierra 10.12.5 (16F73) on oct 0th, 2017
# original ipa file must be store in current working directory
IPA="ipa-filename.ipa"
PROVISION="path-to.mobileprovision"
CERTIFICATE="hexadecimal-certificate-identifier" # must be in keychain
# identifier maybe retrieved by running: security find-identity -v -p codesigning
# unzip the ipa
unzip -q "$IPA"
# remove the signature
rm -rf Payload/*.app/_CodeSignature
# replace the provision
cp "$PROVISION" Payload/*.app/embedded.mobileprovision
# generate entitlements for current app
cd Payload/
codesign -d --entitlements - *.app > entitlements.plist
cd ..
mv Payload/entitlements.plist entitlements.plist
# sign with the new certificate and entitlements
/usr/bin/codesign -f -s "$CERTIFICATE" '--entitlements' 'entitlements.plist' Payload/*.app
# zip it back up
zip -qr resigned.ipa Payload
- Разархивируйте файл.ipa, изменив его расширение на.zip
- Перейти к полезной нагрузке. Вы найдете файл.app
- Щелкните правой кнопкой мыши файл.app и выберите Показать содержимое пакета.
- Удалить
_CodeSigned
папка - Заменить
embedded.mobileprovision
файл с новым профилем предоставления - Перейдите в KeyChain Access и убедитесь, что сертификат, связанный с предварительным профилем, присутствует.
Выполните указанную ниже команду:
/usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"
Теперь снова заархивируйте папку Payload и измените расширение.zip с помощью.ipa
Надеюсь, что это полезно.
Для справки перейдите по указанной ниже ссылке: http://www.modelmetrics.com/tomgersic/codesign-re-signing-an-ipa-between-apple-accounts/
Попробуйте это приложение http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for-upload/
Это должно помочь вам подать в отставку файл IPA. Я попробовал это сам, но не смог передать ошибку с Entitlements.plist. Может быть просто проблема с моим проектом. Вы должны попробовать.
Я использую https://github.com/xndrs/XReSign, и он работает очень хорошо.
Проверьте эту ссылку ниже, вы можете оставить свое имя приложения, версию, идентификатор пакета, а также значки приложений.
Вам следует попробовать это новое приложение OSX: AirSign.
Это поможет вам оставить свой IPA и поделиться им по беспроводной сети с вашими бета-тестерами. Если вы решите переподписать его вручную, особенно если вы измените Bundle Id приложения, вы должны быть осторожны с правами приложения (в некоторых случаях это может быть сложно...).
С Уважением,
Ромен