本文主要對xcode中常見的工程配置進行介紹,僅用于記錄分享,不做其他用途。
Architectures
Additional SDKs
在編譯的時候需要附加的SDK。
Architectures
支持的處理器架構。支持的指令集越多,就會編譯出包含多個指令集代碼的數據包,對應生成二進制包就越大,最終目標文件也會變大。
指令集可以參考:http://www.lxweimin.com/p/3fce0bd6f045
Base SDK
App所能支持的最大iOS版本。Xcode默認會設置為能夠支持的最新版本。
Build Acitve Architecture Only
如果此項為YES,則Xcode會根據當前所連接設備的版本只將相應的Architecture編譯入app。否則會同時編譯“Valid Architectures”中的指令集。
建議在Debug模式下設置為YES,Release模式下設置為NO,加快編譯速度。
Supported Platform
app支持的平臺。目前可選的有iOS、macOS、tvOS、watchOS。
Valid Architectures
限制可能被支持的指令集的范圍,也就是Xcode編譯出來的二進制包類型最終從這些類型產生,而編譯出哪種指令集的包,將由Architectures與Valid Architectures(因此這個不能為空)的交集來確定。
知識延伸:lipo
lipo源于mac系統要制作兼容powerpc平臺和intel平臺的程序。
lipo 是一個在 Mac OS X 中處理通用程序(Universal Binaries)的工具。
用途一:查看二進制所支持的指令集
用途二:合并指令集
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
是否將資源包嵌入產品的bundle中
Enable On Demand Resources
是否開啟按需獲取資源功能
On Demand Resources Initial Install Tags
按需加載資源時的初始安裝資源文件標簽
On Demand Resources Prefetch Order
按需加載資源時預加載的標簽順序
Build Locations
Build Products Paths
產品文件和編譯中間文件的根目錄。產品文件和編譯時臨時文件都將放在這個目錄的子目錄中。
Intermediate Build Files Path
編譯時臨時文件的存放位置。編譯中間文件格式為product name+.build,如MyProduct.build。
Per-configuration Build Products Path
當前編譯設置下的產品存放位置。
Per-configuration Intermediate Build Files Path
當前編譯設置下編譯時臨時文件的存放位置。
Precompiled Headers Cache Path
預編譯頭文件緩存存放路徑。通過這個配置,Targets可以互相共享預編譯的頭文件。
這個在Xcode中的設置在File->Project Setting界面進行設置,
Build Options
Always Embed Swift Standard Libraries
始終嵌入swift標準庫。對于未使用swift代碼的情況可以設置為NO。
Build Variants
此項可以設定生成產品的變種。您可以創建額外的產品變種作為特殊用途。例如,您可以使用編譯配置文件的名稱來創建一個高度定制的二進制文件。
Build Variants的值有三個:
normal-用于生成普通的二進制文件;
profile-用于可以生成配置信息的二進制文件;
debug-用于生成帶有debug標志、額外斷言和診斷代碼的二進制文件。
Compiler For C/C++/Objective-C
選擇使用的編譯器。目前Xcode8.2默認使用APPLE LLVM 8.0版本的編譯器。
Debug Information Format
記錄debug信息的文件格式。共有DWARF with dSYM File和DWARF兩種可以選擇。建議選擇DWARF with dSYM File。DWARF是較老的文件格式,會在編譯時將debug信息寫在執行文件中。
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配置的程序將會在App store上被編譯和鏈接。bitcode允許蘋果在后期重新優化我們程序的二進制文件,而不需要我們重新提交一個新的版本到App store上。
當我們提交程序到App store上時,Xcode會將程序編譯為一個中間表現形式(bitcode)。然后App store會再將這個botcode編譯為可執行的64位或32位程序。
不過,我們現在需要考慮的是三個平臺:iOS,Mac OS,watchOS。
對應iOS,bitcode是可選的。
對于watchOS,bitcode是必須的。
Mac OS不支持bitcode。
Enable Testability
是否支持測試。默認選NO;
Generate Profiling Code
是否生成配置代碼。默認選擇NO。
Precompiled Header Uses Files From Build Directory
預編譯build路徑中的頭文件。由于編譯過程比較耗時,且兩次編譯之間未必會改動所有文件。因此將不會改動的常用文件保留成預編譯文件將大大減少編譯時的時間。建議這一項選擇YES。
Require Only App-Extension-Safe API
如果我們要想應用擴展使用內嵌框架,那么首先要配置一下。將target的Require Only App-Extension-Safe API選項設置為Yes。如果你不這樣設置,那么Xcode會向你提示警告:linking against dylib not safe for use in application extensions。
Scan All Source Files for Includes
掃描include文件所包含的所有源文件。
Validate Built Product
這個選項決定了是否在編譯的時候進行驗證。驗證的內容和app store的審查內容一致。默認選項是debug時不驗證,release時驗證。
Deployment
Headers
Kernel Module
Linking
Search Paths
Always Search User Path
是否搜索用戶指定的路徑,默認是NO;
Framework Search Paths
工程引用的framework搜索路徑
Header Search Paths
工程中引用的頭文件搜索路徑
Library Search Paths
library搜索路徑,比如靜態.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
指定哪些類型的子目錄在遞歸查找時忽略
Sub-Directories to include in Recursive Searches
指定哪些類型的子目錄在遞歸查找時包含
Use Header Maps
User Header Search Paths
設置頭文件搜索路徑,這個只有當Always Search User Path開啟后才有效。
signing
Code Signing Entitlements
授權機制。在Xcode的capabilities選項卡下選擇一些選項后,Xcode就會生成這樣一段XML,Xcode會自動生成一個entitlements文件,然后再需要的時候往里面添加條目。當構建整個應用時,這個文件也會提及給codesign作為應用所需要擁有哪些授權的參考。這些授權信息必須都在開發者中心的AppID中啟用,并且包含在配置文件中。
Code Signing Identity
配置證書
Development Team
開發者所在的群組
Other Code Signing Flags
常見的配置為--deep。用法不詳。
Provisioning Profile
配置描述文件。
User-Defined
這里用戶可以在debug、release或者自己定義的編譯模式下設置不同的變量,可以達到一套代碼同時支持多個不同版本的目的。比如可以編譯出叫APP1和APP2兩個名字不一樣的APP。
Packaging
Defines Module
是否定義模塊。默認app類的工程為NO,framwork工程默認為YES。
Expand Build Setting in Info.plist File
告訴編譯器是否處理info.plist。默認是YES。這是一個很大的特點,因為它避免了有根據您的構建設置和配置不同的Info.plist中,避免您在多個地方修改設置。 但是如果你真的不想要它,只需在項目或目標的構建設置中關閉此設置。
Info.plist File
創建工程后默認會創建一個info.plist文件。也可以根據需要進行主動創建。
Private Headers Folder Path
私有頭文件的存放位置。
Product Bundle Identifier
產品bundle的標識
Product Module Name
產品模塊名稱
Product Name
產品名稱
Public Headers Folder Path
公共頭文件路徑
Wrapper Extension
打包的擴展名,默認app。