
If we want users to like our software, we should design it to behave like a likable person: respectful, generous and helpful.
- Alan Cooper
到目前為止,你一直在內建的模擬器上執行與測試你的App,模擬器是 App 開發的一個很有價值的工具,尤其是當你尚未擁有一台 iPhone 時。雖然模擬器很有用,但你不能全部都只依賴模擬器,我們不建議你未經過實機測試,就上傳你的 App 至 App Store,有些 App 的錯誤可能只在 iPhone 實機上執行或透過行動網路執行時才會顯現,若是你真的想建立一個很棒的 App,那麼在發布之前,你必須以實機做過測試。
有一個令人興奮的好消息,特別是對於有抱負的 iOS 開發者而言,Apple 不再要你先註冊 Apple 開發者計畫,才能在 iOS 裝置上測試你的 App,你只需使用你的 Apple ID 登入 Xcode,你的 App 就可以在 iPhone 或 iPad 執行了。不過,請注意如果你的 App 利用到 CloudKit 與推播通知等服務,你還是需要註冊 Apple 開發者計畫,該計畫的費用為每年 99 美元。我明白對於某些人而言,這筆費用並不便宜,但是如果你從本書的一開始就跟著我們實作至現在,我相信你一定為你的受眾及部署 App 下了堅定的決心。能走到這一步實屬不易,為什麼要就此止步呢?若你的經費不會太拮据,我建議你可以註冊開發者計畫,以便繼續學習其餘的內容,最重要的是可以在App Store 上發布你的 App。
在實體裝置上測試你的 App 之前,你需要先執行下列幾項設定:
在過去的 iOS 開發中,你必須透過 iOS Provisioning Portal( iOS 設定入口網站或會員中心)來自行管理上述的設定,而現在版本的 Xcode 使用名為「自動簽署」( Automatic Signing )的功能,來自動化整個簽署與設定流程這讓你的生活更加輕鬆,接下來你很快就會了解我的意思。
你可能想知道為什麼只為了在自己的裝置上安裝 App,就必須申請憑證,並完成這些複雜的程序,畢竟這是你的App 與裝置,這背後的主要原因是安全性考量。部署在 iOS 裝置上的每個App都會經過程式碼簽章(Code Signing),Xcode 利用你的私密金鑰( Private Key)與數位憑證( Digital Certificate )來簽署程式碼,透過簽署你的程式碼,Apple 可以驗證你是該 App 的合法擁有者。如你所知,Apple 只向已註冊開發者計畫的授權開發者來頒發數位憑證,這過程還可以確保只有授權的開發者才能在 App Store 上部署App,從而防止未經授權的個人這樣做。
Apple 頒發兩種類型的數位憑證,即「開發」(Development)與「發布」(Distribution), 要在實機上執行App,只需要用到開發憑證(Development Certificate ),而當你想要上傳 App 至 Apple Store 時,你便必須使用發布憑證(Distribution Certificate)對 App 進行簽署, 這些事同樣是由 Xcode 自動處理的。我們會在之後的章節討論 App 上架的部分,現在先將重點放在如何部署 App 至裝置中。
「描述檔」( Provisioning Profile )是你在App 部署時會遇到的另一個術語,Provisioning 是指一個 App 在裝置上啟動的準備與設定的過程。團隊描述檔可讓所有團隊成員(假使你是一位個人開發者,則你就是團隊唯一的成員)在其裝置上簽署與執行你的 App,圖 25.1 是團隊描述檔的說明。

繼續往下之前,我希望你檢視一下你的 Bundle ID。如前所述,Bundle ID 是用來識別單一 App,因此它必須是獨一無二的。如果你已經閱讀 CloudKit 一章,我相信你已經建立了你自己的 Bundle ID,不過讓我再次提醒你,你不能使用 com.appcoda.FoodPin(或是 com.appcoda.FoodPinV6),因為它已經在範例 App 中使用過了,否則你將不能部署 App 至你的實體裝置中。
因此,請確認你已經變更了 Bundle ID,它可以任意設定,不過如果你已經有自己的網域,你可以使用它,並以DNS 反寫的格式來編寫 ID(例如:edu.self.foodpinapp )。
Note: 當 App 發布到 App Store之後,你將無法變更 Bundle ID。
「自動簽署」(Automatic Signing )是自 Xcode 8 發布以來的功能。如前所述,在實體裝置上部署與執行你的App 時,你需要先進行下列幾項工作:
透過自動簽署功能,你便不再需要手動建立開發者憑證或描述檔,Xcode 會自動為你完成所有這些工作。
建立 Xcode 的專案時,自動簽署是預設啟用的,若是你在專案導覽器中選取「FoodPin」專案,並到 FoodPin Target 中,你應該會發現「Automatically manage signing」選項設定為「on」。
我們在執行自動簽署之前,將你的 iPhone(或iPad )連接到你的Mac,在 Xcode 中點擊「模擬器」按鈕,你應該會在模擬器/裝置清單中看到你的裝置,請確認你已選取裝置,因為 Xcode 在簽署過程中,會將你的iPhone 註冊為一個有效的測試裝置。
現在至專案選項, 並選擇 Signing & Capabilities 區塊, 這裡的「Team」選項設為「None」。要使用自動簽署,你必須在你的專案中新增帳戶,點選「Team」選項並選取「Add an Account」後,填入你的「Apple ID/密碼」,並點選「Add」來繼續,如圖 25.2 所示。如果你之前有加入過你的帳號,則可以跳過這個步驟。

即使你尚未註冊 Apple 開發者計畫,你依然可以使用你的 Apple ID 來登入。
當新增你的帳號後,Xcode 會產生開發者憑證,並自動建立描述檔。在Signing 區塊中, 你會找到你的簽署憑證與描述檔,你可以進一步點選「info」圖示(在provisioning profile 旁)來顯示詳細資訊,如圖 25.3 所示。。

你可以隨時在會員中心(Member Center )查詢你的 App ID 與描述檔。開啟Safari 並訪問 [https://developer.apple.com/membercenter/,然後以你的開發者帳號來登入,你將會看到如圖 25.4 所示的畫面。

Note: 只有當你申請完 Apple開發者計畫後,才會顯示「Certificates, identifiers & Profiles」這個選項。
選擇「Identifiers」後,你將被導覽至另一個畫面來管理憑證、識別碼、描述檔。在 Identifiers 區塊下,你會找到你的 App ID(和你的 Bundle ID 相同),圖 25.5 顯示了範例 App ID。

當你已經將 iOS 裝置連接到你的Mac 電腦,你就可以在你的 iPhone 或 iPad 上部署及測試 App。點選模擬器/裝置的彈出式選單,並捲動到清單的最上方,以選取你的裝置,如圖 25.6 所示。

Quick note: 如果你的 iOS 裝置不符合條件,在繼續往下之前,得修復這個問題。例如:裝置沒有符合部署目標(如 iOS 17),那麼就更新 iOS 裝置的版本。
如果你的裝置上顯示了「Developer Mode disabled」訊息,則你需要在 iPhone / iPad 上 啟用它。至「設定→隱私權與安全性→開發者模式」(Settings → Privacy & Security → Developer Mode ),將開發者模式開啟,iOS 會提示你確認,並要求重新啟動裝置,以開啟開發者模式。
「開發者模式」是在 iOS 16 與 watchOS 9 中導入,可防止人們無意間在其裝置上安裝到惡意軟體, 並減少開發者專用功能暴露的攻擊媒介。
- Apple's 文件 (https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device)
你現在已經準備好在裝置上部署與執行 App 了,點擊「Run」按鈕,並開始部署過程。請記得在部署你的 App 之前,先解鎖你的 iPhone,否則你將無法啟動它。

從 Xcode 9 開始,這個開發工具內建了一個備受期望的 App 部署功能,Xcode 可以讓你不使用 USB 連接線,就可以直接透過 Wi-Fi 部署 App 至任何 iOS 裝置。
不過,有一個問題是你使用這個新功能之前,你必須要先使用 USB 連接線來連結你的 iOS 裝置,並進行一個簡單的設定。
假設你已連接裝置,到 Xcode 選單並選擇「Window → Devices and Simulators」,如圖 25.8 所示。

在 Connected 區塊下選取你的裝置,然後你應該會找到一個「Connect via network」的核取方塊,請勾選它來啟用 Wi-Fi 部署,如圖 25.9 所示。

現在你可以將 iPhone 或 iPad 與 Mac 電腦分離,確認你的裝置與Mac 都有連上Wi-Fi 網路,即可透過 Wi-Fi 來部署你的 App,如圖 25.10 所示。

能在實體裝置上執行你的App 是不是很令人興奮呢?現在你可以向朋友、家人自豪地展示你的App。最新版的Xcode 透過簡化了建立描述檔、產生App ID 與開發者憑證的過程,讓開發者的工作變得更加輕鬆,只要點選幾下,你就能在你的裝置上測試App,更不用說,新增Wi-Fi 部署是一個非常棒的功能。
如果你在App 部署上碰到任何問題,只要將問題刊登至我們的Facebook 私密社團即可(https://www.facebook.com/groups/appcodatw/ )。