Xcode使用三: Build Settings參數(shù)

原鏈接

Additional SDKs

在編譯的時(shí)候需要附加的SDK。

Architectures

支持的處理器架構(gòu)。不同的處理器對應(yīng)不同版本的iPhone。

高版本的iPhone可以運(yùn)行低版本的指令集。因此要適應(yīng)全系列的iPhone,Architectures應(yīng)選擇Armv6。

Base SDK

這決定了你的app所能支持的iOS最高版本。如果你選擇了iOS6.1,則你的app只能被iOS 6.1.X以下的系統(tǒng)安裝。Xcode默認(rèn)設(shè)置為能夠支持的最新版本。

Build Active Architecture Only

如果此項(xiàng)為YES,則在Xcode會(huì)根據(jù)設(shè)備的版本只將相應(yīng)的Architecture編譯入app。如連接了iPhone4進(jìn)行編譯,Build Active Architecture Only為YES,則編譯時(shí)只會(huì)構(gòu)建Armv7的二進(jìn)制文件。若連接的是iPhone5,則構(gòu)建出Armv7s的二進(jìn)制文件。

這個(gè)選項(xiàng)在Debug時(shí)默認(rèn)為YES,在Release時(shí)默認(rèn)為NO。這使得Debug時(shí)編譯的時(shí)間比Release快,更加方便調(diào)試。

Supported Platforms

app所支持的平臺(tái),有iOS和macOS,tvOS, watchOS四個(gè)選項(xiàng)。

Valid Architectures

app預(yù)期將要應(yīng)用到的架構(gòu)。默認(rèn)與Architectures的值相同。這個(gè)選項(xiàng)讓你可以在編譯的時(shí)候只打包Armv7s架構(gòu),但是兼容Armv6,Armv7。

Build Locations

Build Products Path

產(chǎn)品文件和編譯中間文件的根目錄。產(chǎn)品文件和編譯時(shí)臨時(shí)文件都將放在這個(gè)目錄的子目錄中。

Intermediate Build Files Path

編譯時(shí)臨時(shí)文件的存放位置。編譯中間文件格式為product name+.build,如MyProduct.build。

Per-configuration Build Product Path

Directory path. Identifies the directory that holds temporary files for the active build configuration.

當(dāng)前編譯設(shè)置下的產(chǎn)品存放位置。

Per-configuration Intermediate File Path

Directory path. Identifies the directory that holds temporary files for the active build configuration.

當(dāng)前編譯設(shè)置下編譯時(shí)臨時(shí)文件的存放位置。

Precompiled Headers Cache Path

Directory path. Specifies the directory in which to place precompiled headers. Targets can share precompiled headers by specifying the same value for this build setting.

存放預(yù)編譯頭文件的位置。通過這個(gè)配置,Targets可以互相共享預(yù)編譯的頭文件。

Build Options

Build Variants

Space-separated list of identifiers. Specifies the binary variants of the product. You can create additional variant names for special purposes. For example, you can use the name of a build configuration as a variant name to create highly customized binaries.

Values:

normal: Use to produce a normal binary.

profile: Use to produce a binary that generates profile information.

debug: Use to produce a binary with debug symbols, additional assertions, and diagnostic code.

此項(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++/Object-C

選擇使用的編譯器。Xcode自帶有兩種選項(xiàng),Apple LLVM和LLVM GCC。建議使用默認(rèn)選項(xiàng)---Apple LLVM。

Debug Information Format

這個(gè)選項(xiàng)決定了記錄debug信息的文件格式。選項(xiàng)有DWARF with dSYM File和DWARF。建議選擇DWARF with dSYM File。DWARF是較老的文件格式,會(huì)在編譯時(shí)將debug信息寫在執(zhí)行文件中。

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。

Run Static Analyzer

運(yùn)行靜態(tài)分析器。

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)證,這樣就保證了每個(gè)release版本都會(huì)通過validate,讓被拒的風(fēng)險(xiǎn)在提交app

store之前就暴露出來,減少損失。

注意:

1. 這個(gè)選項(xiàng)只在連接真機(jī)的時(shí)候有效。在使用模擬器時(shí)無效。不過我用真機(jī)試了一下,似乎也沒有檢查出代碼里的私有API。

2. 想手動(dòng)validate,可以在Organizer->Archives里找到需要檢查的Archive,點(diǎn)擊Validate按鈕即可。這樣檢查似乎靠譜些,可以查出私有API等違規(guī)操作。

build成功后的,最終產(chǎn)品路徑--可以在Build Settings參數(shù)的Per-configuration Build Products Path項(xiàng)里設(shè)置$(TARGET_NAME)

目標(biāo)工程名稱

$(SRCROOT)

工程文件(比如Nuno.xcodeproj)的路徑?

$(CURRENT_PROJECT_VERSION)

當(dāng)前工程版本號


其他:

當(dāng)編譯靜態(tài)庫,設(shè)備選模擬器(iPhone 5.0 Simulator),未設(shè)置任何Build Settings參數(shù)時(shí),默認(rèn)的基礎(chǔ)路徑:

/Users/xxx/Library/Developer/Xcode/DerivedData/xxxWorkspace-caepeadwrerdcrftijaolkkagbjf

下面用$()代替上面一長串東東

$(SYMROOT) =$()/Build/Products

$(BUILD_DIR)

=?$()/Build/Products

$(BUILD_ROOT) =$()/Build/Products

這三個(gè)變量中的$()不會(huì)隨著Build Settings參數(shù)的設(shè)置而改變

相反,以下可以通過設(shè)置而改變

$(CONFIGURATION_BUILD_DIR) =$()/Build/Products/Debug-iphonesimulator

$(BUILT_PRODUCTS_DIR) =$()/Build/Products/Debug-iphonesimulator

$(CONFIGURATION_TEMP_DIR) =$()/Build/Intermediates/UtilLib.build/Debug-iphonesimulator

$(TARGET_BUILD_DIR) =$()/Build/Products/Debug-iphonesimulator

$(SDK_NAME) = iphonesimulator5.0

$(PLATFORM_NAME) = iphonesimulator

$(CONFIGURATION) = Debug

$(TARGET_NAME) = UtilLib

$(EXECUTABLE_NAME) = libUtilLib.a 可執(zhí)行文件名

${IPHONEOS_DEPLOYMENT_TARGET} 5.0

$(ACTION) = build

$(CURRENTCONFIG_SIMULATOR_DIR) 當(dāng)前模擬器路徑

$(CURRENTCONFIG_DEVICE_DIR) 當(dāng)前設(shè)備路徑


$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME =

$()/Build/Products/Debug-iphonesimulator

$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) =$()/Build/Intermediates/UtilLib.build/Debug-iphonesimulator


自定義變量

${CONFIGURATION}-iphoneos 表示:Debug-iphoneos

${CONFIGURATION}-iphonesimulator?表示:Debug-iphonesimulator

$(CURRENTCONFIG_DEVICE_DIR) =${SYMROOT}/${CONFIGURATION}-iphoneos

$(CURRENTCONFIG_SIMULATOR_DIR) =${SYMROOT}/${CONFIGURATION}-iphonesimulator

自定義一個(gè)設(shè)備無關(guān)的路徑(用來存放各種架構(gòu)arm6/arm7/i386輸出的產(chǎn)品)

$(CREATING_UNIVERSAL_DIR) =${SYMROOT}/${CONFIGURATION}-universal

自定義變量代表的值

$(CURRENTCONFIG_DEVICE_DIR) =$()/Build/Products/Debug-iphoneos

$(CURRENTCONFIG_SIMULATOR_DIR) =$()/Build/Products/Debug-iphonesimulator

$(CREATING_UNIVERSAL_DIR) =$()/Build/Products/Debug-universal


iphoneos5.0下的編譯腳本:

xcodebuild -project "UtilLib.xcodeproj"?-configuration "Debug" -target "UtilLib" -sdk "iphoneos5.0" -arch "armv6 armv7" build RUN_CLANG_STATIC_ANALYZER=NO$(BUILD_DIR)="${BUILD_DIR}"?BUILD_ROOT="${BUILD_ROOT}"


iphonesimulator5.0下的編譯腳本:

xcodebuild -project "UtilLib.xcodeproj"?-configuration "Debug" -target "UtilLib" -sdk "iphonesimulator5.0" -arch "i386" build RUN_CLANG_STATIC_ANALYZER=NO$(BUILD_DIR)="${BUILD_DIR}"??BUILD_ROOT="${BUILD_ROOT}"

加上下面一句表示輸出到文件:

> "${BUILD_ROOT}.build_output"


lipo腳本工具:合并iPhone模擬器和真機(jī)的靜態(tài)類庫,生成通用庫

lipo -create -output?"${CREATING_UNIVERSAL_DIR}/${EXECUTABLE_NAME}" "${CURRENTCONFIG_DEVICE_DIR}/${EXECUTABLE_NAME}" ? ? ? ??"${CURRENTCONFIG_SIMULATOR_DIR}/${EXECUTABLE_NAME}"

意思是:把"${CURRENTCONFIG_DEVICE_DIR}目錄下的.a文件,和${CURRENTCONFIG_SIMULATOR_DIR}目錄下的.a文件合并,

在${CREATING_UNIVERSAL_DIR}目錄下,生成兩個(gè)設(shè)備都通用的靜態(tài)庫,

例如:lipo -create -output xy.a x.a y.a


二、xcode4中build Settings常見參數(shù)解析

1.Installation Directory:安裝路徑

靜態(tài)庫編譯時(shí),在Build Settings中Installation Directory設(shè)置“$(BUILT_PRODUCTS_DIR)”

Skip Install設(shè)為YES

Installation Directory默認(rèn)為/usr/local/lib

因?yàn)锽uild Location默認(rèn)時(shí),.a文件會(huì)放在很長(比如:/Users/xxx/Library/Developer/Xcode/DerivedData/xxxProgram

dalrvzehhtesxdfqhxixzafvddwe/Build/Products/Debug-iPhoneos)的路徑下,或是我們target指定的路徑

Skip Install如果是NO,可能會(huì)被安裝到默認(rèn)路徑/usr/local/lib

2.Public Headers Folder Path:對外公開頭文件路徑

設(shè)為“include”(具體的頭文件路徑為:$(BUILT_PRODUCTS_DIR)/include/xx.h)

在最終文件.a同級目錄下生成一個(gè)include目錄

默認(rèn):/usr/local/include

Public Headers Folder Path這個(gè)路徑就是使用這lib的某工程需要依賴的外部頭文件.導(dǎo)入這路徑后,#include/import "xx.h"才能看到

3.User Header Search Paths:依賴的外部頭文件搜索路徑

設(shè)置為“$(BUILT_PRODUCTS_DIR)/include”

和2中路徑對應(yīng)

4.Per-configuration Build Products Path:最終文件路徑

比如設(shè)為“../app”,就會(huì)在工程文件.xcodeproj上一層目錄下的app目錄里,創(chuàng)建最終文件

默認(rèn)為$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

等于$(BUILT_PRODUCTS_DIR)

5.Per-configuration Intermediate Build Files Path:臨時(shí)中間文件路徑

默認(rèn)為:$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

6.Code Signing Identity:真機(jī)調(diào)試的證書選擇

選一個(gè)和Bundle identifier相對應(yīng)的證書

Library Search Paths:庫搜索路徑

Architectures:架構(gòu),設(shè)為 armv6 或 armv7

Valid?Architectures:應(yīng)用框架,可以設(shè)為?armv6、?armv7 或i386

Product Name:工程文件名,默認(rèn)為$(TARGET_NAME)

Info.plist File:info文件路徑

Build Variants:默認(rèn)為normal

Other Linker Flags:其他鏈接標(biāo)簽

設(shè)為“-ObjC”

當(dāng)導(dǎo)入的靜態(tài)庫使用了類別,需要設(shè)為-ObjC

iOS Deployment Target:ios部署對象

比如可以選擇設(shè)為,ios3到ios5的一種版本

Prefix Header:預(yù)編頭文件(比如:UtilLib/UtilLib-Prefix.pch)

Precompile?Prefix Header:設(shè)為“Yes”,表示允許加入預(yù)編譯頭

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容