IOS组件化-多工程联编

作者: Yes_Cui | 来源:发表于2016-08-05 11:35 被阅读1084次

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

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

首先上下工程效果图:

建立一个新工程:

工程少不了pods吧,不然第三方的东西管理肿么办,我们偷偷的跑到根目录下去添加一下。为了方便我下载了一个pods的客户端,哈哈,只是不能好好的用命令行装逼了:

打开WorkPlace将Enable Bitcode设为No:

接下来就是各个组件Framework的建立了:

把他添加到WorkPlace里面来:

接下来的几个设置很关键了:

最低支持哪个版本 bitcode设置一下 这个干嘛的脑补

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

拷贝一份到Module目录下替换为下面脚本

在CommonModule里面添加一点公用的东西:

一个是公用的宏,一个是调试输出

把对外的头文件拖到public里面:

对外头文件

单独编译一下CommonModule工程,主工程就可以导入CommonModule使用啦:

目录下有拷贝的framework有木有很鸡冻

主工程将他引入:

设置头文件路径

主工程编译:

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

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

接下来我们多建立几个组件工程并且添加部分资源:

CommonModule同样的方式配置建立ModuleOne 建立几个文件,一个ViewController 对外调用接口全部在interface头文件里面

添加ModuleOne工程要使用的资源以Storyboard为例:

添加一个Bundle 设置为ios可用 此处替换为下面的脚本执行

Build Resource资源:

主工程可以引入资源文件 到ModuleFrameworks目录下找到bundle文件

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

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

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

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

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

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

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

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

附上工程目录图:

PS:

特别鸣谢(金鸿,俊华)

大家有好的建议或者帮助欢迎留言(模块工程间的共用资源问题欢迎大家讨论留言)

Demo地址:https://pan.baidu.com/s/1hsKFMNa

如需转载标明出处

各位看官觉得有用的话就请Yes-Cui喝瓶水吧,打赏一个

相关文章

  • IOS组件化-多工程联编

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

  • 【转】iOS 组件化 多工程联编

    https://www.jianshu.com/p/a8359ef03d7f[https://www.jiansh...

  • Swift下的组件化(多工程联编)

    前言 最近公司新开了个项目,需要从零开始搭建,之前做过一些组件化的工作,但是之前的开发语言是OC,新项目切换到了S...

  • 组件化方案

    组件化方案引用 在现有工程中实施基于CTMediator的组件化方案 iOS组件化实践(一):简介 iOS组件化实...

  • iOS 组件&模块化架构

    说实话听说起【组件化架构】这个词汇还是在网上不小心看到的,在细看各种解释,发现就是Java的多工程联编,当...

  • IOS组件化-多工程联编(多工程分别导入pods第三方库)

    以上一篇 demo为例 打开Podfile文件 首先声明 workspace 'MainWorkingPlace'...

  • OC多工程联编

    1.主工程是:YYTDemo 平级的子工程是:YYTLIb2.主工程引用子工程3.新建 一个workspace之...

  • xcode 多工程联编

    多工程联编一般用于测试 SDK工程,可以将多个SDK放入一个工程,或者多个工程来测试一个SDK。这里说一下我遇到的...

  • ios 组件化

    参考 iOS 组件化实践《二》基于现有项目拆分组件化实践 在现有工程中实施基于CTMediator的组件化方案 i...

  • iOS 组件化

    参考:蘑菇街 App 的组件化之路蘑菇街 App 的组件化之路·续 iOS应用架构谈 组件化方案在现有工程中实施基...

网友评论

  • Carpe_Diem1123:博主,工程间的资源一定要拷贝一份到主工程吗?这段时间过去有没有其他的方法公用工程资源?
  • 77f707e9f5db:亲 “BuildPhases中添加CopyFile,在里面把编译出来的模块Framework,Bundle拷贝到App的ModuleFrames目录下,以便其他引用他的工程可以方便加入:”这个怎么获取的呢 新人表示不懂
    77f707e9f5db:@Yes_Cui 大神 照着做 感觉进行不下去😂。 卡在“${SRCROOT}/../../MainWorkingPlace/...........”这块啦,不知道怎么获取的,你所说的脚本又是什么呐,不吝赐教
    Yes_Cui:@冰_ice_d403 这是一个拷贝脚本
  • 阿兹尔:求demo 383160955@qq.com 楼主
    Yes_Cui:https://pan.baidu.com/s/1hsKFMNa
    Yes_Cui:@阿兹尔 demo 地址在文章下方
  • 6097f97cae80:求个demo 971461935@qq.com 作者好人
  • 夏妍妍:精辟
  • d8ad5d0e0bcd: 基本模块[8755:273255] Unknown class PartOneViewController in Interface Builder file.

    基本模块[8755:273255] -[UIViewController showPartTwoPage]: unrecognized selector sent to instance 0x7fd40ac3e1e0

    基本模块[8755:273255] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController showPartTwoPage]: unrecognized selector sent to instance 0x7fd40ac3e1e0'

    根据demo操作会报这些错误是为啥呢
    d8ad5d0e0bcd:@Yes_Cui 照着教程做的,这问题已经解决了,就是在moudle1引用moudle2.framework出的问题,访问不到Moudle2的内容,我把Moudle1改成动态库就没问题了,原理我就不太清楚了
    Yes_Cui:@Ltmana 有没有按照教程build分模块以及bundle资源?
  • wg689:求demo 596201463@qq.com
    hopestar90:补一个邮箱 767655024@qq.com
    hopestar90:求楼主发一份demo
    Yes_Cui:@wg689 已发
  • amove_xu:求demo 谢谢 已发您邮箱
    Yes_Cui:@amove_xu demo已发,欢迎提出意见,共同学习
  • 神话天堂:学习了 :+1:

本文标题:IOS组件化-多工程联编

本文链接:https://www.haomeiwen.com/subject/ctezjttx.html