天天看點

Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別

Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別

用過 Xcode 做過開發的應該都知道,在左邊的目錄索引中,有藍色的檔案夾,黃色的檔案夾,還有 .bundle 檔案。那麼它們都有什麼差別呢?

先做總結,再詳細解釋:

  • 藍色檔案夾:

    它本身會被自動添加到 Copy Bundle Resources 中,是以将會出現在 mainBundle 中

    它裡面的 .m 不會被添加到編譯源,是以不會被編譯。雖然會被拷貝到 mainBundle,但是想要通路裡面的資源,例如圖檔,plist,那麼還需要指明路徑,例如 [UIImage imageNamed:@”Blue/xxx”];

  • 黃色檔案夾:

    首先,這個檔案夾在finder中你可能看不到,甚至有可能裡面的内容是來自不同的目錄的!是以,一定要好好整理項目中的黃色檔案夾。

    它本身不會被拷貝到 mainBundle ,但是它裡面的資源會被拷貝到 mainBundle 的 根目錄

    它裡面的 .m 會被自動添加到編譯源,是以會被編譯。

  • .bundle 檔案

    其實這個檔案是一個檔案夾,也叫 捆綁包。隻不過被添加了擴充名,可以當做一個檔案來處理。

  • 順便提一下,工程中本身自帶的一個藍色檔案夾:Assets.xcassets 會被壓縮成 .car 檔案,并拷貝到 mainBundle 中。
  • 注意:

    黃色檔案夾 和 藍色檔案夾 有一個本質的差別!

對于藍色檔案夾,它裡面的内容,在 Xcode 工程中 和 finder 中始終是一緻的,是以比較好維護和管理。

對于黃色檔案夾裡面的内容,可以來自不同的目錄,并且,在finder中這個檔案夾不一定是存在的,也可以存在,但是它裡面的内容,是可以不被 Xcode 引用的。

是以,我們一定要妥善處理 黃色檔案夾 。盡量保證 Xcode 工程中和 finder 中保持一緻。最好的做法是:

在 finder 中建立檔案夾,然後拖入工程,選擇 Create groups,Copy items if needed。

删除檔案時,移入廢紙簍;删除檔案夾時,show in finder 把真正的檔案夾也要删掉。

因為黃色檔案夾裡面其實都是類似快捷方式一樣的引用而已。是以我們要避免這種情況:

Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別

在finder中,很明顯,有兩個檔案重複了!但是,在工程中,我可以做到不出錯,就是不引用其中的兩個檔案:

Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別

如圖所示,在工程中,我隻引用了 RCMessages[自定義融雲消息] 檔案夾下的兩個檔案,Model 目錄下的兩個檔案并沒有引用。是以這時候編譯是完全沒有問題的!

但是開發中,我們要完全避免這種狀況的出現!是以我會在finder 中,删除我沒有引用的兩個檔案。

簡而言之,就是保持 工程中 和 finder 中 的檔案一緻。

藍色檔案夾 和 .bundle 是一樣的,是以先以它為示例。

我們将一個含有 .h 和 .m 的檔案夾拖入工程,用以下選項:

Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別

那麼,它和它的子目錄,都會成為藍色的。

Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別

這個時候,我們打開工程配置,看一下這兩個地方:

Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別

首先,我們剛才導入的 model 檔案夾裡面所有的 .m 檔案将不會被編譯,其次,這個 Model 檔案夾會被拷貝到 mainBundle 中。

由此可知,假如 Model 中放有一張名為 [email protected] 和 [email protected] 的圖檔,那我們如果想通路,應該是 [UIImage imageNamed:@”Model/img”]; 這樣通路。因為 imageNamed 預設隻搜尋 mainBundle,而在 mainBundle 裡面,這個圖檔還在 Model 檔案夾下。

接下來,我們來看黃色檔案夾:

Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別

這個時候,我們打開工程配置,看一下這兩個地方:

Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別

首先,我們剛才導入的 Resources 檔案夾裡面所有的 .m 檔案将會被編譯,所有的資源檔案會被拷貝到 mainBundle 中。但其本身并不會被拷貝到 mainBundle,那麼它所有的資源檔案,就在 mainBundle 的根目錄。

.bundle 跟藍色檔案夾是一樣的,就不詳細示範的,不過有一個優點,就是它可以被當做單個檔案對待。

總結:

快看看你的 Copy Bundle Resources 吧!後面的數字代表 mainBundle 根目錄的檔案數,如果這個數字比較大,不妨将資源分類,放在藍色檔案夾 或者 .bundle 檔案中,歸類整理。但是要注意,通路這些資源的時候,路徑不能錯哦~

Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別Xcode工程,藍色檔案夾、黃色檔案夾以及 .bundle檔案的差別