每當(dāng)新創(chuàng)建一個新的iOS項(xiàng)目,系統(tǒng)會默認(rèn)幫我們創(chuàng)建一些文件,下面就來扒一扒這些常見文件都是干什么的。
有過iOS項(xiàng)目開發(fā)經(jīng)驗(yàn)的人都知道:Xcode 6 以后版本的系統(tǒng)生成文件和之前有很大變化,系統(tǒng)取消了一些默認(rèn)生成的文件,這里主要來講Xcode 6 前后的區(qū)別,以便更好的了解這些系統(tǒng)文件。
如圖分別為Xcode 6 前后版本生成的項(xiàng)目文件對比:

透過對比可發(fā)現(xiàn)Xcode 5/6 生成的項(xiàng)目有如下區(qū)別:
1.Xcode 6 之前有Frameworks文件夾【之后取消了】
2.Xcode 6 之前根據(jù)項(xiàng)目名稱命名【之后直接以info命名】
3.Xcode 6 之前項(xiàng)目自動生成一個以項(xiàng)目名命名的PCH文件【之后直接取消了】
下面分別介紹這幾個文件
- info.plist
在Xcode 6 之前以項(xiàng)目名稱命名
Xcode 6 之后直接叫info.plist
info.plist是iOS項(xiàng)目的項(xiàng)目配置文件,它里面配置了項(xiàng)目的基本信息:

從上圖可以看到info.plist文件實(shí)際上是一個Dictionary , 內(nèi)部是根據(jù)不同的key 來設(shè)置對應(yīng)的屬性。
我們可以修改對應(yīng)的key對應(yīng)的屬性值來達(dá)到修改項(xiàng)目配置信息的目的。
注意:
info.plist 展示成這樣是由Xcode解析過的。他真實(shí)的key并不是我們看到的那個。真實(shí)的key 我們可以通過進(jìn)入源代碼看:

// 通過代碼獲取對應(yīng) key 的值
NSString *currentVersion = [[NSBundle mainBundle].infoDictionary valueForKey:@"CFBundleShortVersionString"];
NSLog(@"當(dāng)前版本號 :%@" ,currentVersion);```
2.pch文件
PCH文件是Xcode項(xiàng)目中的預(yù)編譯文件。其中的內(nèi)容在項(xiàng)目編譯之初最先編譯,編譯完成之后整個項(xiàng)目共享。
PCH作用如下:
存放一些公用的宏
防止一些公用頭文件
自定義LOG
**PCH文件在Xcode 6 之后的使用**
由于Xcode 6 之后取消了pch文件,說明Apple不在推薦使用。如果項(xiàng)目需要我們可以通過自己創(chuàng)建PCH文件來使用,步驟如下:
創(chuàng)建新文件-> Other -> PCH File

配置預(yù)編譯文件及相應(yīng)路徑: Build Settings -> Prefix 修改配置信息:

自定義LOG
```// 宏里面可變參數(shù):... // 函數(shù)中可變參數(shù): __VA_ARGS__ #ifdef DEBUG // 調(diào)試階段 #define XYLog(...) NSLog(__VA_ARGS__) #else // 發(fā)布階段 #define XYLog(...) #endif
PCH規(guī)范,區(qū)分項(xiàng)目文件
PCH 是項(xiàng)目中的預(yù)編譯文件,相當(dāng)于是把文件中的內(nèi)容復(fù)到整個項(xiàng)目中,為防止項(xiàng)目使用C語言進(jìn)行混編,C語言的文件中不支持OC特性,我們應(yīng)該區(qū)分開,在pch中添加如下宏```
```#ifdef __OBJC__ /* OBJC */ 中間添加對應(yīng)代碼 #endif /* OBJC */ ``` <br> ```為防止PCH文件的重復(fù)引入,應(yīng)該添加如下宏``` ```objc #ifndef PrefixHeader_pch /* PrefixHeader_pch */ #define PrefixHeader_pch 中間添加對應(yīng)代碼 #endif /* PrefixHeader_pch */```
最終如下:

3. Frameworks文件夾
Frameworks是系統(tǒng)默認(rèn)引入的框架。
在Xcode 6 之前需要開發(fā)者手動導(dǎo)入框架,F(xiàn)rameworks文件夾中的是最常用的Foundation、UIKit等基礎(chǔ)框架,當(dāng)開發(fā)者需要導(dǎo)入其他框架的時候也會導(dǎo)入到里面Xcode 6 之后系統(tǒng)不再生成此文件夾,項(xiàng)目中用到的一些基礎(chǔ)框架系統(tǒng)會默認(rèn)在用的時候加載。當(dāng)開發(fā)者需要導(dǎo)入其他框架的時候也會生成Frameworks文件夾并導(dǎo)入到里面
