開發者有時候需要用舊版 Xcode build app 跑在新版 iOS 上測試,以確保相容性。通常是在 WWDC 到正式版 iOS 上市之前這段期間做測試。或是你因為某些原因,還沒辦法把專案升級到新版 Xcode,又想知道會不會在新的系統壞掉。(請參考「Xcode 與 iOS 相容性測試策略分析」一文)

Apple 從來就沒有為了向上相容的測試提供正式的方法,本文就是在告訴你有哪些非官方的作法。不需要額外工具,準備好新舊兩個版本的 Xcode 即可。

方法一:利用 DeviceSupport

要讓 Xcode 去支援它本來不支援的新版系統,只需一個關鍵—DeviceSupport。我們可以從新版 Xcode 裡面把對應的 DeviceSupport 資料夾,看是要用 symbolic link 還是複製一份的方式。我是比較推薦前者。

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/34b5487e-b703-4844-bac6-06ce236f1d3f/1tIxXOAweoAhe90NLVEzM0w.png

我寫了一個 gist 來做這件事情,裡面還有 watchOS 與 tvOS 的指令。你可能得依照自己的 Xcode 路徑來修改指令內容。

https://gist.github.com/ethanhuang13/b9b4b875db9b49a124e2af194b97be68

~~但是從 iOS 14,或說從 Xcode 12 beta 4 開始,DeviceSupport 這招不再能起作用了。~~更新:Xcode 12 仍可使用這招執行 app 在 iOS 15 裝置。

方法二:把 Products 資料夾的 .app 安裝到新版的 Simulator

這招只支援 Simulator,但好處是 .app 檔可以打包壓縮給其他人使用(例如:給 QA 測試)。

以下舉例將 Xcode 11 build 出來的 app,跑在 iPhone 12 Simulator 的步驟:

  1. 用 Xcode 11,隨便選一個 Simulator 為目標來 build
  2. 在 Products 資料夾裡的 AppName.app 上按右鍵、選「Show in Finder」
  3. 打開 Xcode 12 的 Simulator,Hardware 選 iPhone 12 系列的裝置
  4. 從 Finder 裡把 AppName.app 拖拉到上述的 Simulator 視窗裡(會安裝,不一定在第一頁)
  5. 點開 app 來執行

方法三:使用 Run Without Building

這個方法更簡單,我是在這裡看到的。

  1. 打開 Xcode 11,選擇 iOS 14 裝置來 Run。會因為裝置不支援而失敗

    看到這個訊息是「正常」的

    看到這個訊息是「正常」的

  2. 打開 Xcode 12,選一個 Simulator 或裝置為目標來 Run Without Building(快速鍵為 Ctrl+Cmd+R