WorkSpace管理多个项目
开发中会有一些常用的类或方法,或者是某个特定功能的,比如一个自定义的弹框、一个更容易使用的网络请求库,可以把它们放到一个单独的工程里,我们应用到任何其它需要的项目里的方式.
- library、FrameWork
- Workspace
网上有很多文章介绍了 library、FrameWork 方式,就是编译静态库工程,然后将编译出的lib.a拖到需要引用的工程当中去.
下面介绍一下使用Workspace
方式管理是我们的主工程跟库工程关联.配置好了之后,你只需要运行主工程的target,会自动帮你编译需要的库。其实就是CocoaPods的原理.
Workspace
整体流程:
使用Workspace
将我们的主工程跟库工程关联.配置好了之后.当我们编译我们主工程,底层会自动编译库工程,然后主工程引用最新的编译的库工程.

使用Workspace
好处
- 1.只需要打开一个工作环境,需要修改、同步代码,都不需要打开新的项目 .集中心思在代码上,在不同的项目里跳来跳去很容易打断思维的。
- 2.可以像同一个工程里一样,直接点击方法名查看引用库项目的代码.
- 3.只要运行自己的项目就行,就会自动帮你编译库文件。
- 4.可以在库工程中直接断点
配置
-
打开xcode, 创建一个Workspace,会生成.xcworkspace文件
Snip20171019_19.png
2.打开.xcworkspace 会发现什么都没有,在左边栏右键Add Files to ""添加主工程跟库工程

运行发现两个错误
-
当我们在主工程引入中的#import "A.h" 发现报错.头文件找不到错误.
- 解决办法
在主项目的Build Settings 里找到Header Search Paths设置头文件路径.
- 解决办法
-
"Undefined symbols for architecture arm64: "OBJC_CLASS$_XXX", referenced from:" 头文件#import,只是知道了头文件,库库没有在主工程参与编译.
解决办法
到主工程的Build Phases的Link Binary With Libraries里添加,点击“+”按钮,会给出整个Workspace可选的静态库,添加库

这样就可以成功运行主工程,并引用了库.
携带资源文件
静态库是不能携带资源的,点击"+"选择OS X里的frameWork添加Bundle.
- 1 新建的Bundle需要做一下设置
-
Build Settings 里的Base SDK由OS X换成iOS
Snip20171019_25.png
- 2 设置Build Setting中的
COMBINE_HIDPI_IMAGES
为NO,否则bundle中的图片就是tiff格式了
-

- 为了编译项目的时候先把需要的bundle编译了再编译主工程的target,可以在主工程Edit Scheme->Build里把bundle加进去,而且加到主工程target前面。

配置好之后,当我们编译主工程后,同时编译了库工程跟bundle.

网友评论