IPa फ़ाइल को पुनः साइन इन कैसे करें?


107

मैं एक अलग प्रोविज़न प्रोफ़ाइल के साथ निम्नलिखित की तरह 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

कमांड लाइन से करना वास्तव में आसान है। मेरे पास ऐसा करने के लिए एक स्क्रिप्ट थी। अब इसे https://github.com/RichardBronosky/ota-tools में ipa_sign स्क्रिप्ट में शामिल कर लिया गया है जिसका मैं दैनिक उपयोग करता हूं। यदि आपके पास इन उपकरणों का उपयोग करने के बारे में कोई प्रश्न हैं, तो पूछने में संकोच न करें।

इसका दिल यह है:

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

आपके नए हस्ताक्षरित ऐप को इस्तीफा दे दिया गया है


31
7 वोट और एक भी सवाल नहीं। मुझे लगता है कि मेरा बैश सिर्फ इतना स्पष्ट है।
ब्रूनो ब्रोंस्की

4
वास्तव में यह दयालु है सर।
रुई पेरेस

3
@RahmathullahMPulikkal मुझे लगता है कि मैंने गलत तरीके से मुट्ठी में एक पथ को हार्डकोड किया था। आपको वास्तव में gist के बजाय github.com/RichardBronosky/ota-tools/blob/master/ipa_sign का उपयोग करना चाहिए । यह बनाए रखा कोड है।
ब्रूनो ब्रॉन्स्की

5
आपको OS-Yosemite (10.10) में पदावनत किए गए-resource- नियम मापदंडों पर एक चेतावनी / त्रुटि मिल सकती है, बस इस पैरामीटर को हटा दें इस समस्या को हल करें।
--25।

4
एक छोटा नोट: ऐसा लगता है CodeResourcesकि अब यह फ़ोल्डर के अंदर स्थित है_CodeSignature , इसलिए आपको बस उस फ़ोल्डर को निकालने की आवश्यकता है।
डैड्यूड 999

36

यह करने के लिए कैसे पर एक आसान उपकरण के लिए iResign की जाँच करें!

[संपादित करें] आसपास कुछ ठगने के बाद, मुझे किचेन-अवेयर इस्तीफे का हल मिला। आप इसे https://gist.github.com/Weptun/5406993 पर देख सकते हैं


क्या कोई उपकरण है जो इस्तीफा देते समय बंडल आईडी के साथ प्रदर्शन नाम बदल सकता है? यह अलग-अलग एनवायरनमेंट के लिए अलग-अलग डिस्प्ले नाम रखने में मदद करेगा। जैसे ऐप-देव, ऐप-क्यूए, ऐप-स्टेज आदि
निशांत नायर

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 नवीनतम संस्करण था। तब से, हमारे पास दो प्रमुख रिलीज़ हैं, जिन्होंने स्पष्ट रूप से कई चीजें बदल दी हैं। हो सकता है कि आप अपनी खोजों को वर्तमान तकनीक को लक्षित करने वाले उत्तरों तक सीमित करना चाहें।
ब्रायनह

इसने मेरे लिए काम किया। आपको अपनी कुंजी श्रृंखला में कुंजी के नाम के साथ "my_certificate" बदलना होगा।
फ्रांजिस्कस कार्सुन्के

2
codesign@BrunoBronosky प्रतिक्रिया में भी कमांड का उपयोग किया जाता है। मैं इसे सीधे "* .ipa" फ़ाइल पर उपयोग करने में सक्षम नहीं हूं, और "-vv" विकल्प हमेशा code object is not signed at allउन फाइलों पर लौटता है जो मुझे पता है कि वे हस्ताक्षरित हैं ...
Mariano Paniga

12

यहां पोस्ट किए गए जवाब मेरे लिए काफी काम नहीं आए। वे मुख्य रूप से एम्बेडेड फ्रेमवर्क (या एंटाइटेलमेंट सहित) पर हस्ताक्षर करना छोड़ देते हैं।

यहां मेरे लिए क्या काम किया गया है (यह मानता है कि एक आईपीए फ़ाइल मौजूद है जो वर्तमान निर्देशिका में है):

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/

ऊपर की पोस्ट से उपयोगी टिप्पणी (रिच): stackoverflow.com/questions/5160863/…
सर्जस

9

फास्टलेन की आह आईपीए के इस्तीफे के लिए काफी मजबूत समाधान प्रदान करती है।

उनके 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

मैंने अपने सिएरा 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: गैर-मान्यताप्राप्त ब्लॉब प्रकार (आँख बंद करके स्वीकार करना) एंटाइटेलिस ।लिस्ट: एंटाइटेलमेंट ब्लॉब में अमान्य लंबाई
अमृत ​​गुस्सा

क्या आप आपको एंटाइटेलमेंट फ़ाइल सामग्री साझा कर सकते हैं?
पियरे प्रियोट

एक जादू की तरह काम किया!
लुइस ई। प्राडो

5
  1. .Zip के साथ इसका एक्सटेंशन बदलकर .ipa फ़ाइल को अनज़िप करें
  2. पेलोड पर जाएं। आपको .app फ़ाइल मिल जाएगी
  3. .App फ़ाइल पर राइट क्लिक करें और पैकेज सामग्री दिखाएँ पर क्लिक करें
  4. _CodeSignedफ़ोल्डर हटाएँ
  5. embedded.mobileprovisionफ़ाइल को नए प्रावधान प्रोफ़ाइल के साथ बदलें
  6. कीचेन एक्सेस पर जाएं और सुनिश्चित करें कि प्रोविजनल प्रोफाइल से जुड़ा प्रमाण पत्र मौजूद है
  7. नीचे उल्लिखित कमांड निष्पादित करें: /usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"

  8. अब फिर से पेलोड फोल्डर को ज़िप करें और .ipa के साथ .zip एक्सटेंशन को बदलें

आशा है कि यह उपयोगी है।

संदर्भ के लिए नीचे दिए गए लिंक का अनुसरण करें: http://www.modelmetrics.com/tomgersic/codesign-re-signing-an-ipa-between-apple-accounts/


1

इस ऐप को आज़माएं http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for-upload/

यह IPA फ़ाइल को इस्तीफा देने में आपकी सहायता करने वाला है। मैंने स्वयं इसकी कोशिश की, लेकिन Entitlements.plist के साथ एक त्रुटि नहीं पा सका। सिर्फ मेरी परियोजना के साथ एक समस्या हो सकती है। आपको इसके लिए प्रयास करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.