Как переподписать файл ipa? - PullRequest
100 голосов
/ 02 марта 2011

Как мне подписать файл .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}"

Ответы [ 9 ]

188 голосов
/ 06 июня 2012

Это действительно легко сделать из командной строки. У меня был смысл сценария для этого. Теперь он включен в скрипт 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

35 голосов
/ 02 января 2012

Проверьте iResign для простого инструмента, как это сделать!

[править] после некоторого недоразумения я нашел решение отставки с учетом цепочки для ключей.Вы можете проверить это в https://gist.github.com/Weptun/5406993

13 голосов
/ 07 мая 2013

Вроде старого вопроса, но с последним XCode codesign легко:

$ codesign -s my_certificate example.ipa 

$ codesign -vv example.ipa
example.ipa: valid on disk
example.ipa: satisfies its Designated Requirement
7 голосов
/ 11 октября 2017

Я обновил код Брайана для моего 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
6 голосов
/ 17 мая 2018

Ответы, размещенные здесь, не совсем сработали. В основном они пропускали подписывание встроенных платформ (или включая права).

Вот что сработало для меня (предполагается, что один файл 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/
5 голосов
/ 28 августа 2017

Fastlane sigh предоставляет довольно надежное решение для отказа от 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)

5 голосов
/ 11 сентября 2015
  1. Разархивируйте файл .ipa, изменив его расширение на .zip
  2. Перейдите в раздел «Полезная нагрузка».Вы найдете файл .app
  3. Щелкните правой кнопкой мыши файл .app и выберите Показать содержимое пакета
  4. Удалите папку _CodeSigned
  5. Замените файл embedded.mobileprovision новымпрофиль обеспечения
  6. Перейдите в KeyChain Access и убедитесь, что сертификат, связанный с предварительным профилем, присутствует
  7. Выполните указанную ниже команду: /usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"

  8. Теперь снова заархивируйте папку Payload и измените расширение .zip с помощью .ipa

Надеюсь, что это полезно.

Для справки перейдите по нижеуказанной ссылке: http://www.modelmetrics.com/tomgersic/codesign-re-signing-an-ipa-between-apple-accounts/

1 голос
/ 25 апреля 2011

Попробуйте это приложение http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for-upload/

Это должно помочь вам отказаться от файла IPA. Я попробовал это сам, но не смог передать ошибку с Entitlements.plist. Может быть просто проблема с моим проектом. Вы должны попробовать.

0 голосов
/ 05 августа 2014

Вам следует попробовать это новое приложение для OSX: AirSign .

. Это поможет вам отказаться от IPA и поделиться им напрямую с вашими бета-тестерами.Если вы решите переподписать его вручную, особенно если вы измените идентификатор комплекта приложения, вам действительно следует быть осторожным с правами приложения (в некоторых случаях это может быть сложно ...).

С уважением,

Ромен

...