一、环境变量
1、常见环境变量
$(PRODUCT_BUNDLE_IDENTIFIER)
- product bundle identifier 就是App的唯一标识
$(PRODUCT_NAME):product name // 产品名字
- PRODUCT_NAME 就是可以看做是App的名字,App的名称可以在,也可以直接修改Info.plis中对应的键,还可以在Build Settings中修改Product Name来修改(默认是$(TARGET_NAME):即当前选中的target对应的值
${EXECUTABLE_NAME}
- Executable name – 执行程序名,默认与 PRODUCT_NAME 一致。
$(INHERITED)
- 继承
在Xcode项目中很多地方都有(inherited)的意思就是继承上一级或依赖项的配置。通过CocoaPods集成的项目,$(inherited)将会包含Pods.xcodeproj中的配置。
$(SRCROOT)
- 项目的根目录,
SRCROOT=/Users/hanlitao/Desktop/demo
$(PROJECT_DIR) = $(SRCROOT)
- 在实际项目中,PROJECT_DIR和$(SRCROOT)可以相互替换使用。
${PODS_ROOT}
- 代表的是pod目录
2、Bundle name和Bundle display name
Bundle name:简单来说就是 App 安装到 iOS 机子里的 App 文件夹名。 也就是ipa的包名
Bundle display name :app在设备上的显示名字
二、Search Paths
-
Use Header Maps
默认值是Yes,开启这个开关后,在本地会根据当前目录生成一份文件名和相对路径的映射,依靠这个映射,我们可以直接import工程里的文件,不需要依靠header search path。如果将Use Header Maps设置为NO,则不会生成映射。
如图这样将Use Header Maps设置为NO,直接#import “Student.h”会编译报错。这是因为上面所说的原因没有生成对应的路径映射。此时,Student.h和Viewcontoller.h是在同一目录下,直接导入Student.h的路径是不正确的。Modle/Student才是正确的路径。
这样#import "Modle/Student.h”才会是正确的路径。
总结一下:如果将Use Header Maps设置为NO,不会生成映射路径,你需要导入自己正确的文件路径才行
当然你直接导入绝对路径也能解决问题
- Use Header Search Paths:用户头文件的搜索目录源
- Header Search Paths:本地头文件的搜素目录源
怎么理解呢?
首先明确的是Use Header Search Paths和 Header Search Paths还是和导入头文件有关,再回忆一下导入文件的方式有<>和“”两种。#import <>和#import "”的区别是什么:在开发中我们的经验是系统库和第三库用 <>,自定义文件用“”。
而更详细具体的来讲:<>是从系统目录空间 (对应Header Search Paths)中搜索文件,而" “ 是先从用户目录空间(对应 User Header Search Paths)中搜索文件,如果搜索不到再从系统目录空间中搜索文件。
因此 Use Header Search Paths和Header Search Paths的作用相
同的,区别就是Header Search Paths指定了它们是系统目录;而Use Header Search Path指定了它们是用户目录。
1、如果指定了Header Search Paths的目录源,这样直接导入文件就可以了。
2、当 #import “Person.h”时,会先去Use Header Search Paths的目录源开始找,而Use Header Search Path此时没有目录源,就会从接着从Header Search Paths的目录源开始查找。
-
3、当 #import <Student.h>时,就会直接从Header Search Paths的目录源开始查找。
- 当 #import <Student.h>时,只会直接从Header Search Paths的目录源开始查找。而此时Header Search Paths找不到,自然编译就会报错
小结一下:
- 1、import””在Use Header Search Paths和Header Search Paths中都可以使用。
- 2、import<>在Header Search Paths中或者系统库时才能使用。
- 3、import””导入头文件查找的顺序应该是:
如果有路径映射(Use Header Maps=YES),直接通过映射表获取;
没有路径映射Use Header Maps=NO),会先去Use Header Search Paths的目录源开始找,如果找不到再去Header Search Paths中查找。 - 4、import<>导入头文件,可以从Header Search Paths查找。所以使用import<>不仅仅是引用系统类,还可以是自定义类。