目标:多工程联编的方式,Workspace内多project开发
1. 创建一个Workspace,这个是一个空的Workspace
- 自己创建一个文件夹,把workspace放进去
2. 打开Workspace,会看到一个空的工作空间,什么都没有
3. 创建一个主project:
3.1.
这个工作空间下的主工程创建成功:
4. 创建子工程,这里就是我们的组件模块,一个项目就是一个组件,把代码隔离开,让他们不能自由的调用
4.1
组件模块创建成功:
删除不必要的文件,剩下下面几个文件:
5. 把子项目的 target 改为static library,这样子项目(组件)才能被主项目调用
5.1 先删掉之前的target
5.2 在target下面添加 static library
- 里面出现两个ModuleA文件夹,我们根据需要删掉其中一个引用就行,注意那些未引用的文件重新引用进来
6. 创建Bundle,同样在target处点“+”
把原来Assets文件夹先删除引用,重新添加进工程
在ModuleA本地的文件夹里面新建ModuleABundle文件夹,用来存放所有资源文件,Assets文件夹也移到里面去
把ModuleABundle文件夹add进项目,info文件也可以放里面
成功把资源文件和类文件分离开:
7. 同样的方法创建一个ModuleB
8. 模块调用
8.1 主工程调用子工程:
添加依赖:
8.2 到这里就实现了主项目对子项目的文件跨项目调用了:
ModuleA 和 ModuleB 因为都在同一个模块中同时导入过,他们不用再重新按上面的流程设置依赖,他们可以直接相互调用了
8.3子模块间的调用,设置里面不用设置依赖:
上面主要为了展示整个流程,在实际开发中,主工程主要引入路由、common等这些公共模块,其他那些子项目根据情况,可不相互引用的尽量不要引用,因为要防止在开发过程中出现直接耦合其他模块的情况。
9. Static Library和Framework的共同点和区别
- 共同点:
- 两者其实都可以是静态库。
-
主要不同点:
1.承载的内容范畴:
- Static Library的产出物只是一个.a文件,为二进制执行文件。分享给别人的时候,头文件、静态资源文件需要另外提供。
- Framework为一站式分享方案,其实是一个文件夹,其中包含代码签名、头文件、二进制执行文件、静态资源文件等。
2.头文件搜索路径的区别:StaticLibrary需要设置头文件搜索路径,Framework不需要。
3.当存在对外部代码库依赖的时候
- StaticLibrary:能够只引用外部库的头文件,调用外部库的公开方法,而不引入其库实现,实现与引用库的分离部署。
- Framework:要引用一个外部库,就必须要将此外部库的实现放入Framework内编译才可以。如果要想达到StaticLibrary的效果,可以使用运行时方式调用。
4.运行环境(对3的理解升级)
- StaticLibrary:共享其运行环境,假如其运行环境中包换库中同一个类,会发生代码冲突,必须剥离其中一方的此类,然后共享此类。
- Framework:与其运行环境隔离,假如其运行环境中包换库中同一个类,不会发生冲突,同名的两个类会在各自的环境中独立运行,互不干扰,哪怕是单例类。
5.综合,如何选择使用Framework还是StaticLibrary
- 假如不想在同一个App中包含多份三方库(减小包大小),可以使用StaticLibrary,库本身和App共享第三方库。但是产出物的结构可能会比较乱。
- 假如不想考虑和App的代码冲突问题,库本身独立使用需要的库,想提供比较好的库结构,可以使用Framework。但是假如库本身和App都使用了同一个三方库,会存在两份三方库,会增加包大小。
10. 温馨提示
如果类里面的+load方法不执行,给Other Link Flags加上-ObjC