開發者有時候需要用舊版 Xcode build app 跑在新版 iOS 上測試,以確保相容性。通常是在 WWDC 到正式版 iOS 上市之前這段期間做測試。或是你因為某些原因,還沒辦法把專案升級到新版 Xcode,又想知道會不會在新的系統壞掉。(請參考「Xcode 與 iOS 相容性測試策略分析」一文)
Apple 從來就沒有為了向上相容的測試提供正式的方法,本文就是在告訴你有哪些非官方的作法。不需要額外工具,準備好新舊兩個版本的 Xcode 即可。
要讓 Xcode 去支援它本來不支援的新版系統,只需一個關鍵—DeviceSupport。我們可以從新版 Xcode 裡面把對應的 DeviceSupport 資料夾,看是要用 symbolic link 還是複製一份的方式。我是比較推薦前者。
我寫了一個 gist 來做這件事情,裡面還有 watchOS 與 tvOS 的指令。你可能得依照自己的 Xcode 路徑來修改指令內容。
https://gist.github.com/ethanhuang13/b9b4b875db9b49a124e2af194b97be68
~~但是從 iOS 14,或說從 Xcode 12 beta 4 開始,DeviceSupport 這招不再能起作用了。~~更新:Xcode 12 仍可使用這招執行 app 在 iOS 15 裝置。
這招只支援 Simulator,但好處是 .app 檔可以打包壓縮給其他人使用(例如:給 QA 測試)。
以下舉例將 Xcode 11 build 出來的 app,跑在 iPhone 12 Simulator 的步驟:
這個方法更簡單,我是在這裡看到的。
打開 Xcode 11,選擇 iOS 14 裝置來 Run。會因為裝置不支援而失敗
看到這個訊息是「正常」的
打開 Xcode 12,選一個 Simulator 或裝置為目標來 Run Without Building(快速鍵為 Ctrl+Cmd+R
)