写在前面
workspace:顾名思义就是工作空间,使用过eclipse工具做过Android开发的童鞋肯定对工作空间并不陌生。简单点来理解就是多个项目的集合,我们常用的cocoapods就是使用的workspace。对于SDK开发的童鞋来说,workspace的使用是十分有必要的,因为母包的开发会涉及到渠道。Android可以使用Android library来创建一个Module,iOS则可以使用workspace来进行项目管理。
从本文可以学到的知识点
1.工作空间workspace中建立多个项目
2.workspace中主工程引用静态库或动态库
3.静态库资源文件(图片、xib、plist等)打包成bundle
1.工作空间workspace多项目管理
在桌面新建一个workspace的文件夹,并新建一个workspace放到该文件夹中,用来存放多个项目。接下来我们的所有工程都会存放在该目录下。
![](https://img.haomeiwen.com/i2841912/68a0381a6308a28c.png)
![](https://img.haomeiwen.com/i2841912/c13eb1f7655831f4.png)
接下来,打开Appgame.xcworkspace工作空间,并向该工作空间中添加一个静态库项目,一个动态库项目以及一个app主工程项目。
分别创建CommentStatic静态库、CommentFramework动态库以及Appgame主工程项目,都存放在桌面的workspace文件夹下。
File -> New -> Project... -> Cocoa Touch Static Library
File -> New -> Project... -> Cocoa Touch Framework
File -> New -> Project... -> Single View Application
添加方式一:创建CommentFramework静态库项目,项目放在桌面的workspace文件夹下,并添加到 我们创建的Appgame.xcworkspace工作空间中。
注意:Group也选择工作空间,你自己可以选择不同的来看一下效果。
![](https://img.haomeiwen.com/i2841912/7d687b7f66206b9a.png)
添加方式二:新建的项目存放在桌面的workspace文件夹下,然后再添加到Appgame.xcworkspace中。这里不用添加到任何工作空间中。
![](https://img.haomeiwen.com/i2841912/c221861d43c5ad8e.png)
然后添加到工作空间中:
![](https://img.haomeiwen.com/i2841912/e9f587d3857cc9f9.png)
![](https://img.haomeiwen.com/i2841912/bff127283e18e8e8.png)
桌面workspace文件夹下的截图以及通过Appgame.xcworkspace打开的项目截图:
![](https://img.haomeiwen.com/i2841912/ebe24967fd6cfb83.png)
![](https://img.haomeiwen.com/i2841912/6658246d22222243.png)
第一点到此结束
2.workspace中主工程引用静态库或动态库
添加.a或Framework库引用
选中主工程,添加依赖库。是主工程需要引用静态库和动态库,所有是在主工程中引入静态库与动态库。
主工程(Appgame) -> TARGETS -> Build Phases -> Link Binary With Libraries
![](https://img.haomeiwen.com/i2841912/0efcd75e1b62a1f1.png)
![](https://img.haomeiwen.com/i2841912/9a38fc318d33f4f6.png)
添加头文件
![](https://img.haomeiwen.com/i2841912/7f5d3766461b57cc.png)
![](https://img.haomeiwen.com/i2841912/8b46117f75760b48.png)
添加资源文件(自定义Bundle或存放在mainBundle下的)
对于资源文件的引用遇到了一点问题,等待解决。现在可以直接把资源文件放入主工程。下面就介绍如何制作Bundle TARGETS
3.静态库资源文件(图片、xib、plist等)打包成bundle
**添加 编译 Bundle 的TARGETS
![](https://img.haomeiwen.com/i2841912/ba4c12c891fb9ec9.png)
![](https://img.haomeiwen.com/i2841912/0947f3ceb59082f7.png)
修改 base SDK
![](https://img.haomeiwen.com/i2841912/bfa8a15f8558ffca.png)
编译资源
![](https://img.haomeiwen.com/i2841912/e387a2d7f2b25de1.png)
项目中使用
在静态库和动态库简单的分别创建 一个打印方法,在主工程中进行调用。
![](https://img.haomeiwen.com/i2841912/513402a847b13af9.png)
对于头文件的引用也可以直接将头文件放出主工程中。自定义Bundle的简单调用可自行Google。
实战截图:
![](https://img.haomeiwen.com/i2841912/03c99cec2331e965.png)
关于动态库的加载方式可以看我之前的文章
iOS开发-动态库的加载方式(一)编译时添加
iOS开发-动态库的加载方式(二)以资源文件(NSBundle)的形式添加
写在最后
假如你正在做一个SDK的工作,需要在动态库中包含framework,你可能还是存在疑问。那么,请先移步如何判断framework是动态库或静态库以及framework静态库转.a静态库
![](https://img.haomeiwen.com/i2841912/cac2bba6e8442900.png)
网友评论