本文主要對(duì)xcode中常見的工程配置進(jìn)行介紹,僅用于記錄分享,不做其他用途。
Architectures

Additional SDKs
在編譯的時(shí)候需要附加的SDK。
Architectures
支持的處理器架構(gòu)。支持的指令集越多,就會(huì)編譯出包含多個(gè)指令集代碼的數(shù)據(jù)包,對(duì)應(yīng)生成二進(jìn)制包就越大,最終目標(biāo)文件也會(huì)變大。
指令集可以參考:http://www.itdecent.cn/p/3fce0bd6f045
Base SDK
App所能支持的最大iOS版本。Xcode默認(rèn)會(huì)設(shè)置為能夠支持的最新版本。
Build Acitve 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)。目前可選的有iOS、macOS、tvOS、watchOS。
Valid Architectures
限制可能被支持的指令集的范圍,也就是Xcode編譯出來的二進(jìn)制包類型最終從這些類型產(chǎn)生,而編譯出哪種指令集的包,將由Architectures與Valid Architectures(因此這個(gè)不能為空)的交集來確定。
知識(shí)延伸:lipo
lipo源于mac系統(tǒng)要制作兼容powerpc平臺(tái)和intel平臺(tái)的程序。
lipo 是一個(gè)在 Mac OS X 中處理通用程序(Universal Binaries)的工具。
用途一:查看二進(jìn)制所支持的指令集

用途二:合并指令集
lipo –create Release-iphoneos/libiphone.a Debig-iphonesimulator/libiphone.a –output libiphone.a
用途三:拆分指令集
lipo SDK.a -thin armv7 -output */SDK.a
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)簽順序


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)品存放位置。
Per-configuration Intermediate Build Files Path
當(dāng)前編譯設(shè)置下編譯時(shí)臨時(shí)文件的存放位置。
Precompiled Headers Cache Path
預(yù)編譯頭文件緩存存放路徑。通過這個(gè)配置,Targets可以互相共享預(yù)編譯的頭文件。
這個(gè)在Xcode中的設(shè)置在File->Project Setting界面進(jìn)行設(shè)置,


Build Options

Always Embed Swift Standard Libraries
始終嵌入swift標(biāo)準(zhǔn)庫。對(duì)于未使用swift代碼的情況可以設(shè)置為NO。
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
選擇使用的編譯器。目前Xcode8.2默認(rèn)使用APPLE LLVM 8.0版本的編譯器。
Debug Information Format
記錄debug信息的文件格式。共有DWARF with dSYM File和DWARF兩種可以選擇。建議選擇DWARF with dSYM File。DWARF是較老的文件格式,會(huì)在編譯時(shí)將debug信息寫在執(zhí)行文件中。
Enable BitCode
Bitcode is an intermediate representation of a compiled program. Apps you upload to iTunes Connect that contain bitcode will be compiled and linked on the App Store. Including bitcode will allow Apple to re-optimize your app binary in the future without the need to submit a new version of your app to the store.
Bitcode. When you archive for submission to the App Store, Xcode will compile your app into an intermediate representation. The App Store will then compile the bitcode down into the 64 or 32 bit executables as necessary.
說的是bitcode是被編譯程序的一種中間形式的代碼。包含bitcode配置的程序?qū)?huì)在App store上被編譯和鏈接。bitcode允許蘋果在后期重新優(yōu)化我們程序的二進(jìn)制文件,而不需要我們重新提交一個(gè)新的版本到App store上。
當(dāng)我們提交程序到App store上時(shí),Xcode會(huì)將程序編譯為一個(gè)中間表現(xiàn)形式(bitcode)。然后App store會(huì)再將這個(gè)botcode編譯為可執(zhí)行的64位或32位程序。
不過,我們現(xiàn)在需要考慮的是三個(gè)平臺(tái):iOS,Mac OS,watchOS。
對(duì)應(yīng)iOS,bitcode是可選的。
對(duì)于watchOS,bitcode是必須的。
Mac OS不支持bitcode。
Enable Testability
是否支持測試。默認(rèn)選NO;
Generate Profiling Code
是否生成配置代碼。默認(rèn)選擇NO。
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)證。
Deployment
Headers
Kernel Module
Linking
Search Paths

Always Search User Path
是否搜索用戶指定的路徑,默認(rèn)是NO;
Framework Search Paths
工程引用的framework搜索路徑
Header Search Paths
工程中引用的頭文件搜索路徑
Library Search Paths
library搜索路徑,比如靜態(tài).a庫
Rez Search Paths
This is a list of paths to search for files included by CarbonResource Manager resources and compiled with the Rez tool.
Sub-Directories to Exclude in Recursive Searches
指定哪些類型的子目錄在遞歸查找時(shí)忽略
Sub-Directories to include in Recursive Searches
指定哪些類型的子目錄在遞歸查找時(shí)包含
Use Header Maps
User Header Search Paths
設(shè)置頭文件搜索路徑,這個(gè)只有當(dāng)Always Search User Path開啟后才有效。
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
配置證書
Development Team
開發(fā)者所在的群組
Other Code Signing Flags
常見的配置為--deep。用法不詳。
Provisioning Profile
配置描述文件。
User-Defined

這里用戶可以在debug、release或者自己定義的編譯模式下設(shè)置不同的變量,可以達(dá)到一套代碼同時(shí)支持多個(gè)不同版本的目的。比如可以編譯出叫APP1和APP2兩個(gè)名字不一樣的APP。
Packaging

Defines Module
是否定義模塊。默認(rèn)app類的工程為NO,framwork工程默認(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的標(biāo)識(shí)
Product Module Name
產(chǎn)品模塊名稱
Product Name
產(chǎn)品名稱
Public Headers Folder Path
公共頭文件路徑
Wrapper Extension
打包的擴(kuò)展名,默認(rèn)app。
Preprocessing
