iOS-Developer-OCiOS基础·OC高级篇OC基础原理

iOS组件化实现

2019-01-17  本文已影响680人  Gui晨曦遇晓

组件化简介

想要做组件化的前提当然得知道什么是组件化。顾名思义,组件化就是将APP拆分成各个组件(或者说模块也行),同时解除这些模块之间的耦合,然后通过主工程将项目所需要的组件组合起来。这样组件化过后的项目就变成了很多小模块,如果新项目中有类似的需求,直接将模块引入稍作修改就能使用了。
这种设计是不是很像引入三方库做快速开发?其实制作组件的过程就相当于做二方库。因此常见的组件化方案大多都是使用cocoapods做依赖管理。

优点:
缺点:
组件化拆分:
具体关于组件化方面的解释请参考链接以下

利用cocoapods创建基于git的私有库Spec Repo,我这里以创建PSGTools为例

首先说一下本地私有库的实现

打开终端,cd到需要存放的目录下,pod lib create PSGTools,出现Cloning https://github.com/CocoaPods/pod-template.git into PSGTools.,然后等待几分钟,依次回答以下问题。

What is your name? 
>这里输入名字,可以随便输
What is your email?
>这里最好是输入你gitee.com注册的邮箱
What platform do you want to use?? [ iOS / macOS ]
>iOS
What language do you want to use?? [ Swift / ObjC ]
>ObjC
Would you like to include a demo application with your library? [ Yes / No ]
>Yes
Which testing frameworks will you use? [ Specta / Kiwi / None ]
>None
Would you like to do view based testing? [ Yes / No ]
>No
输入完成之后就会自动创建这么一个工程。 PSGTools 然后将需要的文件放入PSGTools/PSGTools/Classes/目录下(具体的组件化分类我就不谈了,请看上面大佬们的链接吧),这里我就随便拖几个文件进行演示了,并删除ReplaceMe.m文件。 87FFDE76-60BC-4A92-925E-D0594A39F678.png 接着进入终端cd到Example目录下执行pod install,就能看到放入在Classes目录下的文件已经可以在pods下看到了,例如: 3DDB17D8-810C-457F-8E79-2972C9B73646.png

编译PSGTools工程,如果导入的文件还依赖于第三方库,在podfile文件中添加需要的三方库并pod install即可,工程编译通过就OK了。

然后在主项目中的podfile文件中添加

pod 'PSGTools', :path => 'PSGTools所在的目录'
终端执行pod install,就能看到主项目中多了以下依赖 7A7D95AE-E9B4-4132-8695-D41E68A7C26D.png

如果主项目中有重复的文件,需要删除主项目中的重复文件,然后编译运行通过就可以了,这样本地的就已经弄好了。

本地私有库和远端的连接(我这里使用的是码云的远端库管理)
  1. 选择新建仓库,仓库名称要与本地私有库一直,我这里是PSGTools,然后选择勾选私有,下面有勾选使用什么进行初始化,一个都不要勾选,点击创建,然后就可以看到以下命令行教程,我们选择已有仓库的命令行进行操作。 B181F2DE-0555-47FB-8A28-AC56DBB3A96E.png 1B68283B-FFA1-4567-8DAC-6F8AE53752A1.png
  2. 依照已有仓库命令行进行操作,打开终端,cd到私有库的目录下
cd xxxxx/PSGTools

输入

git remote add origin https://gitee.com/xxxx/xxx.git

再输入

git push -u origin master
  1. 刷新码云界面就可以看到已经上传上去了,但是这还没完,我们看到码云上面的PSGTools/Classes/目录下还是只有ReplaceMe.m文件,说明在终端并没有提交我们修改过的内容,继续回到终端执行以下命令
git add .
git commit -m '这里输入你要的提示的内容,例如:初始化'
git push origin master

这样我们就能在码云的Classes/目录下看到我们需要的内容了。

  1. 打开PSGTools.podspec文件,然后修改以下相对应的内容 FE09C588-06D9-4A67-8205-2969B0F94F63.png
  2. 然后进入终端在PSGTools目录下对框架打tag标签,要对应.podspec里面的s.version

cd xxxxx/PSGTools
git tag 0.1.0
git push --tags
  1. 以上所有事情都做完了以后,剩下的就是将私有库的.podspec文件上传到本地Spec Repo。

这里要说一下Spec Repo

93D2A620-DD93-4334-AA61-CCA587CCCC08.png

看到上面文件夹显示,repos目录下默认只有master文件夹的,在终端中输入命令"pod repo"可以看到对应的master。

  1. 私有库管理仓库创建好了之后就可以将私有库的.podspec文件上传到私有库管理仓库了
    1. 先验证.podspec文件是否可用,如果有任何WARNING或者ERROR都是不可以的,它就不能被添加到Spec Repo中,不过xcode的WARNING是可以存在的,验证需要执行一下命令
    pod lib lint
    避免警告pod lib lint --allow-warnings
    
    1. 再验证远程仓库,验证需要执行一下命令
    pod spec lint --allow-warnings
    
    1. 最后提交.podspec文件到仓库
    pod repo push PSGSpec PSGTools.podspec --allow-warnings
    

这样私有库的创建和配置就已经完成了,到主项目中的podfile文件中将

pod 'PSGTools', :path => '../iOS组件/PSGTools'

修改成

pod 'PSGTools', '~> 0.1.0'

然后在终端cd到工程目录下进行"pod install"

说明是没有找到对应的库,因为默认是去GitHub上面去找的,但是我们现在这里的库是放在码云gitee上面的,如果需要让他去码云gitee上面去搜索我们的私有库,就需要在podfile文件内容最上面配置资源库地址。 C8B8B6E0-DD38-488B-8A0A-4B009D50C287.png

打开终端执行pod repo,就可以看到我们的私有库管理库Spec Repo,master是cocoapods默认的,其他的就是我们自己创建的私有库,这里我的私有库资源库的地址是

https://gitee.com/G_Q/PSGSpec.git

在podfile文件中添加以下内容

source 'https://gitee.com/xxxx/xxxx.git'
source 'https://github.com/CocoaPods/Specs.git'
例如我这里是这样子的 8684A146-2F12-4233-A1B5-162C0D88A6B3.png

这里为什么写上了自己的私有库地址之后还得加上cocoapods原有的库地址呢?因为如果加上了自己的资源地址之后,就只会在你添加的资源地址里面去寻找资源,但是我们项目开发中除了使用自己的私有库之外,经常还要使用到GitHub上面的公开库资源,所以要配上Github公开库资源地址。另外,如果我们有需要其他小伙伴的私有库资源,就需要再加上其他小伙伴们的资源地址。

加上了资源库地址我们就已经完成了,可以进行组件化的划分了,具体是按照什么来划分组件化的,可以查看最上面的那几个链接,看看大牛们是如何阐述组件化的。

上一篇下一篇

猜你喜欢

热点阅读