Xcode Build Settings 第一部分 : Preprocessing

原文链接:链接

就是那个界面。你懂得。一张文字的列表。那个有着像 Mach-O Type 和 Rez Search Paths一样吓人的专业术语的列表。那张也许你现在正在回避的列表。那张你生怕更改了其中某一个魔咒般神奇的设定之后,app会呈现给你一个让你满带悲伤和遗憾的结果的列表。其实,那里面别有洞天,有很多你也许并不知道的超有用的东西。在这片文章里,我们将看一下其中几项,如果你弄明白了,会是一次很有趣的体验

免责声明

我是认真的,读一下

我知道我说过这并不可怕,而且我坚持这一点。但是有一点要注意。你不能撤销任何操作(如果你用了GIT,是可以的)。为了避免些许的悔恨,万分请求你在一份全新的仓库下学习这些Settings。这样你可以轻松地重置这些更改。

现在也没什么顾虑了,让我们开始吧

编译器标志(Compiler flags)

首先,我们先来看一下比较简单的一个内容。编译器标志经常被用做在编译期间定义常量,这样你可以对代码做取巧简化,比如根据编译设置运行不同的代码。

有三处地方可以设置编译器标志:

1.OTEHR_CFLAGS(Other C Flags)

2.GCC_PREPROCESSOR_DEFINITIONS(Preprocessor Macros)

3.INFOPLIST_PREPROCESSOR_DEFINITIONS(Info.plist Preprocessor Definitions)

Other C Flags和另外两个Preprocessor设置的区别在于,任何传给Other C Flags的标志,将被直接传给编译器。这意味着,如果你想设置一个名为 FOO 的常量,你只能将这个 C Flag 的格式固定为 -DFOO。这样,编译器可以通过,而且定义了 FOO 这个常量。然而,这也意味着任何随意命名的 C FLAG 会潜在的破坏你的设置。

相反的,通过Preprocessor传给编译器的标志会被自动带上 -D 标志。 所以,像上面一样的变量 FOO,在这里可以简单的设置为 FOO。这意味着,及时你随便写了个变量名,最坏的结果就是你得到了一个没有啥子意义的变量名。

因为这一点,我建议,像定义编译器标志这种操作还是放在Preprocessor Setting里比较好。当你刻意想让变量名不经过任何处理就传给编译器时再用 Other C Flags。

编译器标志可以是一个值类型的宏(FOO=1),也可以是一个常量类型的宏(FOO)。常量类型的宏本质上是布尔类型的。他们可以被设置,也可以不用设置。值类型的宏可以有值,但是你并不希望编译器通过很复杂的运算后再去生成你的代码。如果你想使用值类型宏,坚持一个原则,那就是将flag设为1,用的时候简单的判断一下它是否存在。

那我们该怎么用呢?最简单的方法就是将代码根据编译设置分块。一旦你对你的标志完成了配置,你可以在编译期间做一些有意思的事情。举个栗子,你可以根据不同设置设置不同的baseURL:

#if RELEASE
static NSString *const MY_API_URI = @"https://api.example.com/";
#else
static NSString *const MY_API_URI = @"https://api.staging-example.com/";
#endif

待续。。。

时间: 2024-11-02 06:32:29

Xcode Build Settings 第一部分 : Preprocessing的相关文章

Xcode Build Settings中的Architecture概述

Xcode 6.1版本在新建一个工程的时候,会给我们做一些默认的Build Settings,其中有一种很重要的就是Architecture的设置,先来看一张图片,如下所示: 在第二行的Architectures中,设置的是标准的架构,里面包括armv7,arm64.这个编译选项指定了工程将被编译成支持哪些指令集,支持指令集是通过编译生成对应的二进制数据包实现的,如果支持的指令集数目有多个,就会编译出包含多个指令集代码的数据包,造成最终编译的包很大. 最下面一行蓝色显示的Valid Archit

Xcode Build Search Paths设置

c/c++ 头文件引用问题 include <> 引用编译器的类库路径下的头文件 include “” 引用工程目录的相对路径的头文件 include 是编译指令,在编译时,编译器会将相对路径替换成绝对路径,因此,头文件绝对路径=搜索路径+相对路径. Xcode Build Settings 下 Search Paths设置搜索路径 Header Search Paths:头文件搜索路径设置 $(SRCROOT)宏和$(PROJECT_DIR)宏都指xxx.xcodeproj所在的父目录 例如

xcode的环境变量,Build Settings参数,workspace及联编设置

一.xcode4中的环境变量 $(BUILT_PRODUCTS_DIR) build成功后的,最终产品路径--可以在Build Settings参数的Per-configuration Build Products Path项里设置 $(TARGET_NAME) 目标工程名称 $(SRCROOT) 工程文件(比如Nuno.xcodeproj)的路径 $(CURRENT_PROJECT_VERSION) 当前工程版本号 其他: 当编译静态库,设备选模拟器(iPhone 5.0 Simulator)

Build Settings

一般我们在xcode里面配置包含工程目录下头文件的时候,都要关联着相对路径和绝对路径,如果只是自己用这个项目,用绝对路径的问题不大,但是如果你把工程发给别人,别人就要在改这个绝对路径,这时候绝对路径的缺点立马出现. 所以在修改User Header Search Paths这个选项的时候使用"$(SRCROOT)/当前工程名字/需要包含头文件所在文件夹"将上面的双引号里面的字符串拷贝之后,你会发现这个“$(SRCROOT)”,会自动变成当前工程所以的目录. 这样就可以了,发给别人,别人

Your build settings specify a provisioning profile with the UUID, no provisioning profile was

iOS 真机调试问题 在Archive项目时,出现了"Your build settings specify a provisioning profile with the UUID "", however, no such provisioning profile was found"的出错.一直提示指定UUID的provisioning profile找不到,感觉非常奇怪.明明自己的provisioning profile是刚下载好的,而且全是新安装.于是通过谷

No matching provisioning profile found: Your build settings specify a provisioning profile with the

在Archive项目 时,出现了“Your build settings specify a provisioning profile with the UUID “”, however, no such provisioning profile was found”的出错.一直提示指定UUID的provisioning profile找不到,感觉很奇怪.明明自己的provisioning profile是刚下载好的,并且全是新安装.于是通过谷歌找到了答案. 参考地址:http://stacko

IOS问题汇总:2015-1-16 Your build settings specify a provisioning profile with the UUID‘XXX’, ...

在Xcode中当你在更新了你得证书而再重新编译你的程序,真机调试会出现“Your build settings specify a provisioning profile with the UUID‘XXX’, however, no such provisioning profile was found. Xcode can resolve this issue by downloading a new provisioning profile from the Member Center.

xcode4的环境变量,Build Settings参数,workspace及联编设置

转自:http://www.cnblogs.com/xiaodao/archive/2012/03/28/2422091.html 一.xcode4中的环境变量 $(BUILT_PRODUCTS_DIR) build成功后的,最终产品路径--可以在Build Settings参数的Per-configuration Build Products Path项里设置 $(TARGET_NAME) 目标工程名称 $(SRCROOT) 工程文件(比如Nuno.xcodeproj)的路径 $(CURREN

修改项目APP名字后,在真机运行报错:The provisioning profile specified in your build settings (“haotian”) has an AppI

错误提醒:The provisioning profile specified in your build settings ("haotian") has an AppID of "com.basecom.vipose" which does not match your bundle identifier "com.baseus.iTemperature".  Xcode can resolve this issue by downloadi