過去要開發 iOS App 時,不管你是用哪種技術,一定要買一台 Mac 搭配 XCode 做建置,才能安裝到手邊的 iPhone 開發機上,如果你是使用 Windows 的開發者,那麼整個開發流程就是很不順暢。如果你是使用 .NET 的 Xamarin 技術開發 iOS App 了話,那一定要知道 Xamarin 搭配 Visual Studio 的 Hot Restart 功能,讓你不用 Mac 也能將建置 iOS App 並安裝到 iPhone 上。
Apple 開發者帳號
我們知道要開發 Apple 的 App 必須要先建立 Apple ID 做為開發人員帳戶,並且每年付 $99 美金來訂閱 Apple Developer Program,才能上架到 App Store 或安裝 App 到裝置上(若是要 in-house 使用則需要訂閱 Apple Developer Enterprise Program),關於免費和付費版的開發人員帳戶差別可以參考這個官方連結。
這裡要特別提的是,除非公司要你專職在開發 Apple 的 App,不然一個開發團隊只需要一個付費的訂閱帳號即可,你可以將多個免費的開發人員帳戶都加到付費帳戶的團隊下,做法如下:
使用付費帳戶登入開發人員後台,點選 People 選單。
這時會轉跳到團隊使用者的管理介面,根據你想要給的權限將免費的開發人員帳戶加入即可。
因為這篇是要使用到 Hot Restart 的功能,這裡的權限必須設定成 Admin,原因是只有 Admin 才能建立 App 的 Provision。
這裡的權限列表請參考這裡。
開啟 Visual Studio Hot Restart 功能
目前 Xamarin Hot Restart 僅適用於 Visual Studio 2019 16.5 以上版本,且現在還是預覽階段(希望會跟著 .NET 6 一起正式發布),所以開啟 Visual Studio 上方選單列的 [工具] > [選項] 視窗,然後在 [環境] > [預覽功能] 中開啟 Hot Restart 功能,設定完記得重新啟動 Visual Studio。
在 Visual Studio 16.9 之後的版本,Xamarin Hot Restart 已經是預設開啟的狀態,貌似已經脫離 Preview 了 👍
體驗沒有 Mac 的狀態開發 iOS App
要體驗沒有 Mac 的 iOS App 開發,環境要安裝 iTunes,在使用 Xamarin Hot Restart 時,請先開啟 iTunes 並確認手機已經連線成功。
我是直接用 Xamarin.Forms 的範本來建立新專案,這就不多贅述了。
接著要使用 Xamarin Hot Restart 對開發中的 iOS App 偵錯時,要先設定起始專案為 iOS 的 Xamarin.Forms 專案,並選用 Local Device,如果已經有接上手機時,Local Device 會是你的手機名稱,像是下圖的 Poy's iPhone
:
然後你就可以直接 F5 進行偵錯模式囉!
在執行偵錯模式時,如果是第一次使用,會開啟設定 Hot Restart 視窗畫面。
接著會要你連接你的 iOS 設備裝置,如果連接不到可以嘗試移除裝置重新接上連接線,或者開啟 iTunes(不知道為什麼開啟 iTunes 會讓連線變得順暢…)。
再來會要你登入你的 Apple Developer 開發者帳號,並且選用對應的開發團隊,這裡主要是自動化建立給這個 App 用的 Provisioning Profile。
你可以到 Apple Developer 後台網站,點選 Certificates, Identifiers & Profiles 選單就可以看到這自動化建立的 Provisioning Profile。
在完成啟動 Hot Restart 後,背後會用一個很神秘的方式安裝了一個 Xamarin Shell App 到你的手機上,藉此你就可以橋接到你開發中的 App。
背後黑魔法
個人覺得 Hot Restart 非常的黑魔法,這到底是怎麼辦到的呢?先來看看下面張圖:
Hot Restart 背後的運作原理其實是預先建置了一個 Shell App 放在 Visual Studio for Windows 中,在偵錯時會先拿這個 Pre-build 的 App 加上你的程式碼(User Code),並加入必要執行程序(Libraries)來即時編譯、執行你所撰寫的程式,然後套上自動化建立的 Provisioning Profile,因為這基本上預先編譯好的 App(至少底層是),已經通過類似 XCode 的編譯檢查,所以有機會直接安裝至 iOS 中執行。
這樣的處理方式還是有些限制,例如他無法調整 Launch Screen 和底層的 info.plist
,不過這對於偵錯開發中的 App 已經非常夠用了!
後記
最後,貼一下這歷史的一刻,No Mac still can develop iOS App!
參考資料: