Xcode 會將 Watch 應(yīng)用和 WatchKit 應(yīng)用擴展一起打包,然后放進現(xiàn)有的 iOS 應(yīng)用包中。Xcode 提供了一個搭建 Watch 應(yīng)用的模板,其中包含了創(chuàng)建應(yīng)用、glance,以及自定義通知界面所需的所有資源。你可以在項目中進行實時測試。
Xcode 中的 WatchKit 應(yīng)用包已經(jīng)包含了所有你需要的資源來創(chuàng)建出 WatchKit 應(yīng)用。包括 glances,自定義通知界面。并且 iOS 模擬器提供了一個實時環(huán)境來測試它的界面以及所有的接口。
重要提示
WatchKit 開發(fā)環(huán)境需要 iOS 8.2 以上的 SDK,請在 developer.apple.com 獲取最新 SDK。
要向現(xiàn)有項目中添加 Watch 應(yīng)用對象,請執(zhí)行以下操作:
打開現(xiàn)有的 iOS 應(yīng)用項目
選擇 File > New > Target,然后選中 Apple Watch
選擇 Watch App,然后單擊 Next
如果您想要使用 glance 或者自定義通知界面,請選擇相應(yīng)的選項我們建議您激活應(yīng)用通知選項。選中之后就會創(chuàng)建一個新的文件來調(diào)試該通知界面。如果您沒有選擇這個選項,那么之后您只能手動創(chuàng)建這個文件了。
完成上述操作之后,Xcode 將 WatchKit 應(yīng)用擴展所需的文件以及 Watch 應(yīng)用添加到項目當(dāng)中,并自動配置相應(yīng)的設(shè)置。Xcode 將基于 iOS 應(yīng)用的 bundle ID 來為兩個新對象設(shè)置它們的 bundle ID。比如說,iOS 應(yīng)用的 bundle ID 為 com.example.MyApp,那么 Watch 應(yīng)用的 bundle ID 將被設(shè)置為 com.example.MyApp.watchapp,WatchKit 應(yīng)用擴展的bundle ID 被設(shè)置為 com.example.MyApp.watchkitextension。這三個可執(zhí)行對象的基本 ID(即 com.example.MyApp)必須相匹配,如果您更改了 iOS 應(yīng)用的 bundle ID,那么您就必須相應(yīng)的更改另外兩個對象的 bundle ID。
Xcode 中的 WatchKit 應(yīng)用擴展模板為 iOS 應(yīng)用創(chuàng)建了兩個新的可執(zhí)行程序。Xcode 同時也配置了項目的編譯依賴,從而讓 Xcode 在編譯 iOS 應(yīng)用的同時也編譯這兩個可執(zhí)行文件。
圖 2-1 說明了它們的依賴關(guān)系,并解釋了 Xcode 是如何將它們打包在一起的。WatchKit 依賴于 iOS 應(yīng)用,而其同時又被 Watch 應(yīng)用依賴。編譯 iOS 應(yīng)用將會將這三個對象同時編譯并打包。
圖 2-1 Watch 應(yīng)用對象的結(jié)構(gòu)
http://wiki.jikexueyuan.com/project/apple-watch-programming-guide/images/target_structure_2x.png" alt="Watch 應(yīng)用對象的結(jié)構(gòu)" />
當(dāng)您創(chuàng)建完 Watch 應(yīng)用對象后,Xcode 將自行配置用于運行和調(diào)試應(yīng)用的編譯方案。使用該配置在 iOS 模擬器或真機上啟動并運行您的應(yīng)用。
對于包含 glance 或者自定義通知的應(yīng)用來說,Xcode 會分別為其配置不同的編譯方案。使用 glance 配置以在模擬器中調(diào)試 glance 界面,使用通知配置以測試靜態(tài)和動態(tài)界面。
為 glance 和通知配置自定義編譯方案
1、選擇現(xiàn)有的 Watch 應(yīng)用方案
2、從方案菜單中選擇 Edit Scheme
http://wiki.jikexueyuan.com/project/apple-watch-programming-guide/images/edit_scheme_menu_2x.png" alt="image" />
3、復(fù)制現(xiàn)有的 Watch 應(yīng)用方案,然后給新方案取一個合適的名字。
比如說,命名為 “Glance - My Watch app”,表示該方案是專門用來運行和調(diào)試 glance。
4、選擇方案編輯器左側(cè)欄的Run選項
5、在信息選項卡中,選擇合適的可執(zhí)行對象
http://wiki.jikexueyuan.com/project/apple-watch-programming-guide/images/duplicate_scheme_2x.png" alt="image" />
6、關(guān)閉方案編輯器以保存更改
當(dāng)您在 iOS 模擬器調(diào)試自定義通知界面的時候,您可以指定一個 JSON 負(fù)載來模擬推送的通知。通知界面的 Xcode 模板包含一個 RemoteNotificationPayload.json 文件,您可以用它來指定負(fù)載中的數(shù)據(jù)。這個文件位于 WatchKit 應(yīng)用擴展的 Supporting Files 文件夾。只有當(dāng)您在創(chuàng)建 Watch 應(yīng)用時勾選了通知場景選項,這個文件才會被創(chuàng)建。如果這個文件不存在,您可以用一個新的空文件手動創(chuàng)建它。
RemoteNotificationPayload.json 文件包含了絕大多數(shù)您需要的鍵值,但是您可以根據(jù)應(yīng)用程序的實際情況添加更多的鍵值。圖 2-2 展示了項目中的默認(rèn) JSON 文件。由于 iOS 模擬器無法訪問 iOS 應(yīng)用的注冊動作,這個負(fù)載便包含了一個名為 “WatchKit Simulator Actions” 的鍵值,其值為一個包含了一系列動作的數(shù)組。每個動作按鈕含有 title 和 identifier 鍵,它們的值和 iOS 應(yīng)用中注冊的相應(yīng)鍵值相同。
圖 2-2 一個模擬的遠程通知負(fù)載
http://wiki.jikexueyuan.com/project/apple-watch-programming-guide/images/PushNotificationPayload.apns_2x.png" alt="一個模擬的遠程通知負(fù)載" />
絕大部分的 JSON 數(shù)據(jù)會在運行時打包進字典中進行傳輸。因為 iOS 模擬器沒辦法處理 iOS 應(yīng)用的預(yù)置動作。您也許需要負(fù)載文件來指定您的動作。WatchKit 模擬器包含了一個行為的數(shù)組。數(shù)組中的每一個元素包含了以下內(nèi)容:
1 或 0,1 會導(dǎo)致按鈕被渲染成 destructive 的樣式。0 會導(dǎo)致按鈕被渲染成普通模式,這個鍵值是可選的。為了用 JSON 負(fù)載測試您的通知接口,您需要用 appropriate 負(fù)載文件來配置 build scheme。當(dāng)您選擇了一個通知接口的可執(zhí)行文件,Xcode 會添加一個菜單來選擇您的負(fù)載文件。您可以用不同的 build schemes 來加載不同的配置文件,或者您也可以修改以前的負(fù)載文件來達到更新的目的。