2011-03-01 51 views
86

在使用不同的配置文件生成IPA之後,如何使用配置文件簽署.ipa文件?我想用臨時供應配置文件簽署IPA進行beta測試,然後使用應用商店的應用提交供應配置文件重新簽署確切的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}" 
+0

[重新簽署IPA(iPhone)](http:// stackoverflo w.com/questions/6896029/re-sign-ipa-iphone) – grez 2016-05-11 22:20:18

回答

32

檢查iResign如何做到這一點的簡單工具!

[編輯]一些欺騙之後,我發現了一個解決鑰匙串感知調整大小。你可以在https://gist.github.com/Weptun/5406993

+1

這對我有用。 – zekel 2013-01-07 12:47:25

+0

是否有任何工具可以在退出時更改顯示名稱以及軟件包ID?這將有助於爲不同的環境顯示不同的名稱。像App-Dev,App-QA,App-Stage等。 – Whizkid747 2013-04-15 16:10:23

+1

是的,floatsign.sh就是這樣做的。 – LordT 2013-04-18 21:24:13

168

查看它在命令行中很容易做到。我有一個腳本要做到這一點。現在它已被合併到我每天使用的https://github.com/RichardBronosky/ota-tools的ipa_sign腳本中。如果您對使用這些工具有任何疑問,請不要猶豫,問。

它的心臟是這樣的:

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老問題

+21

7個投票,而不是一個單一的問題。我想我的bash就是那麼清楚。 – 2013-02-05 20:35:15

+4

事實上,這是一位先生。 – Peres 2013-03-07 14:12:32

+0

即時通訊錯誤消息說:「安全:無法打開」/var/folders/74/kpcwmb6j1pn92kr8mtvm2mwh0000gn/T/./resign.I9DrKi7B/Payload/AtlantaJournal.app/embedded.mobileprovision「閱讀:沒有這樣的文件或目錄」 。 – 2013-03-14 06:00:34

12

類,但與最新的XCode,codesign很簡單:

$ codesign -s my_certificate example.ipa 

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

嘗試過,但沒有工作:「無效的參數」 – dwery 2015-03-18 23:03:03

+0

真的,不起作用 – Pavel 2015-05-20 14:26:06

+2

@Pavel當iOS 6.x是最新版本時,回答此問題。從那以後,我們有兩個主要版本,這顯然改變了很多事情。您可能希望將搜索限制爲針對當前技術的答案。 – BryanH 2015-06-01 16:16:55

-1

您應該嘗試this new OSX app : AirSign

這將幫助您辭職您的IPA並直接與您的Beta測試人員無線共享。 如果您選擇手動重新簽名,尤其是如果您修改應用程序的Bundle ID,則應真正關注應用程序的權利 (在某些情況下,它可能會很複雜......)。

問候,

羅曼

4
  1. 解壓用的.zip
  2. 去改變它的擴展有效載荷的.ipa文件。你會發現.app文件
  3. 右鍵單擊.app文件,然後單擊顯示包內容
  4. 刪除_CodeSigned文件夾
  5. 新規定輪廓
  6. 去替換embedded.mobileprovisin文件鑰匙串訪問,並確保與臨時文件相關聯的證書是目前
  7. 執行下面的命令中提到: 在/ usr/bin中/協同設計-f -s「iPhone分佈:證書名稱」 --resource規則「有效載荷/ 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

如何產生在Xcode新的IPA文件?

  • 選擇Xcode-> Preferences-> Accounts-> View Details...並下載最新的設置配置文件。
  • 然後選擇Window-> Organizer挑選您的存檔並重新導出。
1

FASTLANE的sigh提供投資促進機構辭職了相當強大的解決方案。

從他們的自述:

辭職

如果您生成ipa文件,但要應用不同的代碼簽名到IPA文件,你可以使用sigh resign

fastlane sigh resign

sigh會爲您找到ipa文件和供應配置文件,如果它們位於當前的fo lder連續。

你可以通過使用命令行的更多信息:

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

它甚至會處理provisioning profiles for nested applications(例如,如果你已經watchkit應用程序。)

2

我已經更新Bryan的代碼我的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 

# 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 
+0

我git以下錯誤entitlements.plist:無法識別的blob類型(盲目接受) entitlements.plist:無效的權利blob中的長度 – 2017-12-10 15:05:20

+0

您能分享您的權利文件內容嗎? – 2017-12-11 17:09:30

+0

工作就像一個魅力! – 2018-01-10 22:32:32