讀古今文學網 > iOS編程基礎:Swift、Xcode和Cocoa入門指南 > 9.8 在設備中運行 >

9.8 在設備中運行

你遲早會將應用的運行、測試與調試從模擬器轉換到實際設備上。模擬器很好,但它只是模擬而已;模擬器與實際設備間還是有很多差別的。模擬器實際上就是你的計算機,它速度很快並且擁有很多內存,這樣內存管理與速度上的問題直到在設備上運行才會發現。與模擬器之間的用戶交互只能限定在鼠標上:可以單擊、拖曳,可以按住Option鍵來模擬用戶的兩指,但更多的手勢只能在實際設備上使用。很多iOS功能(如加速計和訪問音樂庫等)是無法在模擬器上使用的,如果應用使用了這些功能,那麼只能在設備上進行測試。

開發應用而不在設備上測試是絕對行不通的。應用只有在設備上運行,你才能知道應用的樣子和行為。向App Store提交並未在設備上運行過的應用也是自討苦吃。

在設備上運行應用是一件很複雜的事情。你需要在構建時對應用簽名。沒有針對設備進行恰當簽名的應用是無法在該設備上運行的(假設沒有越獄)。對應用簽名需要兩個東西:

一個身份

身份代表Apple允許團隊在特定的計算機上開發的應用運行在設備上。它包含兩部分:

私鑰

私鑰存儲在計算機的鑰匙鏈中。因此,它能識別出特定的計算機,團隊可以在該計算機上開發應用,然後在設備上運行。

證書

證書是Apple頒發的一個虛擬許可。它包含了與私鑰匹配的公鑰(因為在申請證書時你向Apple提供了公鑰)。借助證書的副本,擁有私鑰的任何計算機實際上都可以在相應的團隊名稱下開發應用並在設備上運行。

配置文件

配置文件是Apple提供的虛擬許可,它包含了如下4項:

·一個身份。

·一個應用,通過其包id進行識別。

·符合條件的設備列表,通過其UDID(唯一識別標識符)進行識別。

·一個權利列表。權利指的是並非每個應用都需要的一個特權,比如,與iCloud通信的能力。只有編寫需要權利的應用時才需要考慮這一點。

因此,在構建時,配置文件足以完成對應用的簽名。它表示在這個Mac上所構建的應用是可以運行在這些設備上的。

有兩種類型的身份,因此也有兩種類型的證書,兩種類型的配置文件:開發與發佈(發佈證書也叫作產品證書)。這裡只關注開發身份、證書與配置;本章後面將會介紹發佈方面的內容。

Apple公司是所有信息的最終保留者:證書、配置文件,以及註冊的應用與設備等。當需要驗證或獲得這個信息的副本時,你與Apple公司之間的通信是通過如下兩種方式達成的:

會員中心

一些網頁,地址是https://developer.apple.com/membercenter。如果你是開發者計劃成員,那麼可以通過單擊Certificates,Identifiers,& Profiles來訪問當前會員類型與角色所能訪問的所有特性與信息(這部分內容的正式名稱叫作Portal)。

Xcode

除了獲取發佈配置文件,可以通過Xcode完成會員中心所能完成的一切事項。如果一切順利,那麼使用Xcode會更加簡單!如果有問題,那麼你可以訪問會員中心尋求解答。

9.8.1 在沒有開發者計劃成員資格的情況下運行

過去,擁有iOS開發者計劃成員資格是必要的前提,這意味著你需要支付年費才能在自己的設備上測試應用。不過在Xcode 7中,你可以在沒有開發者計劃成員資格的情況下配置應用在你的設備上運行。你所需要的只不過是一個Apple ID而已,而你肯定會有的。

因此,在介紹設備上運行應用的詳情前,我先來談談在沒有做任何準備的情況下如何在設備上運行你的應用:沒有開發者計劃成員資格、沒有在Xcode中輸入任何賬戶信息,之前也從未在設備上運行過應用:

1.編輯應用目標,切換至General窗格,查看Team彈出菜單。假設現在還沒有團隊,你首先要做的事情就是創建一個。從Team彈出菜單中選擇Add an Account;這會打開Xcode賬戶首選項窗格,類似於按下「+」按鈕並選擇Add Apple ID。輸入你的Apple ID與密碼,這會創建一個免費賬戶。關閉賬戶首選項窗格。回到Team彈出菜單,選擇剛才創建的團隊。

2.在Team彈出菜單下,你會看到一個警告,告訴你還沒有代碼簽名身份。單擊Fix Issue。Xcode會與會員中心進行通信。這個問題會得到部分解決,不過你會看到一個對話框:「Unable to create a provisioning profile because your team has no devices registered in the Member Center...」。單擊Done。

3.將設備關聯到計算機上。等待符號文件進行處理(可以追蹤這一過程,方式是選擇Window→Devices並選中設備,這時可以喝杯咖啡,過會兒再過來了)。

4.現在,設備可用於開發了。在方案彈出菜單中將設備作為目標,運行項目!你會看到一個對話框:「Failed to code sign...」。單擊Fix Issue。Xcode會再次與會員中心進行通信,接下來應用就會構建並在設備上運行了。

在後台,Xcode執行了如下幾個必要的步驟:

·它在鑰匙鏈中創建了一個開發者身份(可以通過鑰匙鏈訪問應用看到)。

·將你的設備註冊到了會員中心(由於沒有開發者計劃成員資格,你無法直接登錄到會員中心看到這一點)。

·創建並下載了一個團隊配置文件,對上述內容進行了整合,也就是說,你的應用可以從這台計算機在該設備上運行了。

9.8.2 獲取開發者計劃成員資格

你早晚會需要一個開發者計劃成員資格。進入iOS開發者計劃頁面(http://developer.apple.com/programs/ios)完成註冊流程。一開始,個人計劃就足夠了。組織計劃不會增加成本,不過可以添加其他開發者,並賦予不同角色。如果只是向其他用戶分發應用來進行測試,那就不需要組織計劃了。

iOS開發者計劃成員涉及如下兩點:

一個Apple ID

這是個用於在Apple網站標識你自己的用戶ID(還有相應的密碼)。你可以通過自己的開發者計劃Apple ID做所有事情。除了準備應用以在設備上運行,你還可以通過該Apple ID在Apple開發論壇上發帖、下載Xcode Beta版等。

一個團隊名稱

同一個Apple ID可以隸屬於多個團隊。在每個團隊中,你都會有一個角色,指明了你的權利是什麼。如果你是團隊的領導(或是團隊中的唯一成員),那麼你的角色就是Agent,這意味著你可以做一切事情:可以開發應用、在設備上運行、向App Store提交應用,並獲取付費應用的收益所得。

創建了開發者計劃Apple ID後,你應該在Xcode的賬戶首選項窗格中輸入它。單擊左下角的「+」按鈕並選擇Add Apple ID,輸入Apple ID與密碼。從現在開始,Xcode可以通過與這個Apple ID關聯的團隊名稱識別出你;無須再向Xcode提供密碼了。

9.8.3 獲取證書

創建身份並獲取證書(見圖9-10)只須做一次即可(也許一年最多一次;如果每年的開發者計劃成員過期並進行更新,你可能還要做一次)。還記得吧,證書依賴於私鑰公鑰對。私鑰位於鑰匙鏈中;公鑰則會發送給Apple,它會被構建到證書中。你發給Apple公鑰是通過對證書的請求進行的。理想情況下,你可以通過Xcode輕鬆做到這一點:

1.打開Xcode的賬戶首選項窗格。

2.如果沒有輸入過開發者Apple ID與密碼,請現在輸入。

圖9-10:Keychain Access中顯示的有效的開發證書

3.在左側選擇Apple ID,在右側選擇團隊,單擊View Details。

4.如果有證書,但被會員中心取消,但證書依舊有效,那就會看到一個請求並下載證書的對話框。單擊Request。否則,單擊iOS Development右側的Create按鈕。

接下來一切都會自動發生:私鑰公鑰對會在鑰匙鏈中生成,證書請求會發送給會員中心、生成並下載,然後存儲到鑰匙鏈中,並列在Xcode賬戶首選項窗格View Details對話框的Signing Identities下面。此外,通用的團隊開發配置文件也可能會生成,如圖9-11所示。這樣就具備了在設備上運行應用的全部。

圖9-11:通用開發配置

瞭解生成私鑰公鑰對與證書請求的手工處理過程也是很有益的。過程發起後,處理命令也可以在會員中心找到(進入Certificates頁面,單擊右上角的「+」按鈕):

1.啟動Keychain Access並選擇Keychain Access→Certificate Assistant→Request a Certificate from a Certificate Authority。將你的名字與Email地址作為標識符,生成一個2048位的RSA證書請求文件,並保存到磁盤中。私鑰存儲在鑰匙鏈中;包含公鑰的證書請求會被臨時保存到計算機中(比如,可以保存到桌面上)。

2.在會員中心,你會看到一個上傳所保存的證書請求文件的界面。上傳,接下來會生成證書;單擊會員中心的列表顯示出Download按鈕,然後單擊Download。

3.找到並雙擊剛才下載的文件;Keychain Access會自動導入證書並將其存儲到鑰匙鏈中,現在Xcode也會看到它。

你不需要保存證書請求文件與下載的證書文件;鑰匙鏈現在包含了所有需要的憑證。如果一切正常,你可以在鑰匙鏈中看到證書,查閱其詳細信息,你會發現它是有效的,並且鏈接到了私鑰(如圖9-10所示)。此外,你可以確認Xcode現在已經知道了該證書:在賬戶首選項窗格中,單擊左側的Apple ID與右側的團隊名稱,然後單擊View Details;這時會彈出一個對話框,你會看到頂部列出了一個iOS開發籤名身份,其狀態是有效的。

如果這是你第一次從會員中心獲取證書,那麼你還需要另一個證書:WWDR Intermediate Certificate。該證書用於證明由WWDR(Apple Worldwide Developer Relations Certification Authority)所頒發的證書是受信的(你不能自己創建)。Xcode應該會自動在鑰匙鏈中安裝該證書;如果沒有,那麼可以在添加證書的過程中,手工單擊會員中心頁面底部的鏈接獲取其一份副本。

9.8.4 獲取開發配置文件

如前所述,配置文件統一了身份、設備與應用包。如果一切順利,那麼你可以通過Xcode一步獲取到開發配置文件,這是最簡單的情形。如果應用不需要特殊的功能,那麼與團隊關聯的單個開發配置就可以滿足所有應用的需求,因此這一步只需執行一次即可。

通過9.8.3節的操作,你已經擁有了一個開發身份,可能還獲取到了一個統一的團隊開發配置文件!如果沒有,那麼最簡單的辦法就是打開Xcode並將設備連接到計算機上,經過一小段時間後(比如,告訴設備信任計算機等),將設備作為目標,並在其上運行項目。Xcode會幫你在會員中心註冊設備,並且為該設備創建和下載統一的團隊配置文件。

要確認設備已經添加到了會員中心,請打開瀏覽器訪問會員中心,並單擊Devices。要確認已經擁有了統一的團隊開發配置文件,請單擊賬戶首選項窗格的View Details(選擇恰當的團隊)。證書與文件都列在那兒。除了標題「iOS Team Provisioning Profile」,統一的團隊開發文件有一個與之關聯的普通的應用包id,通過一個星號標識(如圖9-11所示)。

可以通過統一開發文件針對測試目的在目標設備上運行任何應用,只要應用不需要特殊功能即可(比如,使用iCloud)。

還可以手工在會員中心註冊設備。在Devices下,單擊「+」按鈕並輸入設備名與UDID。可以從Xcode的設備窗口中複製設備的UDID。此外,可以提交Tab分隔的UDID文本文件與名字。

根據需要,可以在會員中心為特定應用創建配置文件:

1.確保應用已經通過Identifiers→App ID在會員中心註冊了。如果尚未註冊,那就添加一個,如下所示:單擊「+」按鈕並輸入該應用的名字。會員中心會為包標識符添加一個無意義的字母與數字前綴,不用管它們;使用Team ID。在Explicit App ID下輸入Xcode中所顯示的包標識符,在編輯應用目標時,這個包標識符位於Xcode General窗格的Bundle Identifier域中。

2.在Provisioning Profiles下單擊「+」按鈕。申請一個iOS應用開發配置文件。在下一個界面中選擇App ID。接下來檢查開發證書。然後選擇想要運行的設備。接下來為該配置文件起個名字,單擊Generate。最後單擊Download按鈕。

3.找到下載的配置文件,雙擊它以在Xcode中將其打開。然後就可以將下載的配置文件刪除了,因為Xcode已經擁有了一個副本。

9.8.5 運行應用

擁有了適用於應用與設備的開發配置文件後(對於統一團隊配置文件來說,就是所有應用與所有註冊的設備),請連接設備,在方案彈出菜單中將其作為目標,然後構建並運行應用。如果要求提供對鑰匙鏈的訪問,請授權。如果必要,Xcode會將相關的配置文件安裝到設備上。

應用構建,然後加載到設備上,最後在設備上運行。只要是在Xcode中啟動應用,那麼一切就像是在模擬器中運行一樣;你可以運行、調試,運行著的應用可以與Xcode通信,這樣就可以停在斷點處,查看控制台中的信息等。區別在於你是通過設備(連接到了電腦上)而非模擬器與應用進行交互。

通過Xcode在設備上運行應用還可以用於將當前版本的應用複製到設備上。接下來可以停止應用的運行(在Xcode中操作),斷開設備與電腦的連接,在設備上啟動應用,然後使用。這是一種非常棒的測試方式。現在不是在調試,因此無法從Xcode獲得反饋,不過稍後可以獲得寫到內部控制台的信息。

9.8.6 配置文件與設備管理

可以通過Xcode的賬戶首選項窗格查看身份與配置文件。

賬戶首選項窗格的一個重要特性是它可以導出賬戶信息。如果想在不同的計算機上開發,那麼你就需要這個特性。選中一個Apple ID,然後選擇窗格底部齒輪菜單中的Export Developer Accounts。你需要提供一個文件名以及保存的位置,還需要一個密碼;這個密碼只與該文件有關係,並且只在另外一台計算機上打開該文件時才需要。將之前導出的文件複製到另外一台計算機上,然後運行Xcode並雙擊導出的文件;Xcode會要求你提供密碼。輸入完密碼後,整個團隊、身份、證書與配置文件就會神奇地出現在這個Xcode中,甚至包括鑰匙鏈中的那些內容。

此外,你可能只想導出身份,而不導出配置文件。這可以通過賬戶首選項窗格View Details對話框中的上下文菜單實現。

如果賬戶首選項窗格View Details對話框中列出的配置文件與會員中心的不同步,那麼請單擊左下角的Download All按鈕。如果這麼做不起作用,那麼請關閉Xcode,然後在Finder中打開用戶目錄下的Library/MobileDevice/Provisioning Profiles目錄,刪除裡面的全部內容,重新啟動Xcode。在賬戶窗格下,配置文件會消失不見,現在再單擊Download All按鈕。Xcode會下載配置文件的新副本,這樣配置文件就會與會員中心同步了。

當設備連接到了計算機上時,它會出現在Xcode的設備窗口中。單擊其名字可以查看設備的信息。你會看到(也可以複製)設備的UDID,以及(也可以刪除)使用Xcode進行開發時在設備上安裝的應用。可以實時查看設備的控制台日誌(這個界面有點隱蔽:請單擊設備窗口主窗格左下角的向上小箭頭)。借助齒輪菜單,你可以查看到安裝到設備上的配置文件。可以查看到設備上出現的崩潰日誌報告;還可以對設備界面進行截屏;在將應用提交到App Store時,你需要這麼做。