利用workSpace包含两个工程,并相互联系
iOS 开发中,有时候会出现自己写了了一个静态库工程,然后想把这个静态库工程直接使用到主工程中,而不是打包成.a库导入主工程中。
该方法优点:
- 源码直接存在主工程中,可以断点调试,方便排查问题
- 代码和主工程分开的,方便管理
- 可以直接进行代码修改,然后运行检查。避免还要打开静态库工程修改,然后编译成.a库,然后导入,然后再编译主工程
1.创建workSpace
选择File->New->workSpace创建出workSpace。
2.导入工程
右键点击创建的workSpace左侧空白处,选择add files to ..,然后找出你要添加进去的工程.xcodeproj文件。
注意:一定要点击空白处,不能点击加入的文件
3.使两个工程产生关联
1.选择主工程的TARGETS,点击General,找到Linked Frameworks and Libraries。可以直接把静态库工程中products里面的.a直接拖进去。
2.选择主工程的TARGETS,点击Build Settings,找到Header Search Paths 输入$(SRCROOT)/当前工程名字/需要包含头文件所在文件夹。用于在主工程中能用#import来引入静态库的头文件。
3.找到Library Search Paths,输入$(SRCROOT)/工程所在的根文件夹名。用于主工程能使用.a静态库功能。
注意: 在设置路径的时候,左边选项中要选择recursive,如果路径中存在空格的话,就需要用英文双引号把所有路径包裹住。
Header Search Paths 管理导入的头文件的路径
Library Search Paths 管理导入的*.a的路径
Search Paths相关参数说明
1.导入库的时候自动生成的的路径: (PROJECTDIR)/XcodeForSeachPathTest/ThirdLib/zhenLib,手动拖拽的路径" ( P R O J E C T D I R ) / X c o d e F o r S e a c h P a t h T e s t / T h i r d L i b / z h e n L i b , 手 动 拖 拽 的 路 径 " (SRCROOT)/../Frameworks/zhenFW/zhenFW.framework”,很明显的区别是手动拖得有双引号,双引号的作用是如果在路径中有空格,可以识别该路径。没有双引号但是路径中有空格,我们发现它会自动变成两个路径。
2.路径中有空格必须要加双引号
3.多个路径可以用空格隔开,不用双引号包住
4.$(SRCROOT)
/$(PROJECT_DIR)
基本没啥区别,都是指向*.xcodeproj
所在的路径
5.通过../来调到上一层路径,返回上上层文件夹用../../
6.$(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
7.recursive
:遍历该目录,non-recursive
:默认路径设置;不遍历该目录。如果路径的属性为recursive,那么编译的时候在找库的路径的时候,会遍历该目录下的所有子目录的库文件。PS:在搭建项目的时候,可以创建一个专门放库文件的文件夹并且设置其属性为recursive。$(PROJECT_DIR)/**
相当于遍历项目文件同级下的所有路径(不推荐使用,项目大的话,影响编译的速度)。
8.Search Paths子选项:Header Search Paths 、User Header Search Paths的参数设置与其相同
如果主工程时Swift,静态库为OC时,还需要创建桥接文件
- 创建桥接文件:
2. 导入头文件:
在主工程的target中选择build Settings,找到Objective-C Bridging Header,如下图:
设置路径名:
(SRCROOT)/Bridge−Swift−OC.h如果你建立在工程里面的文件夹里了,需要在中间写上文件夹的名字,如:
(
S
R
C
R
O
O
T
)
/
B
r
i
d
g
e
−
S
w
i
f
t
−
O
C
.
h
如
果
你
建
立
在
工
程
里
面
的
文
件
夹
里
了
,
需
要
在
中
间
写
上
文
件
夹
的
名
字
,
如
:
(SRCROOT)/文件夹名/Bridging-Header.h
3. 在桥接文件中使用#import 导入所需文件名,