讀古今文學網 > iOS編程基礎:Swift、Xcode和Cocoa入門指南 > 6.2 項目窗口 >

6.2 項目窗口

Xcode項目包含了大量的信息,這些信息描述了構成項目的文件以及在構建應用時該如何使用這些文件,比如:

·待編譯的源文件(代碼)。

·.storyboard或.xib文件,它們會以圖形化方式表示界面對象,在應用運行時進行實例化。

·資源,如圖標、圖片或聲音文件,它們是應用的組成部分。

·在構建應用時需要遵循的所有設置(編譯器、鏈接器的指令等)。

·代碼運行時所需的框架。

圖6-1:項目窗口

Xcode項目窗口會展現出所有這些信息,還可以使用、編輯,並在代碼間導航;此外,它還能夠呈現出構建或調試應用的進度與結果。該窗口顯示出了大量信息與功能!項目窗口非常強大和複雜;學習如何使用需要花些時間。下面就來探索這個窗口,看看其構造方式。

項目窗口有4個主要的構成(如圖6-1所示):

1.左邊是導航窗格。你可以通過View→Navigators→Show/Hide Navigator(Command-0)或單擊工具欄中最右側的第1個View按鈕來顯示或隱藏。

2.中間是編輯窗格(簡稱為「編輯器」)。這是項目窗口的主要區域。項目窗口幾乎總會顯示一個編輯窗格,並且還可以同時顯示多個編輯窗格。

3.右邊是輔助窗格。你可以通過View→Utilities→Show/Hide Utilities(Command-Option-0)或單擊工具欄最右側的第3個View按鈕來顯示或隱藏。

4.底部是調試窗格。你可以通過View→Debug Area→Show/Hide Debug Area(Shift-Command-Y)或單擊工具欄最右側的第2個View按鈕來顯示或隱藏。

所有的Xcode鍵盤快捷鍵都可以定制;參見Preferences窗口的Key Binding窗格。我這裡所用的鍵盤快捷鍵都是默認值。

6.2.1 導航窗格

導航窗格就是項目窗口左側的信息列。你主要通過它來控制項目窗口的主要區域會顯示什麼(編輯器)。對於Xcode來說,一個重要的使用模式就是:在導航窗格中選中某個東西,它就會顯示在編輯器中。

你可以切換導航窗格的可見性(View→Navigators→Hide/Show Navigator或Command-0);比如,如果通過導航窗格找到了所需的條目,那麼你可能想暫時隱藏導航窗格來增加屏幕的尺寸(特別是在小顯示器上)。你可以通過拖曳右邊的豎線來改變導航窗格的寬度。

導航窗格本身可以顯示8種不同的信息;這樣實際上會有8種導航器。這是通過上方的8個圖標來表示的;要想在導航器間切換,請使用這8個圖標或相應的鍵盤快捷鍵(Command-1、Command-2等)。如果導航窗格被隱藏了,那麼請按下導航器的鍵盤快捷鍵,這會顯示出導航窗格並切換到相應的導航器上。

根據你在Xcode首選項Behaviors窗格中設置的不同,在執行某個動作時,導航器可能會自動顯示出來。比如,默認情況下,在構建項目時,如果出現了警告或錯誤消息,那麼Issue導航器就會出現。這種自動的行為並不會讓人生厭,因為通常這就是你需要的行為,如果不是,那麼你可以修改它;此外你還可以隨時切換到其他的導航器上。

首先來體驗一下各種導航器吧:

圖6-2:項目導航器

項目導航器(Command-1)

單擊項目導航器中的條目可以在構成項目的文件間導航。比如,在Empty Window目錄中(在項目導航器中,這些類似於目錄的東西實際上叫作分組),單擊AppDelegate.swift文件可以在編輯器中查看其代碼(如圖6-2所示)。

在項目導航器頂層有個藍色的Xcode圖標,它代表Empty Window項目自身;單擊它可以查看與項目及其目標相關的各種設置。在不瞭解的情況下請不要修改任何設置!稍後我將介紹這些設置。

可以通過項目導航器底部的過濾欄限制顯示的文件;如果文件有很多,那麼通過它可以快速找到已知名字的文件。比如,可以在過濾欄搜索框中輸入「delegate」。試驗完後請不要忘記刪除過濾信息。

如果對導航器進行了過濾,那麼它會一直進行過濾,除非將其刪除,否則連關閉項目也不行!常見的一個錯誤是對導航器進行了過濾,但卻忘記了,這樣就看不到結果了(因為你一直在盯著導航器本身,沒看到下面的過濾欄),你還納悶:「我的文件去哪兒了?」

符號導航器(Command-2)

符號就是個名字,通常是類或方法的名字。它有助於代碼導航。比如,你可以選擇過濾器欄中的前兩個圖標(前兩個是藍色的,後一個是深色的),然後快速查看AppDelegate的applicationDidBecomeActive:方法定義。

你可以通過各種方式選擇過濾器欄的圖標以查看符號導航器內容的變化。在過濾欄的搜索框中輸入一些字符以限制符號導航器中的內容;比如,你可以嘗試在搜索框中輸入「active」,然後看看發生了什麼變化。

圖6-3:搜索導航器

如果第2個過濾器圖標沒有高亮,那就會顯示出所有符號,包括Swift與Cocoa所定義的內容(如圖4-1所示)。這是查看對像類型的一種絕佳方式,同時還可以快速進入聲明這些類型的頭文件中(一種重要的文檔形式,參見第8章)。

搜索導航器(Command-3)

該強大的搜索功能用於尋找項目中的文本。你還可以通過Find→Find in Project(Command-Shift-F)調出搜索導航器。搜索框上的單詞會展示出現在所用的選項;他們是彈出菜單,可以通過單擊其中一個來改變選項。試著搜索「delegate」(如圖6-3所示)。單擊任何一條搜索結果就會跳轉到代碼中該文本出現的位置。

在搜索框的左下方是當前的搜索區域。可以單擊它來查看搜索域面板。你可以限制只對項目中的某個分組(目錄)進行搜索,還可以定義新的域:單擊New Scope會彈出域配置窗口,你可以從中查看選項。域是針對每個用戶而不是項目定義的;這裡所創建的域也會出現在其他項目中。

可以在其他搜索域(位於底部的過濾欄)中輸入內容來進一步限制顯示的搜索結果(現在我不打算再介紹過濾欄了,不過每個導航器都有某種形式的過濾欄)。

問題導航器(Command-4)

問題導航器主要在代碼中出現問題時使用。它指的並不是項目中有問題;而是Xcode的一個術語,指的是項目構建時所出現的警告與錯誤消息。

要想查看問題導航器,你需要給代碼製造點問題才行。轉到(你應該知道如何做了,至少有3種方式)文件AppDelegate.swift,在文件頂部最後一行註釋後面的空行下及import行之上輸入howdy。構建項目(Command-B)。這時問題導航器會顯示出一些錯誤消息,表示編譯器無法處理這種出現在不合法位置處的不合法的單詞。單擊其中一個問題可以在文件中查看它。在代碼中,問題「氣球」會出現在有問題這一行的右側;如果覺得有干擾,你可以通過Editor→Issues→Hide/Show All Issues(Command-Control-M)改變其可見性。

既然你已經讓Xcode報錯了,那麼請選擇「howdy」並將其刪除;保存並再次構建,這時問題會消失不見。真希望實際開發中也能這麼簡單!

測試導航器(Command-5)

該導航器會列出測試文件以及每個測試方法,同時還可以運行測試並查看測試是通過還是失敗了。測試代碼並不屬於應用的一部分;它會調用應用代碼以檢測其行為是否與期望一致。第9章將會對測試進行更多的介紹。

調試導航器(Command-6)

在默認情況下,該導航器只在調試暫停時才會出現。對於Xcode來說,運行與調試之間的差別並不明顯;環境都是一樣的。差別只不過在於是否使用了斷點(第9章將會詳細介紹關於調試的相關信息)。

要想查看調試導航器,你需要為代碼設定斷點。再一次轉到文件AppDelegate.swift,選中return true這一行,並選擇Debug→Breakpoints→Add Breakpoint at Current Line,這時藍色的斷點箭頭就會出現在該行。運行項目。在默認情況下,當遇到斷點時,導航窗格會切換到調試導航器,調試窗格會出現在窗口下方。調試項目時,你很快就會熟悉這一總體佈局(如圖6-4所示)。

圖6-4:調試佈局

調試導航器以幾個數字與圖形化的分析信息展示開始(至少會有CPU、內存、磁盤與網絡);單擊其中一個可以在編輯器中看到更多的圖形化信息。在應用運行時,可以通過這些信息追蹤應用可能的錯誤行為,從而避免了運行Instruments輔助工具(第9章將會介紹)的複雜性。要想切換調試導航器頂部分析信息的可見性,請單擊「gauge」圖標(位於進程名右側)。

調試導航器還會顯示出調用堆棧,其中會顯示出暫停位置處的嵌套方法名;如你所想,你可以通過單擊方法名來導航。你可以通過導航器底部過濾欄中的第1個按鈕來縮短或增加列表。可以通過進程名右側的第2個圖標在根據線程顯示與根據隊列顯示之間進行切換。

調試窗格包含了兩個子窗格,你可以根據需要顯示或隱藏它們(View→Hide/Show Debug Area或Command-Shift-Y):

變量列表(位於左側)

裡面是調用堆棧中所選方法作用域中的變量。

控制台(位於右側)

調試器會將文本消息顯示在這裡;你可以通過這裡查看到運行的應用所拋出的異常,同時還可以讓代碼有意發送描述應用進程與行為的日誌消息。這些消息非常重要,因此在應用運行時請密切關注控制台。還可以使用控制台向調試器輸入命令。在暫停時,這通常是比變量列表更好的查看變量值的方式。

可以通過窗格右下角的兩個按鈕來隱藏變量列表和控制台。還可以通過View→Debug Area→Activate Console來顯示出控制台。

可以通過視圖調試查看應用的視圖層次結構。要想切換到視圖調試,請選擇Debug→View Debugging→Capture View Hierarchy(或單擊調試窗格頂部欄中的調試視圖層次按鈕)。

斷點導航器(Command-7)

該導航器會列出所有斷點。目前只有一個斷點導航器,但在調試有很多斷點的大型項目時,你會覺得該導航器很有用。此外,你可以在這裡創建特殊斷點(如符號斷點),通常這是管理現有斷點的中心位置。我們會在第9章對其進行詳細介紹。

報告導航器(Command-8)

該導航器會列出最近的主要動作,如項目的構建或運行(調試)。在執行某個動作時,單擊清單就可以查看(在編輯器中)到所生成的報告。報告可能包含其他途徑無法顯示的信息,此外,你還可以通過它回想起最近的一些消息(比如,「剛才調試時出現了哪個異常」)。

舉個例子,通過單擊成功構建的清單,然後通過報告上方的過濾器開關來選擇顯示所有消息,那麼我們可以看到構建的每一個步驟(如圖6-5所示)。要想顯示某一步的所有文本,請單擊該步驟,然後單擊最右邊的Expand Transcript按鈕(參見Editor菜單中的菜單項)。

圖6-5:查看報告

在通過單擊導航窗格進行導航時,不同的單擊方式會影響導航的結果。在默認情況下,按住Option並單擊會在輔助窗格中導航(稍後將會介紹)、雙擊會打開新窗口,按住Option與Shift並單擊會彈出一個小的智能窗格,你可以指定導航到哪裡(新窗口、新頁簽,或新的輔助窗格)。要想瞭解管理這些單擊的設置,請訪問Xcode首選項的導航窗格。

6.2.2 輔助窗格

輔助窗格是位於項目窗口右邊的那一列。它包含了查看器,這些查看器提供了關於當前所選以及設置的信息;如果設置可以修改,那麼可以在這裡進行修改。它還包含了編輯項目時所需的一些庫(所需的對象來源)的信息。在編輯.storyboard或.xib文件(第7章將會介紹)時會凸顯其重要性。不過,它對於代碼編輯來說也很有用,因為快速幫助(文檔的一種形式,第8章將會介紹)也會顯示在這裡;輔助窗格還是代碼片段的來源(參見第9章)。要想顯示或隱藏輔助窗格,請選擇View→Utilities→Hide/Show Utilities(Command-Option-0)。你可以通過拖曳其左邊的豎線來改變輔助窗格的寬度。

輔助窗格包含了大量控制板,它們會形成多個集合併被劃分到兩個主要的分組中:窗格的上半部分與下半部分。你可以通過拖曳它們之間的水平線來改變二者的相對高度。

上半部分

輔助窗格上半部分會有哪些內容取決於當前編輯器所選內容。主要情況有如下4種:

正在編輯代碼文件

輔助窗格的上半部分要麼顯示文件查看器,要麼顯示快速幫助。你可以通過輔助窗格上半部分頂部的圖標或鍵盤快捷鍵(Command-Option-1、Command-Option-2)來切換它們。文件查看器很少會用到,但快速幫助則可作為文檔來用(參見第8章)。文件查看器包含了多個部分,每個部分都可以通過單擊頭部來展開或收起。

正在編輯.storyboard或.xib文件

除了文件查看器和快速幫助,輔助窗格的上半部分還可以顯示身份查看器(Command-Option-3)、屬性查看器(Command-Option-4)、尺寸查看器(Command-Option-5)和連接查看器(Command-Option-6)。它們包含了多個部分,每一部分都可以通過單擊頭部來展開或收起。

正在編輯資源文件

除了文件查看器和快速幫助,屬性查看器還會列出關於所選資源集或資源的更多信息。你可以通過它確定列出所選資源集的哪些變體,並設置資源標籤;如果所選資源是圖片,那麼你可以配置關於它的一些額外信息。

正在調試視圖層次

除了文件查看器和快速幫助,對像查看器可以顯示關於當前所選視圖的信息,尺寸查看器可以顯示當前所選視圖的大小、位置與約束。

下半部分

輔助窗格的下半部分會顯示四種庫之一。你可以通過單擊頂部的圖標或鍵盤快捷鍵來切換顯示的庫。這些庫分別是文件模板庫(Command-Option-Control-1)、代碼片段庫(Command-Option-Control-2)、對像庫(Command-Option-Control-3)以及媒體庫(Command-Option-Control-4)。對像庫是其中最為重要的;在編輯.storyboard或.xib文件時會經常使用到它。

要想查看關於庫中當前所選條目的描述信息,請按空格鍵。

6.2.3 編輯器

項目窗口中間是編輯器。你在這裡完成實際的工作,閱讀並編寫代碼(參見第9章),在.storyboard或.xib文件中設計界面(參見第7章)。編輯器是項目窗口的核心。你可以關閉導航窗格、輔助窗格和調試窗格,但如果項目窗口中沒有編輯器就完全不行了(雖然你可以通過調試窗格來使用編輯器)。

編輯器提供了自己的導航形式,即頂部的跳轉欄。它不僅會以分層方式顯示出當前正在編輯的文件,你還可以通過它切換到不同的文件。特別地,跳轉欄中的每個路徑組成也是個彈出菜單。這些彈出菜單可通過單擊每個路徑組成來調出,或使用鍵盤快捷鍵(在View→Standard Editor子菜單中的第2部分)。比如,Control-4會彈出分層的彈出菜單,你完全可以通過鍵盤在菜單中導航,這樣就可以選擇項目中的不同文件來編輯了。此外,跳轉欄中的每個彈出菜單也是個搜索框;你可以從跳轉欄中彈出菜單並輸入內容。通過這種方式,即便項目導航器沒有顯示出來,你也可以導航項目。

跳轉欄最左側的符號(Control-1)會彈出一個層次化菜單(相關條目菜單),可以導航到與當前文件相同的文件上。這裡出現的內容不僅取決於當前正在編輯的文件,還與該文件當前所選內容相關。這是個非常強大且便捷的菜單,你應該花些時間好好研究它。你可以導航到相關類文件和頭文件(父類、子類與兄弟類;兄弟類指的是擁有共同父類的類);你可以查看被當前所選方法調用的方法,並調用當前所選的方法。在Xcode 7中,選擇Generated Interface可以查看到Swift文件的公開API以及Swift可以看到的Objective-C頭文件。

編輯器會記住所顯示的歷史信息,你可以通過跳轉欄中的後退按鈕回到之前查看的內容,這也是個彈出菜單,可以從中進行選擇。此外,還可以選擇Navigate→Go Back(Command-Control-Left)。

在開發項目時,你很有可能想要同時編輯多個文件,或獲得同一個文件的多個視圖以便能夠同時編輯文件的兩個區域。這可以通過3種方式實現:輔助窗格、頁簽與第二窗口。

輔助窗格

你可以通過輔助窗格將一個編輯器分割為多個編輯器。要想做到這一點,請單擊工具欄中的第2個編輯器按鈕(「顯示輔助編輯器」),或選擇View→Assistant Editor→Show Assistant Editor(Command-Option-Return)。此外在默認情況下,在導航時按住Option鍵會打開一個輔助窗格;比如,按住Option鍵並單擊導航窗格或按住Option鍵並選擇跳轉欄,這會打開一個輔助窗格(如果已經有輔助窗格,那麼就會導航到現有的輔助窗格)。要想移除輔助窗格,請單擊工具欄中的第1個編輯器按鈕,或選擇View→Standard Editor→Show Standard Editor(Command-Return),還可以單擊輔助窗格右上角的X按鈕。

你可以確定輔助窗格的佈局。要想做到這一點,請選擇View→Assistant Layout子菜單。一般情況下,我更喜歡All Editors Stacked Vertically,但這僅僅是個人習慣而已。一旦打開了輔助窗格,你就可以進一步將其分割為更多的輔助窗格。要想做到這一點,請單擊輔助窗格右上方的「+」按鈕。要想隱藏輔助窗格,請單擊右上方的X按鈕。

輔助窗格之所以是輔助窗格,而不僅僅是一種分割窗格編輯器,原因在於它與主編輯器窗格之間可以保持著特殊的關係。默認情況下,主編輯器窗格的內容是由你在導航窗格中所單擊的條目來決定的;同時,輔助窗格可以響應主編輯器窗格中正在編輯的文件,它會智能地改變正在編輯(輔助窗格)的文件,這叫作追蹤。要想配置輔助窗格的追蹤行為,請使用跳轉欄中的第1個組件(Control-4)。這是個追蹤菜單;它類似於剛才介紹的相關條目菜單,不過選擇某個類別會決定自動化的追蹤行為。如果某個類別有多個文件,那麼一對箭頭按鈕就會出現在跳轉欄的最右側,你可以通過它們進行導航(或使用第2個跳轉欄組件,Control-5)。可以通過將輔助窗格的第1個跳轉欄組件設為Manual來關閉追蹤。

如果想要關閉輔助窗格,但又想繼續編輯內容,請先將輔助窗格的內容移動到主編輯器窗格中(Navigate→Open In Primary Editor)。

頁簽

你可以將整個項目窗口界面表示為一個頁簽。要想做到這一點,請選擇File→New→Tab(Command-T),如果之前並未顯示出頁簽欄,那麼這會將其顯示出來(就在工具欄下面)。頁簽界面的使用就像Safari等應用一樣。你可以通過單擊頁簽或使用Command-Shift-}來切換頁簽。一開始,新的頁簽看起來與建立頁簽的原始窗口別無二致。不過現在你可以在頁簽上做一些修改,即改變顯示的窗格或編輯的文件,同時又不會影響其他頁簽。這樣就可以得到項目的多個視圖。你可以為每個頁簽添加一個描述性的名字:雙擊頁簽名就可以進行編輯。

第二窗口

第二項目窗口類似於頁簽,但它是個獨立的窗口,而頁簽則位於相同的窗口中。要想創建第二窗口,請選擇File→New→Window(Command-Shift-T)。此外,你還可以將頁簽拖曳出當前的窗口而使之成為一個窗口。

頁簽與第二窗口之間的差別並不明顯;無論使用哪一個,無論出於何種目的其實都是習慣和方便的問題。我發現第二窗口的優勢在於你可以同時將其看作主窗口,這個窗口會小一些。這樣,如果有文件頻繁被引用,那麼我會使用第二窗口作為編輯器來顯示該文件,它不會佔據太多屏幕空間,也不需要額外的窗格。

頁簽與窗口都擁有自定義行為。比如,如前所述,調試時能夠查看控制台是非常重要的;我喜歡在滿屏項目窗口中查看,不過還希望可以切換回來查看代碼。因此,我創建了一個自定義行為(單擊Preferences窗口Behaviors窗格底部的+按鈕),它會執行兩個動作:在活動窗口中顯示出名為Console的頁簽,並顯示出Console View調試器。此外,我還為該行為指定了一個鍵盤快捷鍵。這樣,任何時候就都可以通過鍵盤快捷鍵切換至Console頁簽了(如果不存在則創建),這只會顯示出控制台。它就是一個頁簽,因此可以通過Command-Shift-}在它與代碼間切換。

有多種方式可以改變編輯器中的內容,導航器並不會自動與這些變更進行同步。要想從項目導航器中選擇在當前編輯器中顯示的文件,請選擇Navigate→Reveal in Project Navigator。