SDK中.a包过大,单独作为一个项目,功能项目引入SDK项目文档 及Search Paths相关参数说明
SDK包过大,单独作为一个项目
项目中使用第三方的SDK包(例如所有的.a文件1G多),导致项目整体过大,这个时候就可以把第三方的.a文件单独作为一个项目。
每次自动化打包都要从git拉去项目,不用每次都拉去第三方的项目。
首先在TEST文件夹中创建一个Demo,在demo 中使用到了几个xxx.a文件,如下图所示:
在Demo同级的文件夹中创建文件夹Demo-sdk文件夹,里面放入demo 中使用到了几个xxx.a文件,如下图所示:
第一种方法:
打开Demo 在General中Linked Frameworks and Libraries中添加.a文件,点击+号,选择add other选中Demo-sdk文件夹中的.a文件,如下图所示
这时候Linked Frameworks and Libraries中会成功添加.a文件,在查看Build Settings中Search Path - Library Search Paths中会指向.a所在文件夹,如下图所示:
这个时候.a文件已经可以正常引用。
第二种方法:
打开项目,找到Build Settings中Search Path - Library Search Paths,在Library Search Paths后面双击,再打开Demo及Demo-sdk所在的文件夹,把Demo-sdk文件夹直接拖拽到Library Search Paths添加路径界面,如下图所示:
拖拽成功后,会出现指向路径,如下图:
这个时候.a文件已经可以正常引用。
Search Paths相关参数说明
-
- 导入库的时候自动生成的的路径:$(PROJECT_DIR)/xxx/xxx/xxx,手动拖拽的路径"$(SRCROOT)/../xxx/xxx/xxx", 手动拖得有双引号,双引号的作用是如果在路径中有空格,可以识别该路径。没有双引号但是路径中有空格,我们发现它会自动变成两个路径。
- 路径中有空格必须要加双引号
- 多个路径可以用空格隔开,不用双引号包住
- $(SRCROOT)/ $(PROJECT_DIR)基本没啥区别,都是指向*.xcodeproj所在的路径
- 通过../来调到上一层路径,返回上上层文件夹用../../
- $(inherited): target 的 Framework Search Paths添加$(inherited)参数会从PROJECT -> Build Settings -> Framework Search Paths里面的路径会被其继承,没有的话不会继承。所以一个项目里面有多个target,使用到了同一个库(Library或Framework)那么为了方便我们可以在target添加继承参数,并且PROJECT统一中添加库的路径。继承的优先级:
- Platform defaults
- Project file (描述举例用这个优先级,比较常用)
- xcconfig file for the Project file
- Target
- xcconfig file for the Target
- recursive:遍历该目录,non-recursive:默认路径设置;不遍历该目录。如果路径的属性为recursive,那么编译的时候在找库的路径的时候,会遍历该目录下的所有子目录的库文件。PS:在搭建项目的时候,可以创建一个专门放库文件的文件夹并且设置其属性为recursive。$(PROJECT_DIR)/**相当于遍历项目文件同级下的所有路径(不推荐使用,项目大的话,影响编译的速度)。
- Header Search Paths 、User Header Search Paths的参数设置与其相同
- 导入库的时候自动生成的的路径:$(PROJECT_DIR)/xxx/xxx/xxx,手动拖拽的路径"$(SRCROOT)/../xxx/xxx/xxx", 手动拖得有双引号,双引号的作用是如果在路径中有空格,可以识别该路径。没有双引号但是路径中有空格,我们发现它会自动变成两个路径。
参考
Search Paths相关参数说明 --->https://www.jianshu.com/p/9f9c1fd2e8b5