ios

Xcode使用三: Build Settings参数

2018-03-22  本文已影响158人  无名小鱼会吐火

原链接

Additional SDKs

在编译的时候需要附加的SDK。

Architectures

支持的处理器架构。不同的处理器对应不同版本的iPhone。

高版本的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快,更加方便调试。

Supported Platforms

app所支持的平台,有iOS和macOS,tvOS, watchOS四个选项。

Valid Architectures

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

Build Locations

Build Products Path

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

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.

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

Per-configuration Intermediate File Path

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

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

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

二、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:应用框架,可以设为 armv6、 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”,表示允许加入预编译头

上一篇下一篇

猜你喜欢

热点阅读