Xcode的Build Settings分析

開發(fā)之余,對(duì)于Xcode工程配置中Build Settings了解不夠清晰準(zhǔn)確,通過查閱資料全庸,希望能夠通過這篇文章加深Build Setting的理解忧风,并記錄分享默色。

1. Architectures

xcode-architectures
Additional SDKs : 在編譯時(shí)要附加的SDK。

Architectures : 支持的處理器架構(gòu)。支持的指令集越多腿宰,就會(huì)編譯出包含多個(gè)指令集代碼的數(shù)據(jù)包呕诉,對(duì)應(yīng)生成二進(jìn)制包就
會(huì)越大,最終目標(biāo)文件也會(huì)變大吃度。

Base SDK : 當(dāng)前編譯用的SDK版本甩挫。

Build Active Architecture Only : 如果此項(xiàng)為Yes,則Xcode會(huì)根據(jù)當(dāng)前所連接的設(shè)備版本只將相應(yīng)的Architecture編
譯入App椿每。否則會(huì)同時(shí)編譯'Valid Architectures'中的指令集伊者。建議在Debug模式下設(shè)置為Yes,Release模式下設(shè)置為No间护,
加快編譯速度亦渗。

Supported Platform : App支持的平臺(tái)。

Valid Architectures : 限制可能被支持的指令集的范圍汁尺,也就是Xcode編譯出來的二進(jìn)制包類型最終從這些類型產(chǎn)生法精,而
編譯出哪種指令集的包,將由Architectures與Valid Architectures(因此這個(gè)不能為空)的交集來確定痴突。

Valid Architectures指令集代表什么搂蜓?

armv7|armv7s|arm64都是ARM處理器的指令集
i386|x86_64 是Mac處理器的指令集
i386是針對(duì)intel通用微處理器32位處理器
x86_64是針對(duì)x86架構(gòu)的64位處理器

arm64:iPhone6s | iphone6s plus|iPhone6| iPhone6 plus|iPhone5S | iPad Air| iPad mini2(iPad 
mini with Retina Display)
armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)
armv7:iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod Touch 3G|iPod Touch4

模擬器32位處理器測(cè)試需要i386架構(gòu),模擬器64位處理器測(cè)試需要x86_64架構(gòu)辽装,
真機(jī)32位處理器需要armv7,或者armv7s架構(gòu)帮碰,真機(jī)64位處理器需要arm64架構(gòu)。

2. Assets

xcode-assets
Asset Pack Manifest URL Prefix : 資源包清單的下載路徑URL前綴
Embed Asset Packs In Product Bundle : 是否將資源包嵌入產(chǎn)品的bundle中
Enable On Demand Resources : 是否開啟按需獲取資源功能
On Demand Resources Initial Install Tags : 按需加載資源時(shí)的初始安裝資源文件標(biāo)簽
On Demand Resources Prefetch Order : 按需加載資源時(shí)預(yù)加載的標(biāo)簽順序

3. Build Locations

xcode-locations
Build Products Paths : 產(chǎn)品文件和編譯中間文件的根目錄如迟。產(chǎn)品文件和編譯時(shí)臨時(shí)文件都將放在這個(gè)目錄的子目錄中收毫。

Intermediate Build Files Path : 編譯時(shí)臨時(shí)文件的存放位置。編譯中間文件格式為product name+.build殷勘,
如MyProduct.build此再。

Per-configuration Build Products Path : 當(dāng)前編譯設(shè)置下的產(chǎn)品存放位置。

4. Build Options

xcode-options
Always Embed Swift Standard Libraries : 始終嵌入swift標(biāo)準(zhǔn)庫(kù)玲销。對(duì)于未使用swift代碼的情況可以設(shè)置為NO输拇。

Build Libraries for Distribution : Xcode11新增,構(gòu)建庫(kù)時(shí)選擇Yes贤斜。

Build Variants : 此項(xiàng)可以設(shè)定生成產(chǎn)品的變種策吠。您可以創(chuàng)建額外的產(chǎn)品變種作為特殊用途。例如瘩绒,您可以使用編譯配置
文件的名稱來創(chuàng)建一個(gè)高度定制的二進(jìn)制文件猴抹。
Build Variants的值有三個(gè) : 
    normal-用于生成普通的二進(jìn)制文件;
    profile-用于可以生成配置信息的二進(jìn)制文件锁荔;
    debug-用于生成帶有debug標(biāo)志蟀给、額外斷言和診斷代碼的二進(jìn)制文件。
    
Compiler For C/C++/Objective-C : 選擇使用的編譯器。

Debug Information Format : 記錄debug信息的文件格式跋理。共有DWARF with dSYM File和DWARF兩種可以選擇择克。建議
選擇DWARF with dSYM File。DWARF是較老的文件格式前普,會(huì)在編譯時(shí)將debug信息寫在執(zhí)行文件中肚邢。

Enable BitCode : bitcode是被編譯程序的一種中間形式的代碼。包含bitcode配置的程序?qū)?huì)在App store上被編譯
和鏈接拭卿。bitcode允許蘋果在后期重新優(yōu)化我們程序的二進(jìn)制文件骡湖,而不需要我們重新提交一個(gè)新的版本到App store上。
對(duì)應(yīng)iOS峻厚,bitcode是可選的勺鸦;對(duì)于watchOS,bitcode是必須的目木;Mac OS不支持bitcode。

Enable Index-While-Building Functionality : 控制編譯器在編譯時(shí)是否應(yīng)該發(fā)出索引數(shù)據(jù)懊渡。

Enable Testability : 是否允許測(cè)試性刽射。當(dāng)該設(shè)置被激活時(shí),將使用適合運(yùn)行自動(dòng)化測(cè)試的選項(xiàng)構(gòu)建產(chǎn)品剃执,例如讓測(cè)試可以訪問私有接口誓禁。這個(gè)選項(xiàng)可能導(dǎo)致編譯速度變慢。

Excluded Source File Names : 在編譯階段不包括的源文件肾档。這個(gè)設(shè)置一般用于定義復(fù)雜的篩選器摹恰,比如,
*.$(CURRENT_ARCH).c排除基于正在構(gòu)建的體系結(jié)構(gòu)的特定文件怒见。

Generate Profiling Code : 是否生成配置代碼俗慈。是否生成分析代碼,此選項(xiàng)為Yes的時(shí)候遣耍,編譯器和鏈接器會(huì)生成分析
代碼闺阱。

Precompiled Header Uses Files From Build Directory : 預(yù)編譯build路徑中的頭文件。由于編譯過程比較耗時(shí)舵变,且兩次編譯之間未必會(huì)改動(dòng)所有文件酣溃。因此將不會(huì)改動(dòng)的常用文件保留成預(yù)編譯文件將大大減少編譯時(shí)的時(shí)間。建議這一項(xiàng)選擇YES纪隙。

Require Only App-Extension-Safe API : 如果我們要想應(yīng)用擴(kuò)展使用內(nèi)嵌框架赊豌,那么首先要配置一下。將target的Require Only App-Extension-Safe API選項(xiàng)設(shè)置為Yes绵咱。如果你不這樣設(shè)置碘饼,那么Xcode會(huì)向你提示警告:linking against dylib not safe for use in application extensions。

Scan All Source Files for Includes : 掃描include文件所包含的所有源文件。

Validate Built Product : 這個(gè)選項(xiàng)決定了是否在編譯的時(shí)候進(jìn)行驗(yàn)證派昧。驗(yàn)證的內(nèi)容和app store的審查內(nèi)容一致黔姜。默認(rèn)選項(xiàng)是debug時(shí)不驗(yàn)證,release時(shí)驗(yàn)證蒂萎。

5. Search Paths

xcode-searchpaths
Always Search User Paths : 是否搜索用戶指定的路徑秆吵,默認(rèn)No。
Framework Search Paths : 工程引用的framework搜索路徑五慈。
Header Search Paths : 工程中引用的頭文件搜索路徑搞莺。
Library Search Paths : library搜索路徑,比如靜態(tài).a庫(kù)悲关。
Sub-Directories to Exclude in Recursive Searches : 指定哪些類型的子目錄在遞歸查找時(shí)忽略蒲列。
Sub-Directories to include in Recursive Searches : 指定哪些類型的子目錄在遞歸查找時(shí)包含。
User Header Search Paths : 設(shè)置頭文件搜索路徑争拐,這個(gè)只有當(dāng)Always Search User Path開啟后才有效腋粥。

6. Packaging

xcode-packasing
Defines Module : 是否定義模塊。默認(rèn)App類的工程為No架曹,F(xiàn)ramwork工程默認(rèn)為Yes隘冲。

Expand Build Setting in Info.plist File : 告訴編譯器是否處理info.plist。默認(rèn)是Yes绑雄。這是一個(gè)很大的特點(diǎn)展辞,因?yàn)樗苊饬擞懈鶕?jù)您的構(gòu)建設(shè)置和配置不同的Info.plist中,避免您在多個(gè)地方修改設(shè)置万牺。 但是如果你真的不想要它罗珍,只需在項(xiàng)目或目標(biāo)的構(gòu)建設(shè)置中關(guān)閉此設(shè)置。

Info.plist File : 創(chuàng)建工程后默認(rèn)會(huì)創(chuàng)建一個(gè)info.plist文件脚粟。也可以根據(jù)需要進(jìn)行主動(dòng)創(chuàng)建覆旱。
Private Headers Folder Path : 私有頭文件的存放位置。
Product Bundle Identifier : 產(chǎn)品bundle id核无。
Product Module Name : 應(yīng)用模塊名稱通殃。
Product Name : 應(yīng)用名稱。
Public Headers Folder Path : 公共頭文件路徑厕宗。
Wrapper Extension : 打包的擴(kuò)展名画舌,默認(rèn)app。

7. Signing

xcode-signing
Code Signing Entitlements : 授權(quán)機(jī)制已慢。在Xcode的capabilities選項(xiàng)卡下選擇一些選項(xiàng)后曲聂,Xcode就會(huì)生成這樣一段XML,Xcode會(huì)自動(dòng)生成一個(gè)entitlements文件佑惠,然后再需要的時(shí)候往里面添加條目朋腋。當(dāng)構(gòu)建整個(gè)應(yīng)用時(shí)齐疙,這個(gè)文件也會(huì)提及給codesign作為應(yīng)用所需要擁有哪些授權(quán)的參考。這些授權(quán)信息必須都在開發(fā)者中心的AppID中啟用旭咽,并且包含在配置文件中贞奋。

Code Signing Identity : 配置證書。
Code Signing Style : Automatic自動(dòng)配置, Manual手動(dòng)配置穷绵。
Development Team : 開發(fā)者所在的群組轿塔。
Provisioning Profile : 配置描述文件。

本文首發(fā)于我的個(gè)人博客 https://limeng99.club/仲墨,轉(zhuǎn)載請(qǐng)標(biāo)明出處勾缭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市目养,隨后出現(xiàn)的幾起案子俩由,更是在濱河造成了極大的恐慌,老刑警劉巖癌蚁,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幻梯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡努释,警方通過查閱死者的電腦和手機(jī)礼旅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洽洁,“玉大人,你說我怎么就攤上這事菲嘴《鲎裕” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵龄坪,是天一觀的道長(zhǎng)昭雌。 經(jīng)常有香客問我,道長(zhǎng)健田,這世上最難降的妖魔是什么烛卧? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮妓局,結(jié)果婚禮上总放,老公的妹妹穿的比我還像新娘。我一直安慰自己好爬,他們只是感情好局雄,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著存炮,像睡著了一般炬搭。 火紅的嫁衣襯著肌膚如雪蜈漓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天宫盔,我揣著相機(jī)與錄音融虽,去河邊找鬼。 笑死灼芭,一個(gè)胖子當(dāng)著我的面吹牛有额,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姿鸿,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼谆吴,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了苛预?” 一聲冷哼從身側(cè)響起句狼,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎热某,沒想到半個(gè)月后腻菇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昔馋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年筹吐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秘遏。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丘薛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出邦危,到底是詐尸還是另有隱情洋侨,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布倦蚪,位于F島的核電站希坚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏陵且。R本人自食惡果不足惜裁僧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望慕购。 院中可真熱鬧聊疲,春花似錦、人聲如沸沪悲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽可训。三九已至昌妹,卻和暖如春捶枢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背飞崖。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工烂叔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人固歪。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓蒜鸡,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親牢裳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逢防,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351