searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

IOS组件化

2024-06-12 08:11:39
10
0

当一个工程随着时间的推移,开发人员的增加,工程变得硕大且不好维护,提交代码冲突重重,是时候考虑项目的组件化了。若从一开始就走组件化之路绝逼是一个好办法。

组件化的目的是为了达到解耦,多工程联编更是达到了物理解耦,最理想的是各种模块可以随意的应用到其他的工程。每天蹲坑的时候也会在思索如何去走这条道路。蘑菇街以及反革命主义者的文章给我启发很大,综合两者不失为一种好办法。但本文章主要是介绍如何多工程联编,直接上步骤。

工程少不了pods吧,不然第三方的东西管理怎么办,使用cocoapod可以很好的管理。

打开WorkPlace将Enable Bitcode设为No。

接下来就是各个组件Framework的建立了,把他添加到WorkPlace里面来,接下来的几个设置很关键了:最低支持哪个版本,bitcode设置一下。

BuildPhases中添加CopyFile,在里面把编译出来的模块Framework,Bundle拷贝到App的ModuleFrames目录下,以便其他引用他的工程可以方便加入:

拷贝一份到Module目录下替换为下面脚本。在CommonModule里面添加一点公用的东西:一个是公用的宏,一个是调试输出把对外的头文件拖到public里面。
 
对外头文件

单独编译一下CommonModule工程,主工程就可以导入CommonModule使用啦,目录下有拷贝的framework。

主工程将他引入,设置头文件路径,主工程编译。

导入头文件调用公共模块方法,公共模块方法很简单,第一个模块搞定。

要是Framework里面有资源文件怎么办,主工程怎么去调用,组件工程之前能不能相互调用?

接下来我们多建立几个组件工程并且添加部分资源:CommonModule同样的方式配置建立ModuleOne建立几个文件,一个ViewController对外调用接口全部在interface头文件里面。

添加ModuleOne工程要使用的资源以Storyboard为例:添加一个Bundle,设置为ios可用,此处替换为下面的脚本执行

添加Build Resource资源:主工程可以引入资源文件到ModuleFrameworks目录下找到bundle文件。

添加ModuleOne的Framework一个组件建立完成,按照此方法可以建立多个组件:

写的demo总共添加了三个一个公共模块两个业务模块。

开发协作问题,自己负责的业务模块可以单独编译,并不影响其他业务模块。如果需要全部编译,一个一个去编译会显得有点呆。我们可以建立一个Target Build所有的模块也可以自己调整Framework的编译顺序,太棒了。

这样就可以实现全部工程的编译了,需要注意,模拟器跟真机切换时候需要分别编译,打包发布不能用模拟器编译。

子工程需要添加第三方库时:

把第三方Framework文件通过copy files拷贝到ModuleFrameworks里和自己Framework文件放在一起。

如果新增了第三方库和Bundle,需在copy files中添加拷贝文件。

模块内新增了图片等资源文件,需在Bundle的Resourse Target中将新文件添加到Copy Bundle Resource中才会被打到Bundle包里。

 
 

 

0条评论
作者已关闭评论
崔****寿
1文章数
0粉丝数
崔****寿
1 文章 | 0 粉丝
Ta的热门文章查看更多
崔****寿
1文章数
0粉丝数
崔****寿
1 文章 | 0 粉丝
原创

IOS组件化

2024-06-12 08:11:39
10
0

当一个工程随着时间的推移,开发人员的增加,工程变得硕大且不好维护,提交代码冲突重重,是时候考虑项目的组件化了。若从一开始就走组件化之路绝逼是一个好办法。

组件化的目的是为了达到解耦,多工程联编更是达到了物理解耦,最理想的是各种模块可以随意的应用到其他的工程。每天蹲坑的时候也会在思索如何去走这条道路。蘑菇街以及反革命主义者的文章给我启发很大,综合两者不失为一种好办法。但本文章主要是介绍如何多工程联编,直接上步骤。

工程少不了pods吧,不然第三方的东西管理怎么办,使用cocoapod可以很好的管理。

打开WorkPlace将Enable Bitcode设为No。

接下来就是各个组件Framework的建立了,把他添加到WorkPlace里面来,接下来的几个设置很关键了:最低支持哪个版本,bitcode设置一下。

BuildPhases中添加CopyFile,在里面把编译出来的模块Framework,Bundle拷贝到App的ModuleFrames目录下,以便其他引用他的工程可以方便加入:

拷贝一份到Module目录下替换为下面脚本。在CommonModule里面添加一点公用的东西:一个是公用的宏,一个是调试输出把对外的头文件拖到public里面。
 
对外头文件

单独编译一下CommonModule工程,主工程就可以导入CommonModule使用啦,目录下有拷贝的framework。

主工程将他引入,设置头文件路径,主工程编译。

导入头文件调用公共模块方法,公共模块方法很简单,第一个模块搞定。

要是Framework里面有资源文件怎么办,主工程怎么去调用,组件工程之前能不能相互调用?

接下来我们多建立几个组件工程并且添加部分资源:CommonModule同样的方式配置建立ModuleOne建立几个文件,一个ViewController对外调用接口全部在interface头文件里面。

添加ModuleOne工程要使用的资源以Storyboard为例:添加一个Bundle,设置为ios可用,此处替换为下面的脚本执行

添加Build Resource资源:主工程可以引入资源文件到ModuleFrameworks目录下找到bundle文件。

添加ModuleOne的Framework一个组件建立完成,按照此方法可以建立多个组件:

写的demo总共添加了三个一个公共模块两个业务模块。

开发协作问题,自己负责的业务模块可以单独编译,并不影响其他业务模块。如果需要全部编译,一个一个去编译会显得有点呆。我们可以建立一个Target Build所有的模块也可以自己调整Framework的编译顺序,太棒了。

这样就可以实现全部工程的编译了,需要注意,模拟器跟真机切换时候需要分别编译,打包发布不能用模拟器编译。

子工程需要添加第三方库时:

把第三方Framework文件通过copy files拷贝到ModuleFrameworks里和自己Framework文件放在一起。

如果新增了第三方库和Bundle,需在copy files中添加拷贝文件。

模块内新增了图片等资源文件,需在Bundle的Resourse Target中将新文件添加到Copy Bundle Resource中才会被打到Bundle包里。

 
 

 

文章来自个人专栏
ios开发
1 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0