利用workSpace包含两个工程,并相互联系

利用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时,还需要创建桥接文件

  1. 创建桥接文件:

利用workSpace包含两个工程,并相互联系_第1张图片
利用workSpace包含两个工程,并相互联系_第2张图片
2. 导入头文件:
在主工程的target中选择build Settings,找到Objective-C Bridging Header,如下图:
利用workSpace包含两个工程,并相互联系_第3张图片
设置路径名: (SRCROOT)/BridgeSwiftOC.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 导入所需文件名,
利用workSpace包含两个工程,并相互联系_第4张图片


https://www.jianshu.com/p/9f9c1fd2e8b5

你可能感兴趣的:(iOS,开发)