是的,這是可能的,但通常需要在進行變更之後重新簽署 .app
套件組合。
請注意,在一般使用中不需要修改 .ipa
檔案。 本文僅供參考之用。
範例:從 .ipa
封存中移除檔案
在此範例中,假設 Xamarin.iOS 專案的名稱是 iPhoneApp1
,而 generated session id
是 cc530d20d6b19da63f6f1c6f67a0a254
從 Visual Studio 正常建置
.ipa
檔案。切換至 Mac 組建主機。
在資料夾中尋找組建
~/Library/Caches/Xamarin/mtbs/builds
。 您可以將此路徑貼到 Finder > Go > to Folder ,以流覽 Finder 中的資料夾。 尋找符合項目名稱的資料夾。 在該資料夾中,尋找符合generated session id
組建 之的資料夾。 這很可能是具有最近修改時間的子資料夾。開啟新的
Terminal.app
視窗。在 [Terminal.app] 視窗中輸入
cd
,然後將資料夾拖放generated session id
到Terminal.app
視窗中:輸入傳回索引鍵,將目錄變更為
generated session id
資料夾。使用下列命令將
.ipa
檔案解壓縮到暫存old/
資料夾。Ad-Hoc
視需要調整特定專案的和iPhoneApp1
名稱。ditto -xk bin/i 電話/Ad-Hoc/i 電話 App1-1.0.ipa old/
Terminal.app
讓視窗保持開啟。從
.ipa
刪除所需的檔案。 您可以使用 Finder 將它們移至垃圾桶,或使用 在命令行Terminal.app
上刪除它們。 若要在 Finder 中檢視檔案的內容Payload/iPhone
,請控制按兩下檔案,然後選取 [ 顯示套件內容]。使用與步驟 3 相同的一般方法,在底下
~/Library/Logs/Xamarin/MonoTouchVS/
尋找同時具有專案名稱和generated session id
名稱中的 記錄檔:從步驟 10 開啟組建記錄檔,例如按兩下它。
尋找包含
tool /usr/bin/codesign execution started with arguments: -v --force --sign
的行。在步驟 8 的 [Terminal.app] 視窗中輸入
/usr/bin/codesign
。複製從步驟 12 行開始
-v
的所有自變數,並將其貼到 [Terminal.app] 視窗中。將最後一個自變數變更為
.app
位於資料夾內的old/Payload/
套件組合,然後執行 命令。/usr/bin/codesign -v --force --sign SOME_LONG_STRING in/iPhone/Ad-Hoc/iPhoneApp1.app/ResourceRules.plist --entitlements obj/iPhone/Ad-Hoc/Entitlements.xcent old/Payload/iPhoneApp1.app
變更為
old/
終端機中的目錄:cd old
使用
zip
命令,將目錄的內容壓縮成新的.ipa
檔案。 您可以變更"$HOME/Desktop/iPhoneApp1-1.0.ipa"
自變數,以在您想要的位置輸出.ipa
檔案:zip -yr "$HOME/Desktop/iPhoneApp1-1.0.ipa" *
常見的錯誤訊息
如果您看到 Invalid Signature. A sealed resource is missing or invalid.
,這通常表示套件組合內的 .app
某個專案已變更,而且 .app
套件組合之後未正確重新簽署。 另請注意,如果您想要使用散發設定檔建立 .ipa
,則必須使用散發設定檔來建置原始.ipa
的 。 否則 Entitlements.xcent
會不正確。
若要提供如何發生此錯誤的具體範例,如果您在步驟 9 之後的終端機視窗中執行下列 codesign --verify
命令,您將會看到錯誤以及錯誤的確切原因:
$ codesign -dvvv --no-strict --verify old/Payload/iPhoneApp1.app
old/Payload/iPhoneApp1.app: a sealed resource is missing or invalid
file missing: /Users/macuser/Library/Caches/Xamarin/mtbs/builds/iPhoneApp1/cc530d20d6b19da63f6f1c6f67a0a254/old/Payload/iPhoneApp1.app/MyFile.png
App Store 驗證程式會回報類似的錯誤訊息:
錯誤 ITMS-90035:「無效的簽章。 密封的資源遺失或無效。 路徑 [i 電話 App1.app/i電話 App1] 的二進位檔包含無效的簽章。 請確定您已使用散發憑證簽署應用程式,而不是特定憑證或開發憑證。 確認 Xcode 中的程式代碼簽署設定在目標層級正確無誤(這會覆寫專案層級的任何值)。 此外,請確定您上傳的套件組合是使用 Xcode 中的發行目標所建置,而不是模擬器目標。 如果您確定程式代碼簽署設定正確,請在 Xcode 中選擇 [全部清除]、刪除 Finder 中的 [組建] 目錄,然後重建您的發行目標。 如需詳細資訊,請參閱 https://developer.apple.com/library/ios/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html”