iOS項(xiàng)目中常見(jiàn)的文件

每當(dāng)新創(chuàng)建一個(gè)新的iOS項(xiàng)目,系統(tǒng)會(huì)默認(rèn)幫我們創(chuàng)建一些文件,下面就來(lái)扒一扒這些常見(jiàn)文件都是干什么的。

有過(guò)iOS項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn)的人都知道:Xcode 6 以后版本的系統(tǒng)生成文件和之前有很大變化,系統(tǒng)取消了一些默認(rèn)生成的文件,這里主要來(lái)講Xcode 6 前后的區(qū)別,以便更好的了解這些系統(tǒng)文件。

如圖分別為Xcode 6 前后版本生成的項(xiàng)目文件對(duì)比:


Xcode6前后文件對(duì)比.png

透過(guò)對(duì)比可發(fā)現(xiàn)Xcode 5/6 生成的項(xiàng)目有如下區(qū)別:

  1. Xcode 6 之前有 Frameworks文件夾【之后取消了】
  2. Xcode 6 之前根據(jù)項(xiàng)目名稱(chēng)命名【之后直接以 info命名】
  3. Xcode 6 之前項(xiàng)目自動(dòng)生成一個(gè)以項(xiàng)目名命名的PCH文件【之后直接取消了】

下面分別介紹這幾個(gè)文件

1. info.plist

  • 在Xcode 6 之前以項(xiàng)目名稱(chēng)命名
  • Xcode 6 之后直接叫 info.plist

info.plist是iOS項(xiàng)目的項(xiàng)目配置文件,它里面配置了項(xiàng)目的基本信息:


Snip20170412_3.png

從上圖可以看到info.plist文件實(shí)際上是一個(gè) Dictionary , 內(nèi)部是根據(jù)不同的 key 來(lái)設(shè)置對(duì)應(yīng)的屬性。

我們可以修改對(duì)應(yīng)的key對(duì)應(yīng)的屬性值來(lái)達(dá)到修改項(xiàng)目配置信息的目的。

注意:
info.plist 展示成這樣是由Xcode解析過(guò)的。他真實(shí)的key并不是我們看到的那個(gè)。真實(shí)的key 我們可以通過(guò)進(jìn)入源代碼看:

Snip20170412_4.png
// 通過(guò)代碼獲取對(duì)應(yīng) key 的值
NSString *currentVersion = [[NSBundle mainBundle].infoDictionary valueForKey:@"CFBundleShortVersionString"];
    
NSLog(@"當(dāng)前版本號(hào) :%@" ,currentVersion);

2. pch文件

PCH文件是Xcode項(xiàng)目中的預(yù)編譯文件。其中的內(nèi)容在項(xiàng)目編譯之初最先編譯,編譯完成之后整個(gè)項(xiàng)目共享。

PCH作用如下:

  • 存放一些公用的宏
  • 防止一些公用頭文件
  • 自定義LOG

PCH文件在Xcode 6 之后的使用

由于Xcode 6 之后取消了pch文件,說(shuō)明Apple不在推薦使用。如果項(xiàng)目需要我們可以通過(guò)自己創(chuàng)建PCH文件來(lái)使用,步驟如下:

  1. 創(chuàng)建新文件 -> Other -> PCH File


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


    Snip20170412_6.png
  3. 自定義LOG

// 宏里面可變參數(shù):...
// 函數(shù)中可變參數(shù): __VA_ARGS__

#ifdef DEBUG // 調(diào)試階段
#define XYLog(...)  NSLog(__VA_ARGS__)

#else // 發(fā)布階段

#define XYLog(...)

#endif
  1. PCH規(guī)范,區(qū)分項(xiàng)目文件
    • PCH 是項(xiàng)目中的預(yù)編譯文件,相當(dāng)于是把文件中的內(nèi)容復(fù)到整個(gè)項(xiàng)目中,為防止項(xiàng)目使用C語(yǔ)言進(jìn)行混編,C語(yǔ)言的文件中不支持OC特性,我們應(yīng)該區(qū)分開(kāi),在pch中添加如下宏
#ifdef __OBJC__ /* OBJC */
    
中間添加對(duì)應(yīng)代碼
    
#endif /* OBJC */



為防止PCH文件的重復(fù)引入,應(yīng)該添加如下宏

#ifndef PrefixHeader_pch /* PrefixHeader_pch */
#define PrefixHeader_pch

中間添加對(duì)應(yīng)代碼

#endif /* PrefixHeader_pch */

最終如下:

Snip20170412_9.png

3. Frameworks文件夾

Frameworks是系統(tǒng)默認(rèn)引入的框架。

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


    Snip20170412_1.png

4. Assests.xcassests 和 LaunchScreen.storyboard

兩者分別用于 app 部署時(shí)候設(shè)置 AppIcon 和 啟動(dòng)圖。

  • 在Xcode 6 之前設(shè)置 AppIcon 默認(rèn)需要在 s.xcassests -> AppIcon 中設(shè)置。同樣啟動(dòng)圖也是在 Assests.xcassests 中自己生成一個(gè) Assest 設(shè)置啟動(dòng)圖。
  • Xcode 6 之后蘋(píng)果推出 LaunchScreen.storyboard 來(lái)用來(lái)更方便的設(shè)置啟動(dòng)圖。

兩者區(qū)別和各種利弊:

  • 優(yōu)先級(jí) : LaunchScreen > LaunchImage(Assest)
如果在 Xcode 中設(shè)置了使用LaunchImage不起作用
1. command + shift + k 清理緩存
2. 直接刪除程序,重新運(yùn)行
3. 如果使用launchImage 必須讓美工提供各種合適尺寸的啟動(dòng)圖片
  • LaunchScreen 在 Xcode 6 之后推出。它的優(yōu)勢(shì):
1. 自動(dòng)識(shí)別當(dāng)前真機(jī)或者模擬器的尺寸,
2. 只要讓美工提供一張可以拉伸的圖片即可
3. 可以展示更過(guò)的內(nèi)容,和編輯一個(gè)StoryBoard頁(yè)面一樣
4. LaunchScreen底層實(shí)現(xiàn)是把 LaunchScreen截屏,生成一張圖片作為啟動(dòng)圖使用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容