Як повторно підписати файл ipa?


107

Як підписати файл .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}"

Відповіді:


207

Це зробити дуже просто з командного рядка. У мене була суть сценарію для цього. Тепер він був включений до сценарію ipa_sign в https://github.com/RichardBronosky/ota-tools, яким я користуюся щодня. Якщо у вас є якісь питання щодо використання цих інструментів, не соромтеся задавати питання.

Основою цього є:

CODESIGN_ALLOCATE=`xcrun --find codesign_allocate`; export CODESIGN_ALLOCATE
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" Payload/*.app
# zip it back up
zip -qr resigned.ipa Payload

Ваш новий підписаний додаток називається resigned.ipa


31
7 голосів "за" і жодного питання. Я здогадуюсь, що мій тріск просто зрозумілий.
Бруно Броноський

4
Дійсно, це сер.
Rui Peres

3
@RahmathullahMPulikkal Я бачу, що я помилково прописав шлях у суть. Ви дійсно повинні використовувати github.com/RichardBronosky/ota-tools/blob/master/ipa_sign замість gist. Це підтримуваний код.
Бруно Броноський

5
Можливо, ви отримали попередження / помилку щодо параметрів -resource-норм, які застаріли в OS X Yosemite (10.10), просто видаліть цей параметр і вирішіть цю проблему.
ıɾuǝʞ

4
Одна маленька замітка: це виглядає CodeResourcesв даний час знаходиться всередині в _CodeSignatureпапці, так що вам просто потрібно видалити цю папку.
dadude999

36

Перевірте iResign на простий інструмент, як це зробити!

[редагувати] після деякого обдумування навколо, я знайшов рішення про відставку, що обізнана з брелоками. Перевірити це можна за посиланням https://gist.github.com/Weptun/5406993


чи є якийсь інструмент, який може змінити ім'я відображення разом з ідентифікатором групи під час відставки? Це допоможе мати різні імена відображення для різних середовищ. як App-Dev, App-QA, App-Stage тощо
Nishanth Nair

1
Так, floatsign.sh робить саме це.
Бліц

Працює. Просте і красиве.
Арджун Калідас

13

Вигляд старого питання, але з останньою XCode codesign:

$ codesign -s my_certificate example.ipa 

$ codesign -vv example.ipa
example.ipa: valid on disk
example.ipa: satisfies its Designated Requirement

2
@Pavel На це запитання відповіли ще коли остання версія iOS 6.x. Відтоді у нас було два основні випуски, які, очевидно, змінили багато речей. Ви можете обмежити пошукові запити на відповіді, орієнтовані на поточну технологію.
BryanH

Це працювало для мене. ви повинні замінити "my_certificate" на ім'я ключа у вашому ключовому ланцюжку.
Франциск Карсунке

2
codesignкоманда також використовується у відповіді @BrunoBronosky. Я не в змозі використовувати його безпосередньо у файлі "* .ipa", а параметри "-vv" завжди повертаються code object is not signed at allу файли, які я знаю, що вони підписані ...
Маріано Паніга

12

Відповіді, розміщені тут, усі не дуже спрацювали для мене. Вони в основному пропускали підписані вбудовані рамки (або включаючи права).

Ось що для мене працює (передбачається, що один файл 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/

Корисний коментар від поста вище (Rich): stackoverflow.com/questions/5160863 / ...
Serzas

9

Зітхання 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"

Він навіть обробляє профілі надання вкладених програм (наприклад, якщо у вас є додатки для годинника)


8

Я оновив код Брайана для свого 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

я даю наступні помилки відворотних прав.plist: нерозпізнаний тип блокування (сліпо приймаючи) відзначте права.plist: недійсна тривалість в блоці прав
Amr Angry

чи можете ви поділитися вмістом файлу права?
П’єр Пріот

Працював як шарм!
Луїс Е. Прадо

5
  1. Розпакуйте файл .ipa, змінивши його розширення на .zip
  2. Перейдіть на Payload. Ви знайдете .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-bet between-apple- accounts/


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.