iOS组件化

一、新建工程LZDemo作为壳工程

1、添加Podfile文件

cd到你刚创建的工程目录下,执行以下语句

pod init

然后会发现你的工程目录下多了Podfile文件


图片.png

2、生成xcworkspace工程

执行

pod install

3、新建一个Lib(自己起名)文件夹,用来存放组件库(其他独立工程)


图片.png

然后cd到Lib下
执行

pod lib create TRUNetworking

其中TRUNetworking就是你自定义的一个工程名字,也就是你的其中一个组件或者业务模块

图片.png

然后根据提示,生成pod工程模板


图片.png

打开新建的TRUNetworking工程里的Example,可以看到pods里面,有个ReplaceMe的文件,意思就是要替换它,换成我们自己需要对外提供的类。


图片.png

新建一个类,比如TRUNetworking,复制粘贴到ReplaceMe同级目录下,并删掉ReplaceMe.m文件


图片.png

之后cd到Lib/TRUNetworking/Example/文件目录下,执行

pod install

这个时候在Development Pods文件下会多出这两个文件,这就是本地开发的pods文件


图片.png

而Podfile的内容其实是
pod 'TRUNetworking', :path => '../'
说明他获取的是本地路径

然后删除Example for TRUNetworking里面的TRUNetworking类,不然运行会因为类重复报错。
至此,一个组件的本地库就创建完成了。

二、壳工程使用本地组件库

首先cd到壳工程LZDemo目录下,修改LZDemo的Podfile文件,增加
pod 'TRUNetworking', :path => 'Lib/TRUNetworking'


图片.png

执行

pod install
图片.png

这样壳工程就pod到本地组件库的内容了,原理跟使用平时的第三方远程库一样。只不过这次使用的是本地的。只不过本地的pod放在了Development Pods文件夹里面,这个文件夹里的内容其实是可以修改的,修改后立刻生效,会比远程pod需要提交版本号,本地再pod对应的版本号方便得多。

我们再用同样方法创建另一个本地工程,登录模块TRULogining
但是这个模块需要依赖TRUNetworking,所以我们得在两个地方添加依赖


图片.png

图片.png

由于依赖的TRUNetworking在更上一层的文件中,所以需要../../
执行

pod install

之后应该能看到Development Pods里已经有2个文件夹了


图片.png

这个时候就可以import里面的类,在本地使用了。

注意:如果新建的本地pod里的单工程,如果依赖了一些第三方的远程库的话,需要在该工程的podspec文件里添加依赖,如:s.dependency 'XXX', '~> 3.3.8'。然后执行pod install之后,再CD回到主工程中重新执行pod install,否则运行时会报找不到第三方库的错误。

三、关联git
完成了本地pod依赖,但是我们肯定不会是个人开发,否则弄这个组件化的意义也不大,所以我们首先得提交到远程,一般公司里都会搭建私有仓库诸如GitLab,这里就拿GitHub来做演示。

1)提交壳工程到远程
首先,在Github上Create a new repository


图片.png

然后,cd回壳工程目录下,依次执行

git init

初始化git

git add .

执行git add .的时候,会发现警告warning: adding embedded git repository: Lib/TRULogining之类的,是因为TRULogining目录下有它自己的git仓库,它俩是独立存在的,有另外一个git仓库专门管理他,因为它也是一个完整的独立工程,这里我们先忽略它。

然后,提交初始化工程

git commit -m "init project"

接下来,我们要让这个工程和刚才在Github上创建的Repository关联

git remote add origin https://github.com/liuzhao/LZDemo.git

然后,提交初始化工程到远端的master,这里我们用了-f,表示强制提交,否则因为Github上还有readme之类的文件,需要解决冲突再pull,比较麻烦,基于是初始工程,直接强制push上去即可。

git push origin master -f

刷新一下Github上的LZDemo,会看到已经提交上去了


图片.png

2)提交子工程到远端


图片.png

使用跟提交主工程一样的做法,分别在Github上Create a new repository,然后把他们关联起来

唯一和壳工程不同的是,他们是组件,需要对外提供依赖关系。所以我们还得多做一步操作,那就是增加podspec文件。
以TRUNetworking为例,cd到TRUNetworking目录下,执行

git tag 0.1.0
git push --tags

刷新一下Github上的地址,会看到多了一个分支


图片.png

这个tag分支就是将来提供给别人依赖的版本号分支,有了它,别人使用你的组件的时候就可以根据版本号来控制了。

接下来,使用trunk方式将代码发布到CocoaPods上
首先先编辑一下podspec文件


图片.png

改好后,在上传之前,最好先本地检查一下podspec是否合法

执行下面语句

pod lib lint --verbose
图片.png

如果出现passed validation,说明通过,可以提交到cocoapods上了
执行

pod trunk push TRUNetworking.podspec --verbose

成功后,就可以pod search到我们提交的库了
ps:如果搜不到,不是没传成功,是我们的本地搜索库没更新,可以先删除~/Library/Caches/CocoaPods目录下的search_index.json文件或者pod repo update一下
终端执行

rm ~/Library/Caches/CocoaPods/search_index.json

再执行

pod search
图片.png

这样,本地库就会变成远程库,我壳工程的podfile文件就可以改成
pod 'TRUNetworking',而不再需要后面的path了


图片.png

重新对壳工程LZDemo进行pod install之后,会发现,原来的TRUNetworking文件已经从Development Pods里跑到Pods里去了


图片.png

一些注意点:

1)如果pod trunk push上去的podspec文件,如果有依赖库,这个依赖库必须是在cocoapods上,即使是不能依赖本地库,而是远程库。所以说,比如刚才创建的TRUNetworking和TRULogining,如果要发布TRULogining到cocoapods,但是由于TRULogining是依赖于TRUNetworking的,所以要首先将TRUNetworking提上到cocoapods上,否则TRULogining是提不上去的。

2)由于壳工程和子工程都有独立存在的git,所以别人从壳工程的git地址clone下来的工程,是没有子工程的存在的。如果想运行起来壳工程,要么是所有的子工程都已经提到cocoapods上,要么是拿到子工程的git地址,checkout到本地壳工程的Lib库下。

3)如果你不想每简历一个子工程,都要到Github或者GitLab上创建一个repository的话,又想把子工程push到壳工程的git上的话,可以先把子工程里的git删除,这样push上的壳工程代码,就会带上子工程了,等你需要单独管理子工程的时候,再把git加回去即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,825评论 4 377
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,887评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,425评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,801评论 0 224
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,252评论 3 299
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,089评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,216评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 31,005评论 0 215
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,747评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,883评论 2 255
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,354评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,694评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,406评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,222评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,242评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,017评论 2 281

推荐阅读更多精彩内容