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也可正常執行。