Xcode Build Settings 分析

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


Architectures

picture1

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)的工具。

用途一:查看二進制所支持的指令集


picture2

用途二:合并指令集

lipo –create Release-iphoneos/libiphone.a Debig-iphonesimulator/libiphone.a –output libiphone.a

用途三:拆分指令集

lipo SDK.a -thin armv7 -output */SDK.a

Assets

picture3

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

按需加載資源時預加載的標簽順序


picture4


picture5

Build Locations


buildLocations-01

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界面進行設置,


BuildLocation-02


BuildLocatios-03

Build Options


Build Option-01

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

search path-01

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


sign-01

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


user-define

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

Packaging

Packaging-01

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。

Preprocessing

preprocessing
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容