为当前项目添加.pch文件
- 新建.pch文件,pch文件的命名规则:“工程名字-Prefix.pch”,当然也可以不遵守这个规则随意命名
- 指定pch文件所在的位置(既然我是新建的pch文件,Xcode为何不直接给我设置pch文件的路径,还要开发者做这件事,真是不人性化),在Build Settings中搜索Prefix Header, 然后在该项中输入“(SRCROOT)/项目名称/pch文件名”,例如“(SRCROOT)/iBlog/iBlog-Prefix.pch”
- 将Precompile Prefix Header 预编译头设置成YES,表示在编译时缓存缓存头文件,可以提供编译速度
$(SRCROOT) 是什么鬼
从上图中可以看到系统将(SRCROOT)转换成项目所在位置的绝对路径,我们可以称“(XXX)”这个东西为Xcode的环境变量, src root ,即 源码的根路径,使用这个环境变量的好处是如果将.pch文件的路径写死成绝对路径,当这个项目发到其他电脑上允许,那么这个路径将不匹配,如果使用环境变量无论放在那个电脑上都可以允许,因为$(SRCROOT)会自动识别项目所在的路径
Prefix Header相对路径配置
上面使用了$(SRCROOT)环境变量来配置.pch文件的绝对路径,也可以通过配置相对路径配置,默认Xcode是从项目所在的目录的父目录开始搜索的:在本示例中是”/Users/macmin/Documents/iBlog”, 所以配置.pch文件的相对路径要在前面的路径上再追加“iBlog/iBlog-Prefix.pch”即可
Info.plist 中的$()
$(PRODUCT_NAME) : product name :产品名字
环境变量的目的就是为了一次定义多次使用,在其他某个地方修改了,其他所有引用的地方都会跟着改变。
PRODUCT_NAME就是可以看做是App的名字,App的名称可以在,也可以直接修改Info.plis中对应的键,还可以在Build Settings中修改Product Name来修改(默认是$(TARGET_NAME):即当前选中的target对应的值)
- Bundle name 简单来说就是 App 安装到 iOS 机子里的 App 文件夹名。
- Executable name – 执行程序名,默认与 PRODUCT_NAME 一致。
- Bundle display name – 真正显示到用户屏幕上的 App 名称。
可见在模拟器/真机上显示的名字是由Bundle Display Name决定的。默认情况下Bundle Display Name就等同于Product Name,所以大家通常认为Product Name=App的Name
$(PRODUCT_BUNDLE_IDENTIFIER) product bundle identifier
就是App的唯一标识,同样可以在多个地方来修改
$(EXECUTABLE_NAME)
执行程序名,默认与 PRODUCT_NAME 一致。不能修改Info.plist中的该键,否则报错
$(inherited):继承
头文件搜索的路径
Xcode在编译时, Header Search Paths、Library Search Paths是一定会去搜索的。而User Header Search 、只有在Always Search User Paths为Yes时才会被搜索。
Project的Building Settings中得设置默认并不被Targets继承,只有当Targets的设置加入了(inherited)时才被继承,添加目录的时候写上“(inherited)” 就表示从frameworks里面读取。