Situation
iPhone(iOS 15) 安裝App之後出現以下錯誤訊息
需要更新「App名稱」此App的開發者需要更新App才能與此IOS版本搭配使用
點擊確定之後程式無法執行,只能保留或刪除。詳細原因可以參考這裡
但解法還必須加上這篇
以下為重點摘要
出現該問題的原因是使用iOS 15, iPadOS 15, tvOS 15, and watchOS 8的裝置在執行安裝檔之後會檢查安裝檔是否有包含DER(Distinguished Encoding Rules)檔案,若沒有包含DER就會出現以上的錯誤訊息。
而Xcode13或以上版本在編譯過程中預設就會加入DER(Distinguished Encoding Rules)檔案,所以不必調整。但Xcode版本若小於13,編譯過程中不會加入這個DER檔,因此我們就必須使用其他方式加入。
目前Survey有以下幾個解法可以選擇
- 1.將Xcode直升13:
限制是Xcode 13的最低Mac OS 為Big Sur 11.3。如果你的Mac太舊,基本上沒辦法升到Big Sur 11.3。
除非是透過Patch方式強制升級,但Patch之後就個人感覺而言系統極不穩定,很常出現自動關機或藍屏(沒錯! Mac也會藍屏)。之後就再也開不起來。
- 2.一鍵resign軟體:
該軟體號稱可以幫你一鍵resign解決問題。但問題是你根本不知道該軟體做了什麼事。對於安全性有極大的隱憂。
- 3.自行手動resign:
也是本篇的重點,基本上你會了解發生什麼事,如何解決。(順利的話 3 行指令可解決!)
Action
如果不想詳細了解問題或解法,可以按照以下步驟來解決。
- 1.建立測試用資料夾並拷貝.ipa檔
建立一個空的資料夾(test_resign)並把出現錯誤訊息的.ipa檔(old.ipa)複製到test_resign中
- 2.重新命名old.ipa為old.zip
滑鼠右鍵點擊old.ipa -> 重新命名 -> old.zip
- 3.解壓縮old.zip
滑鼠右鍵點擊old.zip -> 打開檔案的應用程式 -> 封存工具程式 -> 解壓縮完成後出現Payload目錄
- 4.查詢可用的codesign identities
開啟終端機先移動到test_resign目錄,再輸入
security find-identity -v -p codesigning
從出現的結果中挑選”Apple Distribution”的identity,只要記住40碼的數字即可
- 5.使用codesign工具resign app
終端機輸入
codesign -s "第4步驟查到的40碼數字" -f --preserve-metadata --generate-entitlement-der
./Payload/app名稱.app
應該會出現以下訊息,直接忽略它!
Warning: default usage of –preserve-metadata implies “resource-rules” (deprecated in Mac OS X >= 10.10)!
- 6.將Payload目錄壓縮為.ipa檔
終端機輸入
zip -ru resignedApp.ipa Payload
(resignedApp可自行定義)
- 7.完成
最後resignedApp.ipa就是重新簽名的app了
Result
在iPhone安裝重新簽名後的App,錯誤訊息 “需要更新「App名稱」此App的開發者需要更新App才能與此IOS版本搭配使用“ 不再出現,App也可正常執行。