iOS组建化—私有库

私有库顾名思义是私有的,我在GitHub上使用的都是公开库,出于安全与机密考虑,公司级开发都是使用私有库。下面先说几个概念。

一、索引库

我们每创建一个组件都会带有一个 xxx.podspec 的索引文件,这个文件包含组建框架的描述信息、框架名称、版本号、真正的代码存放地址及框架源码远程地址。那么专门用来存放这些索引文件的库就叫做索引库。索引库有本地索引库远程索引库之分。远程索引库就是放在远端,比如GitHub上。我们在终端上使用pod repo可以查看索引库的情况。如图,我们当前只拥有一个索引库,URL对应的是远端的地址,path是本地索引库的地址。我们本地的索引库实际上是通过pod setup命令下载下来的,我们通过pod search搜索私有库都是在本地的索引库进行搜索,所以本地索引库长时间没有更新会造成一些新的框架我们检索不到。使用pod repo update或pod setup更新即可。(点击查看spec的相关介绍

iOS组建化—私有库_第1张图片

1.下面分别在远端与本地找到相应的索引库。

远端:

iOS组建化—私有库_第2张图片

本地的索引隐藏起来了,我们终端输入命令显示隐藏文件夹

defaults write com.apple.finder AppleShowAllFiles -boolean true ; killall Finder

iOS组建化—私有库_第3张图片

2.在腾讯云上建立一个远程私有索引库。

3.这里我们再创建个私有索引库,通过pod repo add <本地索引库的名字> <远程索引库的地址> ,创建本地索引库并和远程索引库做关联,这里其实就是一个clone操作,执行完毕后,cocoapods 会把 spec文件 clone 在 ~/.cocoapods/repos 目录。(注:本地索引库的名字建议和远程索引库起的名字一样)。我们做关联后本地是没有spec文件的,这个需要后面执行pod repo push后才有。此时我们再打印发现有两个索引库了。

iOS组建化—私有库_第4张图片

二、手动创建本地私有库(了解即可)

我们写好的组件框架放在本地,通过pod的方式找到我们组件 (这里我们是手动创建的demo与spec文件,比较麻烦。后面会重点介绍直接用模版库实现,所以这里大家了解下就行)

iOS组建化—私有库_第5张图片

修改podfile文件与spec文件,注意相关地址的配置,最后使用pod install即可安装,pod install后实际上是引用本地的类库,最终并没有存在于我们的工程文件夹中。

iOS组建化—私有库_第6张图片

iOS组建化—私有库_第7张图片

三、远程私有库与本地私有模版库(重点介绍部分)

为了多人协作开发我们的私有库最终肯定要放在远程的。远程私有库建立过程就是把本地代码仓库放到远程仓库,我们这里提交的仓库里有我们demo和我们的组件框架,最终通过pod install加载组件框架到我们的实际开发项目中(具体加载过程是通过spec中source_file里的路径来寻找我们的组件的)。

1.远程代码仓库的建立

这里使用的是腾讯云托管的,因为它可以免费建立私有的仓库(以前叫码市)

2.本地代码仓库的建立

1).在终端输入命令:pod lib create <组件名>  创建本地代码组件模版库,组建名可以和远程代码库一致也可以自己随便写。

iOS组建化—私有库_第8张图片

2).然后在Xcode彻底删除ReplaceMe.m文件,接着把自己封装好的组件化代码的文件夹拖入到组件文件夹的classes路径下。 

3).接着cd到Example下进行pod install (把刚才拖入到classes里的文件夹pod进来,这里会通过podfile里面默认的设置:path => '../',自动把classes里的文件pod过去) 

4).编译组件看是否报错,编译通过后需要修改podspecs索引文件,一般需要修改下面几个问题。

a. 修改版本号

b. 修改项目的简单概述和详细描述

c. 修改homepage和source地址

d. 添加依赖库

5). 编译运行通过后,提交组件到远程代码库并打tag.我们打的tag就相当于提交了一个版本。tag下的代码是当前分支下同步过去的,我们不能提交代码到tag下,所以每次更新版本必须打tag,不然我们pod索引到的不是你更新后的组件代码。

git add .
git commit -m “xxx”
git remote add origin 远程代码仓库地址
git push origin master 或者 git push -u origin master(一般第一次提交用)
git tag 版本号/git tag -a 版本号 -m “version 版本号”(注:这里的版本号必须和podspec里写的版本号一致)
git tag 查看版本号是否提交成功
git push - -tags

6).通过pod spec lint 命令验证podspec索引文件(注:pod lib lint是检索本地索引文件,pod spec lint 是本地和远程库同时检索) ,我在验证时很多次失败是因为tag和source_file的问题引起的,所以这两个一定要主要规范。这个验证过程会遇到一系列的报错,如果遇到有关静态库,frameWork等的报错,可以添加上 --use-libraries,如果因为警告不能验证痛过,添加 --allow-warnings。显示详细信息在前面添加 --verbose。(例pod spec lint --use-libraries  --allow-warnings --verbose)

(对于不支持模拟器的库验证与上传时可能会遇到下面的问题,解决方案:https://www.jianshu.com/p/88180b4d2ab7/)

iOS组建化—私有库_第9张图片

7).验证通过后,pod repo push <本地索引库> <索引文件名>  提交索引文件到远程索引库 (注:后缀与lint后的保持一致)。这个操作的实际过程是这样,首先执行命令之前我们的本地是没有那个索引库文件的,push之后会先出现在本地的索引库中,然后通过之前pod repo add关联的远程地址再推到远程索引库中,这里跟pod setup的过程刚好相反(例pod repo push FMSpecs FMBase.podspec --use-libraries  --allow-warnings --verbose)。

iOS组建化—私有库_第10张图片

iOS组建化—私有库_第11张图片

如果push后遇到如下错误:(此时解决办法:pod repo add XZSpec https://git.dev.tencent.com/sacrifice123/XZSpec.git)

8). 接下来回到demo工程修改podfile文件,把FMBase组件pod进来(注:需要在Podfile中指定组件远程索引库地址,如果不指定默认会从master的索引库查找就会报找不到组件)

source 'https://git.dev.tencent.com/sacrifice123/FMSpecs.git'
source 'https://github.com/CocoaPods/Specs.git'

然后执行pod install ,项目运行成功即大功告成。

四、远程私有库升级与优化

1.更新升级

当我们修改或增加了组件框架以及依赖库,对我们来说就是一次更新升级,此时过程比较简单,我们需修改spec文件的version(版本加1即可)然后和修改的文件一起提交(注意在总文件夹里做提交,不要在Example和本地库文件里提交)。提交成功后我们要打tag,tag和spec的version对应即可,然后继续验证一下,最后执行 pod repo push XXX更新本地与推到远程即可。

2.分割出子库

当我们一个组件库里有很多子模块时,我们可以尝试分割出几个子库,分割完之后需重新打tag并上传。具体写法如下:

(这里有几个我遇到的坑,别名我用了大写,验证报错,改成小写就行了。还有就是end结尾我没换行,也验证不通过。另外注意依赖的添加,一个子库可以单独单独依赖另一个子库,但是子库之间不能循环依赖,不然会报circular dependency这个错误)

  s.subspec 'Base' do |b|
      b.source_files = 'FMBase/Classes/Base/**/*'
  end

  s.subspec 'Category' do |c|
      c.source_files = 'FMBase/Classes/Category/**/*'
  end

  s.subspec 'Network' do |n|
      n.source_files = 'FMBase/Classes/Network/**/*'
      n.dependency 'AFNetworking'
  end

  s.subspec 'Tool' do |t|
      t.source_files = 'FMBase/Classes/Tool/**/*'
  end

 

另附,cocoapods简单总结:https://www.jianshu.com/p/71cb54b02355

                                                  http://www.cocoachina.com/ios/20180727/24338.html

                                                 https://blog.csdn.net/weixin_34240520/article/details/91186353(pod缓存)

                           组件的划分:https://www.jianshu.com/p/88b4168e1ce4

你可能感兴趣的:(iOS开发)