讀古今文學網 > iOS編程基礎:Swift、Xcode和Cocoa入門指南 > 6.3 項目文件及其依賴 >

6.3 項目文件及其依賴

項目導航器(Command-1)中的第1項表示項目本身(在本章之前創建的Empty Window項目中,它叫作Empty Window)。以層次方式依賴它的則是用於項目構建的各種條目。這些條目與項目本身都對應於磁盤上項目目錄中的條目。

為了瞭解這種對應關係,我們同時在Finder和Xcode項目窗口中看一看。在項目導航器中選中項目清單,然後選擇File→Show in Finder。Finder會顯示出項目目錄中的內容(如圖6-6所示)。

圖6-6:項目導航器與項目目錄

然而,絕對不要在Finder中修改項目目錄中的任何文件,除了雙擊項目文件以打開項目。不要將任何文件直接放到項目目錄中。不要刪除項目目錄中的任何文件。不要重命名項目目錄中的任何文件。重申一次,不要修改項目目錄中的任何文件!請通過Xcode的項目窗口來處理項目(如果你是個Xcode超級用戶,那麼你應該清楚何時可以違背該原則。但現在請嚴格遵守該原則)。

之所以會有上述警告,原因在於項目期望項目目錄中的文件能夠符合一定的格式。如果直接在Finder中對項目目錄進行修改,那麼項目目錄就會被破壞,這也會破壞項目。當在項目窗口中工作時,Xcode本身會對項目目錄做必要的修改,這不會導致任何問題。

項目目錄中最重要的文件是Empty Window.xcodeproj。它是項目文件,對應於項目導航器中所列出的項目。Xcode關於項目的所有信息(包含了哪些文件以及如何構建項目)都存儲在該文件中。要想從Finder中打開項目,請雙擊項目文件。此外,還可以將項目目錄拖曳到Xcode的圖標(位於Finder、Dock或應用目錄中)上,Xcode就會找到該項目文件並將其打開;你永遠都不需要打開項目目錄!

項目導航器中顯示的分組與文件是按照層次結構依賴於項目文件的,它們對應於磁盤上的文件,這一點可以通過Finder看到(圖6-6)。回憶一下,分組是一個技術術語,對應於項目導航器中所顯示的類似於目錄的對象:

·Empty Window分組直接對應於磁盤上的Empty Window目錄。項目導航器中的分組並不一定對應於Finder中磁盤上的目錄;同時,Finder中磁盤上的目錄也不一定對應於項目導航器中的分組。不過在該示例中,二者之間存在著對應關係!

·Empty Window分組中的文件(如AppDelegate.swift)對應於磁盤上Empty Window目錄中的真實文件。如果創建了其他代碼文件(在實際開發中,你肯定會在項目開發的過程中創建文件),那麼你會將這些文件放在項目導航器的Empty Window分組中,這樣它們就會位於磁盤上的Empty Window目錄中。(然而這麼做並不是必需的;文件可以位於任何地方,項目也不會出現任何問題。)

·Empty Window分組中的兩個文件Main.storyboard與LaunchScreen.storyboard位於Finder的Base.lproj目錄中,該目錄並沒有出現在項目導航器中。這與本地化有關,我將在第9章對其進行介紹。

·項目導航器中的條目Assets.xcassets對應於磁盤上專門的結構化目錄Assets.xcassets。這是個資源目錄;你可以在Xcode中向資源目錄添加圖片,它會在磁盤上維護該目錄。在本章後面以及第9章將會詳細介紹資源目錄。

你可能想要找到諸如此類的所有不一致的地方。千萬不要這麼做!記住,不要直接通過Finder操縱磁盤上的項目目錄。你已經看到了,並且知道它裡面有內容,同時也清楚它與項目導航器之間存在一定的關聯關係。將注意力放在項目導航器上,在這裡修改項目,這樣就不會出現任何問題了。

在開發項目和向其中添加文件時,你可以隨意向項目導航器中添加額外的分組。分組的目的旨在讓項目導航器更好用!它們並不會影響應用的構建方式,在默認情況下,也不會對應於磁盤上的任何目錄;它們只是為了在項目導航器中更方便地進行組織。要想創建新的分組,請選擇File→New→Group。要想重命名分組,請在項目導航器中將分組選中,然後按下回車鍵使分組名變成可編輯狀態。比如,如果有些代碼文件與應用有時會彈出的登錄界面相關,那麼你可以將其放到Login分組中。如果應用包含了一些聲音文件,那就可以將其放到Sounds分組中,諸如此類。

Products分組及其內容並不對應於項目目錄中的任何一項。Xcode會生成對可執行包的引用(通過構建項目中的每個目標生成),按照慣例,這些引用會出現在Products分組中。

另一個便捷的分組是Frameworks分組,它會列出代碼所依賴的框架。代碼會依賴一些框架,但在默認情況下,這些框架並不會出現在項目導航器中,項目導航器中沒有Frameworks分組,因為這些框架並沒有顯式鏈接到構建中;相反,代碼會使用模塊,這意味著文件頂部的import語句就可以隱式鏈接了。不過,如果顯式鏈接到了某個框架,那麼它就會列在項目導航器中;接下來,你會創建一個Frameworks分組,將這些框架放到該分組中。本章後面將會對框架進行介紹。