Xcode使用三: Build Settings参数

Architectures 架构

Additional SDKs

在编译的时候须要附加的SDK。ios

Architectures

支持的处理器架构。不一样的处理器对应不一样版本的iPhone。xcode

高版本的iPhone能够运行低版本的指令集。所以要适应全系列的iPhone,Architectures应选择Armv6。

Base SDK

这决定了你的app所能支持的iOS最高版本。若是你选择了iOS6.1,则你的app只能被iOS 6.1.X如下的系统安装。Xcode默认设置为可以支持的最新版本。架构

Build Active Architecture Only

若是此项为YES,则在Xcode会根据设备的版本只将相应的Architecture编译入app。如链接了iPhone4进行编译,Build Active Architecture Only为YES,则编译时只会构建Armv7的二进制文件。若链接的是iPhone5,则构建出Armv7s的二进制文件。

这个选项在Debug时默认为YES,在Release时默认为NO。这使得Debug时编译的时间比Release快,更加方便调试。app

Supported Platforms

app所支持的平台,有iOS和OSX两个选项。框架

Valid Architectures

app预期将要应用到的架构。默认与Architectures的值相同。这个选项让你能够在编译的时候只打包Armv7s架构,可是兼容Armv6,Armv7。iphone

Build Locations

Build Products Path

产品文件和编译中间文件的根目录。产品文件和编译时临时文件都将放在这个目录的子目录中。ide

Intermediate Build Files Path

编译时临时文件的存放位置。编译中间文件格式为product name+.build,如MyProduct.build。工具

Per-configuration Build Product Path

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

当前编译设置下的产品存放位置。ui

Per-configuration Intermediate File Path

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

当前编译设置下编译时临时文件的存放位置。this

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.

存放预编译头文件的位置。经过这个配置,Targets能够互相共享预编译的头文件。

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.

此项能够设定生成产品的变种。您能够建立额外的产品变种做为特殊用途。例如,您可使用编译配置文件的名称来建立一个高度定制的二进制文件。

Build Variants的值有三个:
normal-用于生成普通的二进制文件
profile-用于能够生成配置信息的二进制文件
debug-用于生成带有debug标志、额外断言和诊断代码的二进制文件

Compiler for C/C++/Object-C

选择使用的编译器。Xcode自带有两种选项,Apple LLVM和LLVM GCC。建议使用默认选项---Apple LLVM。

Debug Information Format

这个选项决定了记录debug信息的文件格式。选项有DWARF with dSYM File和DWARF。建议选择DWARF with dSYM File。DWARF是较老的文件格式,会在编译时将debug信息写在执行文件中。

Generate Profiling Code

是否生成配置代码。默认选择NO。

Precompiled Header Uses Files From Build Directory

预编译build路径中的头文件。因为编译过程比较耗时,且两次编译之间未必会改动全部文件。所以将不会改动的经常使用文件保留成预编译文件将大大减小编译时的时间。建议这一项选择YES。

Run Static Analyzer

运行静态分析器。

Scan All Source Files for Includes

扫描include文件所包含的全部源文件。

Validate Built Product

这个选项决定了是否在编译的时候进行验证。验证的内容和app store的审查内容一致。默认选项是debug时不验证,release时验证,这样就保证了每一个release版本都会经过validate,让被拒的风险在提交app store以前就暴露出来,减小损失。

注意:

1. 这个选项只在链接真机的时候有效。在使用模拟器时无效。不过我用真机试了一下,彷佛也没有检查出代码里的私有API。
2. 想手动validate,能够在Organizer->Archives里找到须要检查的Archive,点击Validate按钮便可。这样检查彷佛靠谱些,能够查出私有API等违规操做。
build成功后的,最终产品路径--能够在Build Settings参数的Per-configuration Build Products Path项里设置
$ (TARGET_NAME)

目标工程名称

$ (SRCROOT)

工程文件(好比Nuno.xcodeproj)的路径 

$ (CURRENT_PROJECT_VERSION)

当前工程版本号

 

其余:

当编译静态库,设备选模拟器(iPhone 5.0 Simulator),未设置任何Build Settings参数时,默认的基础路径:

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

下面用$()代替上面一长串东东

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

$(BUILD_DIR) = $()/Build/Products

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

这三个变量中的$()不会随着Build Settings参数的设置而改变

相反,如下能够经过设置而改变

$(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 可执行文件名

${IPHONEOS_DEPLOYMENT_TARGET} 5.0

$(ACTION) = build

$(CURRENTCONFIG_SIMULATOR_DIR) 当前模拟器路径 

$(CURRENTCONFIG_DEVICE_DIR) 当前设备路径 

 

$(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

自定义一个设备无关的路径(用来存放各类架构arm6/arm7/i386输出的产品)

$(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模拟器和真机的静态类库,生成通用库

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}目录下,生成两个设备都通用的静态库,

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

 

2、xcode4中build Settings常见参数解析

1.Installation Directory:安装路径

静态库编译时,在Build Settings中Installation Directory设置“$(BUILT_PRODUCTS_DIR)”

Skip Install设为YES

Installation Directory默认为/usr/local/lib

由于Build Location默认时,.a文件会放在很长(好比:/Users/xxx/Library/Developer/Xcode/DerivedData/xxxProgram

dalrvzehhtesxdfqhxixzafvddwe/Build/Products/Debug-iPhoneos)的路径下,或是咱们target指定的路径

Skip Install若是是NO,可能会被安装到默认路径/usr/local/lib

2.Public Headers Folder Path:对外公开头文件路径

设为“include”(具体的头文件路径为:$(BUILT_PRODUCTS_DIR)/include/xx.h)

在最终文件.a同级目录下生成一个include目录

默认:/usr/local/include

Public Headers Folder Path这个路径就是使用这lib的某工程须要依赖的外部头文件.导入这路径后,#include/import "xx.h"才能看到

3.User Header Search Paths:依赖的外部头文件搜索路径

设置为“$(BUILT_PRODUCTS_DIR)/include”

和2中路径对应

4.Per-configuration Build Products Path:最终文件路径

好比设为“../app”,就会在工程文件.xcodeproj上一层目录下的app目录里,建立最终文件

默认为$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 

等于$(BUILT_PRODUCTS_DIR)

5.Per-configuration Intermediate Build Files Path:临时中间文件路径

默认为:$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

6.Code Signing Identity:真机调试的证书选择

选一个和Bundle identifier相对应的证书

Library Search Paths:库搜索路径

Architectures:架构,设为 armv6 或 armv7

Valid Architectures:应用框架,能够设为 armv六、 armv7 或i386

Product Name:工程文件名,默认为$(TARGET_NAME)

Info.plist File:info文件路径

Build Variants:默认为normal

Other Linker Flags:其余连接标签

设为“-ObjC”

当导入的静态库使用了类别,须要设为-ObjC

iOS Deployment Target:ios部署对象

好比能够选择设为,ios3到ios5的一种版本

Prefix Header:预编头文件(好比:UtilLib/UtilLib-Prefix.pch)

Precompile Prefix Header:设为“Yes”,表示容许加入预编译头