Objective-C用workspace和cocoapods管
正常情况下, 每个workspace 只对应一个App project, 等项目庞大之后, 就出现了组件化开发, 一种方案是多组件开发, 只是通过runtime将一个项目拆分多个模块, 每个module只是代码的一个集合; 而另一种的就是一个主文件+多个project形式, 也就是单workspace管理多project. 今天就来介绍下第二种方式的使用, 其他的相关学习可参考:
CTMediator组件化
Swift用workspace和cocoapods管理多个project
1. 创建存放workspace 和 project 的文件夹
例: ocWorkspace
2. 构建一个workspace


如图选择构建一个WorkSpace,会生成,xcworkspace文件,一般创建完成后会自动打开WorkSpace工程。打开工程后,会发现什么都没有, 然后我们要添加各个工程(project)。
3. 创建并添加新工程


同时一定要注意路径的选择!!!

这个时候其实就可以运行aa项目了.
4. 再创建并添加新工程, 测试同时管理两个, 创建方式一模一样
或者想在当前worksapce内添加已经创建好的项目, 就在当前的workspace项目中右键->add file
添加已有项目
创建好之后, 可以选择不同项目分别运行, 都是ok的, 那两个项目之间如何相互引用呢?
5. 互相引用
如果要在项目aa中引用bb中的文件,则必须要修改路径,在aa的Build Settings 里找到Header Search Paths,添加一项SRCROOT)/../bb(也可以直接将文件夹bb拖到里面自动生成路径),并且设置为recursive。SRCROOT]是当前的工程路径,..是返回上一层,然后到bb文件夹。使用了相对路径,为了是项目移动不会影响这个配置,只要主工程和其他工程的相对位置不变,这里的相对位置是固定在同一个文件夹。

6. 使用
在aa中使用时, 需要引入头文件.m, 而不是.h, 这里需要注意

7. 使用cocoapods 管理
通过终端cd 到当前workspace 路径下
touch Podfile
编辑Podfile 文件
# 平台最低版本
platform :ios, '10.0'
use_frameworks!
# workspace文件名
workspace 'OCWorkspace.xcworkspace'
# 主工程路径
project 'aa/aa.xcodeproj’
target 'aa' do
project 'aa/aa.xcodeproj’
# 自己的引用
# 也可以指定自己的platform
end
target 'bb' do
project 'bb/bb.xcodeproj’
pod 'Masonry'
end
pod install
8. project类型为framework 或者Library

一定要加入引用:aa项目-> target -> General ->Frameworks, Libraries, and Embedded Content -> 添加需要的SDK

最后在aa的Header Search Paths 设置cc的路径即可。
引用需要的文件同样是.m的形式。
结语
路漫漫其修远兮,吾将上下而求索~
.End