GithubHelp home page GithubHelp logo

njhu / componentarchitecture Goto Github PK

View Code? Open in Web Editor NEW

This project forked from developererenliu/componentarchitecture

1.0 2.0 1.0 82 KB

很详细的组件化集成方案及Demo,写技术文章不容易,希望各位能帮忙点个Star,谢谢!

Objective-C 89.04% Ruby 10.96%

componentarchitecture's Introduction

这段时间好多同学说虽然提供了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设置为HomePageModule仓库而不是Spec仓库,这一步很多人都在这里犯错。

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" => "[email protected]" }
	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中指定某个私有仓库的版本号即可。

componentarchitecture's People

Contributors

developererenliu avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

superwhite007

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.