İpa dosyası nasıl yeniden imzalanır?


107

Aşağıdaki gibi bir IPA'yı farklı bir ön hazırlık profiliyle oluşturduktan sonra .ipa dosyasını bir ön hazırlık profiliyle nasıl imzalarım? IPA'yı beta testi için geçici bir ön hazırlık profiliyle imzalamak ve ardından tam IPA'yı uygulama mağazası için bir uygulama gönderme ön hazırlık profiliyle yeniden imzalamak istiyorum.

/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}"

Yanıtlar:


207

Komut satırından yapmak gerçekten çok kolay. Bunu yapmak için bir senaryonun özü vardı. Şimdi her gün kullandığım https://github.com/RichardBronosky/ota-tools'daki ipa_sign betiğine dahil edildi . Bu araçları kullanmakla ilgili herhangi bir sorunuz varsa, sormaktan çekinmeyin.

Kalbi şudur:

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

Yeni imzalanmış uygulamanızın adı resigned.ipa


31
7 artı oy ve tek bir soru yok. Sanırım benim bash'ım bu kadar net.
Bruno Bronosky

4
Gerçekten nazikçe efendim.
Rui Peres

3
@RahmathullahMPulikkal Görüyorum ki, ana hattaki bir yolu yanlışlıkla kodlamıştım. Gerçekten kullanarak olmalı github.com/RichardBronosky/ota-tools/blob/master/ipa_sign yerine özünü. Korunan kod.
Bruno Bronosky

5
OS X Yosemite'de (10.10) kullanımdan kaldırılan --resource-rules parametrelerinde bir uyarı / hata alabilirsiniz, bu sorunu çözmek için bu parametreyi silmeniz yeterlidir.
ıɾuǝʞ

4
Küçük bir not: Görünüşe CodeResourcesgöre artık klasörün içinde bulunuyor _CodeSignature, bu yüzden sadece bu klasörü kaldırmanız gerekiyor.
dadude999

36

Kontrol iResign Bunun nasıl kolay bir araç için!

[değiştir] etrafta dolaştıktan sonra, anahtar zincirine duyarlı istifa için bir çözüm buldum. Https://gist.github.com/Weptun/5406993 adresinden kontrol edebilirsiniz.


istifa ederken Görünen adı Paket kimliği ile birlikte değiştirebilecek herhangi bir araç var mı? Bu, farklı ortamlar için farklı görünen adlara sahip olmanıza yardımcı olacaktır. App-Dev, App-QA, App-Stage vb. gibi
Nishanth Nair

1
Evet, floatsign.sh tam olarak bunu yapar.
Blitz

İşler. Basit ve güzel.
Arjun Kalidas

13

Biraz eski soru, ancak en son XCode ile codesignçok kolay:

$ codesign -s my_certificate example.ipa 

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

2
@Pavel Bu soru, iOS 6.x en son sürüm olduğunda yanıtlandı. O zamandan beri, birçok şeyi açıkça değiştiren iki büyük yayınımız oldu. Aramalarınızı mevcut teknolojiyi hedefleyen cevaplarla sınırlandırmak isteyebilirsiniz.
BryanH

Benim için çalıştı. "my_certificate" ı anahtar zincirinizdeki anahtarın adıyla değiştirmeniz gerekir.
Franziskus Karsunke

2
codesignkomutu, @BrunoBronosky yanıtında da kullanılır. Bunu doğrudan "* .ipa" dosyasında kullanamıyorum ve "-vv" seçenekleri her zaman code object is not signed at allimzalandıklarını bildiğim dosyalara geri dönüyor ...
Mariano Paniga

12

Buraya gönderilen cevapların hepsi benim için pek işe yaramadı. Genellikle gömülü çerçeveleri (veya yetkileri dahil) imzalamayı atladılar.

İşte benim için işe yarayanlar (geçerli dizinde bir ipa dosyasının var olduğunu varsayar):

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/

Yukarıdaki
gönderiden

9

Fastlane'nin iç çekişi , IPA'lardan vazgeçmek için oldukça sağlam bir çözüm sağlar.

README'lerinden:

İstifa etmek

ipaDosyanızı oluşturduysanız ancak ipa dosyasına farklı bir kod imzalama uygulamak istiyorsanız, şunu kullanabilirsiniz sigh resign:

fastlane sigh resign

sigh mevcut klasörde bulunuyorsa sizin için ipa dosyasını ve ön hazırlık profilini bulacaktır.

Komut satırını kullanarak daha fazla bilgi aktarabilirsiniz:

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

İç içe yerleştirilmiş uygulamalar için temel hazırlık profillerini bile idare eder (ör. Watchkit uygulamalarınız varsa)


8

Bryan'ın Sierra iMac'im için kodunu güncelledim:

# 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

i aşağıdaki hata yetkileri.plist'e git: tanınmayan blob türü (körü körüne kabul ediliyor) authlements.plist: yetkilendirme blobunda geçersiz uzunluk
Amr Angry

yetki dosyası içeriklerini paylaşabilir misin?
Pierre Priot

Büyü gibi çalıştı!
Luis E. Prado

5
  1. .İpa dosyasının uzantısını .zip ile değiştirerek sıkıştırmasını açın
  2. Payload'a gidin. .App dosyasını bulacaksınız
  3. .App dosyasına sağ tıklayın ve Paket içeriğini göster seçeneğine tıklayın.
  4. _CodeSignedKlasörü silin
  5. Değiştir embedded.mobileprovisionyeni hüküm profiliyle dosyayı
  6. Anahtar Zinciri Erişimi'ne gidin ve geçici profille ilişkili sertifikanın mevcut olduğundan emin olun
  7. Aşağıda belirtilen komutu yürütün: /usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"

  8. Şimdi Yük klasörünü tekrar sıkıştırın ve .zip uzantısını .ipa ile değiştirin

Umarım faydalı olur.

Referans için aşağıda belirtilen bağlantıyı izleyin: http://www.modelmetrics.com/tomgersic/codesign-re-signing-an-ipa-between-apple-accounts/


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.