Bagaimana cara menandatangani ulang file ipa?

107

Bagaimana cara menandatangani file .ipa dengan profil penyediaan setelah saya membuat IPA seperti berikut dengan profil penyediaan yang berbeda? Saya ingin menandatangani IPA dengan profil penyediaan ad-hoc untuk pengujian beta, lalu menandatangani ulang IPA yang tepat dengan profil penyediaan pengiriman aplikasi untuk toko aplikasi.

/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}"
Johnny
sumber
1
Kemungkinan duplikat dari Re-sign IPA (iPhone)
InnisBrendan

Jawaban:

207

Ini sangat mudah dilakukan dari baris perintah. Saya memiliki inti naskah untuk melakukan ini. Sekarang telah dimasukkan ke dalam skrip ipa_sign di https://github.com/RichardBronosky/ota-tools yang saya gunakan setiap hari. Jika Anda memiliki pertanyaan tentang penggunaan alat ini, jangan ragu untuk bertanya.

Intinya adalah ini:

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

Aplikasi baru Anda yang ditandatangani disebut resigned.ipa

Bruno Bronosky
sumber
31
7 suara dan bukan satu pertanyaan. Saya kira pesta saya begitu jelas.
Bruno Bronosky
4
Memang itu baik Pak.
Rui Peres
3
@RahmathullahMPulikkal Saya melihat saya telah secara keliru membuat kode jalan di intinya. Anda benar-benar harus menggunakan github.com/RichardBronosky/ota-tools/blob/master/ipa_sign daripada intinya. Ini kode yang dipertahankan.
Bruno Bronosky
5
Anda mungkin mendapat peringatan / kesalahan pada --resource-rules parameter, yang sudah tidak digunakan lagi di OS X Yosemite (10.10), cukup hapus parameter ini untuk menyelesaikan masalah ini.
ıɾuǝʞ
4
Satu catatan kecil: sepertinya CodeResourcessekarang berada di dalam _CodeSignaturefolder, jadi Anda hanya perlu menghapus folder itu.
dadude999
36

Lihat iResign untuk alat mudah tentang cara melakukan ini!

[Sunting] setelah beberapa bermain-main, saya menemukan solusi untuk pengunduran diri yang sadar gantungan kunci. Anda dapat memeriksanya di https://gist.github.com/Weptun/5406993

Menggempur
sumber
apakah ada alat yang dapat mengubah nama Tampilan bersama dengan ID Bundel saat mengundurkan diri? Ini akan membantu memiliki nama tampilan yang berbeda untuk lingkungan yang berbeda. seperti App-Dev, App-QA, App-Stage, dll.
Nishanth Nair
1
Ya, floatsign.sh melakukan hal itu.
Blitz
Bekerja. Sederhana dan cantik.
Arjun Kalidas
13

Jenis pertanyaan lama, tetapi dengan Xcode terbaru, codesignitu mudah:

$ codesign -s my_certificate example.ipa 

$ codesign -vv example.ipa
example.ipa: valid on disk
example.ipa: satisfies its Designated Requirement
BryanH
sumber
2
@Pavel Pertanyaan ini dijawab ketika iOS 6.x adalah versi terbaru. Sejak itu, kami memiliki dua rilis utama, yang jelas mengubah banyak hal. Anda mungkin ingin membatasi pencarian Anda pada jawaban yang menargetkan teknologi saat ini.
BryanH
Itu berhasil untuk saya. Anda harus mengganti "sertifikat_saya" dengan nama kunci di gantungan kunci Anda.
Franziskus Karsunke
2
codesignperintah juga digunakan dalam respons @BrunoBronosky. Saya tidak dapat menggunakannya secara langsung pada file "* .ipa", dan opsi "-vv" selalu dikembalikan code object is not signed at allpada file yang saya tahu ditandatangani ...
Mariano Paniga
12

Jawaban yang diposting di sini tidak cukup berhasil untuk saya. Mereka terutama melewatkan penandatanganan kerangka kerja tertanam (atau termasuk hak).

Inilah yang berhasil untuk saya (diasumsikan bahwa satu file ipa ada di direktori saat ini):

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/
simonseyer
sumber
Komentar yang berguna dari posting di atas (Kaya): stackoverflow.com/questions/5160863/…
Serzas
9

Fastlane ini mendesah menyediakan solusi yang cukup kuat untuk mengundurkan diri IPAs.

Dari README mereka:

Mengundurkan diri

Jika Anda membuat ipafile tetapi ingin menerapkan kode yang berbeda untuk masuk ke file ipa, Anda dapat menggunakan sigh resign:

fastlane sigh resign

sigh akan menemukan file ipa dan profil penyediaan untuk Anda jika mereka berada di folder saat ini.

Anda dapat menyampaikan lebih banyak informasi menggunakan baris perintah:

fastlane sigh resign ./path/app.ipa --signing_identity "iPhone Distribution: Felix Krause" -p "my.mobileprovision"

Ia bahkan akan menangani profil penyediaan untuk aplikasi bersarang (misalnya jika Anda memiliki aplikasi watchkit)

mattliu.dll
sumber
8

Saya telah memperbarui kode Bryan untuk Sierra iMac saya:

# 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
Pierre Priot
sumber
i git error entitlements.plist berikut: jenis blob tidak dikenal (menerima secara membabi buta) entitlements.plist: panjang tidak valid dalam gumpalan hak
Amr Angry
dapatkah Anda membagikan konten file hak?
Pierre Priot
Bekerja seperti pesona!
Luis E. Prado
5
  1. Buka zip file .ipa dengan mengubah ekstensinya dengan .zip
  2. Pergi ke Payload. Anda akan menemukan file .app
  3. Klik kanan file .app dan klik Tampilkan konten paket
  4. Hapus _CodeSignedfoldernya
  5. Ganti embedded.mobileprovisionfile dengan profil penyediaan baru
  6. Buka Akses KeyChain dan pastikan sertifikat yang terkait dengan profil sementara ada
  7. Jalankan perintah yang disebutkan di bawah ini: /usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"

  8. Sekarang zip folder Payload lagi dan ubah ekstensi .zip dengan .ipa

Semoga bermanfaat.

Untuk referensi, ikuti tautan yang disebutkan di bawah ini: http://www.modelmetrics.com/tomgersic/codesign-re-signing-an-ipa-between-apple-accounts/

Dharmesh Siddhpura
sumber