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