美文网首页
iOS组件化[转载]

iOS组件化[转载]

作者: Jesscia_Liu | 来源:发表于2021-06-17 13:57 被阅读0次

    这段时间好多同学说虽然提供了Demo,但还是不太清楚组件化架构的集成方式,包括怎么创建私有仓库和配置Spec之类的。正好这段时间不是太忙了,我在这里简单的写一下架构集成方面的东西。


    组件化架构文章

    组件化架构漫谈

    创建私有仓库

    创建私有代码仓库

    首先创建一个托管当前组件的私有代码仓库,然后将仓库Clone下来,把模块代码Push上去。例如下面的地址:

    https://git.coding.net/LiuXiaoZhuang/HomePageModule.git

    这样就完成一个雏形了,可以通过这个代码仓库进行组件的代码管理了,这一块和平时的代码版本控制操作一样,所以就不详细讲了。

    创建私有Spec仓库

    现在要创建私有的Spec仓库了。这时候你肯定有疑问了,不是已经有私有仓库了吗,这是干啥的?

    很多人都在这块犯错了,所以这里要着重讲一下。就像CocoaPods的开源仓库一样,平时用来开发的代码和发布给别人使用的代码,是不在同一个仓库的。

    例如AFNetworking,代码仓库是在AFNetworking代码仓库这里,而AFNetworking提供给其他人使用的时候,需要先提交到CocoaPodsSpec仓库,然后我们执行pod install都是从Spec仓库拉去下来的代码。这么说大家理解了吧,不理解就去我博客里留言吧。

    例如我们创建的Spec仓库是下面的地址,最后提供给其他人的代码都要被提交到这里。创建Spec代码仓库和平时创建一样,只是这里暂时先为空,也不需要进行Clone操作。

    https://git.coding.net/LiuXiaoZhuang/HomePageModuleSpec.git

    搭建环境

    创建.podspec文件

    找到私有仓库HomePageModule所在的目录,在这个目录下通过下面命令,创建一个新的.podspec文件,在这个文件中来进行私有仓库的一些配置工作。

    pod spec create HomePageModule
    

    创建这个文件后,需要修改里面的一些东西,例如这里我用HomePageModule私有仓库做例子。这里面修改的东西,表示你的Spec私有仓库的一些特征,例如namesourceversion之类的,在进行pod search操作时候的显示结果,也是由这个文件决定的。

    下面source_files指定的是文件路径,也就是最终导入到项目中的文件。下面的exclude_files指定的是不需要的文件路径,这些文件即便在source_files中,也不会被包含在Pods仓库中。

    需要注意的是,下面的source设置为HomePageModule仓库而不是Spec仓库,这一步很多人都在这里犯错。另外,podspec文件中可能会有一些Example的字段,这些字段应该都进行修改,否则执行pod命令会报错。

    Pod::Spec.new do |s|
        s.name          = "HomePageModule"
        s.version       = "1.0"
        s.summary       = "description of HomePageModule"
        s.description   = <<-DESC
            "this is HomePageModule content description."
                  DESC
        s.homepage      = "https://coding.net/u/LiuXiaoZhuang/p/HomePageModule/git"
        s.license       = "MIT"
        s.author        = { "LiuXiaoZhuang" => "2046703959@qq.com" }
        s.source        = { :git => "https://git.coding.net/LiuXiaoZhuang/HomePageModule.git", :tag => "#{s.version}" }
        s.exclude_files = "HomePageModule/HomePageModule/AppDelegate.{h,m}", "HomePageModule/HomePageModule/main.m"
        s.source_files  = "HomePageModule/HomePageModule/*.{h,m}"
        s.frameworks    = 'UIKit'
        s.platform      = :ios
    end
    

    开发过程

    验证podspec文件

    先用pod命令验证一下这个.podspec文件有没有问题。

    pod lib lint
    

    如果没问题会提示

    HomePageModule passed validation.
    

    如果没问题就将HomePageModule的代码提交到私有服务器上,连同生成的.podspec文件也要一块提交上去。

    关联podspec到Spec私有仓库

    通过下面命令,添加远程Spec仓库到本地,相当于建立一个连接关系。(需要注意这里的地址是Spec的地址,不要写错)

    pod repo add HomePageModule https://git.coding.net/LiuXiaoZhuang/HomePageModuleSpec.git
    

    添加完成后,用下面命令检查一下是否成功。

    pod repo lint
    
    提交代码到Spec私有仓库

    如果上面命令没问题后,这就代表组件的私有仓库和其对应的Spec仓库,已经可以提交并向外提供代码了。这时候我们就可以进行代码开发,开发完成之后通过下面的命令,将代码提交或更新到Spec仓库。

    pod repo push HomePageModule HomePageModule.podspec
    

    提交给Spec私有仓库的文件,可以通过.podspec文件的s.source_files字段进行过滤,符合过滤条件的文件就都会被提交到Spec仓库。例如上面我们将所有.h.m文件都提交到Spec仓库,除了这些还可以设置imageAssetsXIBBundle等文件。

    使用私有仓库代码

    Spec私有仓库中有可用的代码后,就可以通过CocoaPods命令来使用组件代码了。在Podfile文件中需要声明私有仓库地址,例如下面代码。

    source 'https://git.coding.net/LiuXiaoZhuang/HomePageModuleSpec.git'
    
    target 'MainProject' do
        # 第三方库
        pod 'Masonry'
        pod 'MGJRouter'
    
        # 私有仓库
        pod 'HomePageModule',   '~> 1.1'
    end
    

    在配置好这套环境后,之后的开发就只需要执行上面pod repo push的操作了。根据业务需求发布指定的组件版本,并将组件pushSpec私有仓库供其他人使用即可。

    版本控制也非常简单,只需要在Podfile中指定某个私有仓库的版本号即可。

    Local Pods

    私有仓库调试比较麻烦,不可能是每修改一些代码,就提交到远端仓库,再拉下来验证代码是否有效。所以,为了提升开发效率,可以通过LocalPods的方式进行调试。或者不想用远端仓库,也可以直接用LocalPods的方案进行本地组件化,但是并不推荐这种方案,因为不能进行物理隔离。

    本地LocalPods仓库不需要单独创建,直接用之前的组件仓库。在pods中使用本地仓库时,需要指定对应路径。指定路径后,执行pod install即可集成本地仓库。为了方便指定本地路径,建议将组件仓库尽量放在一个文件夹下,例如叫做LocalPods

    pod 'Login', :path => './LocalPods/Login/'
    

    通过上面的命令集成本地仓库后,Pods会生成一个和远程文件夹同级的文件,叫做Development Pods,这个文件夹就是本地仓库所在的位置。

    此时之前Login仓库的产物就被替换为本地LocalPodsLogin代码的产物了,后面的修改都会影响这个产物。直到调试完成,将代码提交到组件仓库,将path路径删除重新执行pod install,产物就会被替换为组件仓库的产物。

    相关文章

      网友评论

          本文标题:iOS组件化[转载]

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