iOS之组件化学习(二)---私有库

私有库

对于私有库
可以放在本地,也就是本地私有库
可以放在网络上,也就是远程私有库
当然,我们一般来说都是放在网络上,供同事使用,也就是远程私有库使用的更多一些
为了更好的学习远程私有库,我们一步一步来,学习下本地私有库

本地私有库

新建一个项目,然后在里面随便写一个分类,你会发现,项目中是可以引用该分类的。
现在,创建一个私有文件夹,将分类剪切到私有文件夹里面去,你会发现,项目运行不起来了(废话)

我们现在要做的就是:
如何让项目引用私有文件夹里面的分类,使得项目运行起来

首先,项目要使用git管理

包含的命令大致有:

cd 项目文件夹路径
git init
git add .
git commit -m 'init'
然后,将Base文件夹做成pod本地库

具体命令:

cd 项目文件夹路径
git init
git add .
git commit -m 'init'
pod spec create FMBase(创建的库的名字)

然后修改.spec文件,大致与上面的都一致,略有不同的是:
spec.homepage因为没有,所以不需要改
spec.license = "MIT"
source没有,设为空
spec.source = { :git => "", :tag => "#{spec.version}" }
至此,对于.spec的文件修改就完毕了

最后,回到项目中,项目使用CocoaPods管理

pod init
修改Podfile文件,使得Podfile可以引用到本地私有库

pod '某A库'会去官网URL中检索A库是否存在
而官网地址,也就是索引库地址可以通过pod repo命令,查看podd的索引源(就是第三方库检索地址)
运行结果类似于:

trunk
- Type: CDN
- URL:  https://cdn.cocoapods.org/
- Path: /Users/admin/.cocoapods/repos/trunk

假如我们pod '某B私有库',显然,在官网URL是找不到该B私有库的
因此,我们使用:
pod '某B私有库', : path => '私有库地址'指明私有库的地址

结合到本例子:
pod 'FMBase', :path => '../localLib/FMBase'
然后pod install

pod install
Analyzing dependencies
Downloading dependencies
Installing FMBase (0.0.1)
Generating Pods project
Integrating client project

在这里插入图片描述
引入本地私有库成功!

存在的问题

有个问题,这样是可以引用本地私有库,但组件化的目的之一是可以单独测试,那之前建立的本地私有库,是无法进行单独测试的。
因此,我们要做的是:
将本地私有库做成单独的工程,满足测试独立
方法一:直接在私有库文件夹同级目录下创建一个Example项目工程,然后将category组件引用过来。需要注意的是,不要勾选Copy items if needed
然后,就可以在Example项目工程中测试、修改category组件了

方法二:也是同级目录下创建一个Example项目工程,只是将Example使用CocoaPods管理,然后使用CocoaPods引入category组件。
其实这种方法,跟引入到主项目里面的操作是一样的

方法三:创建pod模板库
pod lib create 名字创建pod库模板库功能

遇到的问题:
pod lib create XMGFMBase可以
pod lib create FMBase不可以(我的工程Lib就是FMBase)
解决办法:
删除有的文件夹,重写创建

然后,终端里面会让输入:

Which testing frameworks will you use? [ Specta / Kiwi / None ]
> None

Would you like to do view based testing? [ Yes / No ]
> No

What is your class prefix?//前缀
> YZ

你会发现,多了一个文件工程

该Podfile里面的内容
在这里插入图片描述跟我们手动建立Example工程是一样的

此时,Example里面的Pods里面的FMBase里面的ReplaceMe就是工程外面的ReplaceMe
在这里插入图片描述在这里插入图片描述
我们将ReplaceMe删除,然后将category组件化的文件夹放入Classes里面
然后cd到Example,之后只需要pod install即可

在这里插入图片描述

遇到的问题:
我明明把文件夹category拷贝过去了,而且从项目中查看文件夹路径也有category文件夹,但是项目中却不显示,如上图所示


远程私有库

大致步骤:
在这里插入图片描述
首先,我们一般下载的都是Git的官方库,如果需要下载私有库的东西,需要指定私有库地址

如何添加远程私有索引库?

pod repo可以看到当前的索引库源
使用pod repo --help可以查看帮助命令
其中
+ add Add a spec repo
也就是,pod repo add 起个名称 私有库地址可以添加一个索引库

  • 在gitHub上创建一个私有项目,得到地址

  • 添加私有索引库地址:
    pod repo add YZFMBase https://github.com/../YZFMSpecs.git

  • 使用pod repo可以看到,新的私有索引库已经添加完毕

trunk
- Type: CDN
- URL:  https://cdn.cocoapods.org/
- Path: /Users/admin/.cocoapods/repos/trunk

YZFMBase
- Type: git (main)
- URL:  https://github.com/../YZFMSpecs.git
- Path: /Users/admin/.cocoapods/repos/YZFMBase

也可以去本地索引文件里面查看
/Users/admin/.cocoapods/repos/YZFMBase

接下来要做的:
将 组件化代码 上传到 远程私有库
将.spec描述文件提交到

  • 创建一个远程私有库,用来存放本地写的项目代码(这些就是组件化代码,可能就是一个基础组件,本例子就是一个简单的分类)
  • 创建一个模板库(模板库的目的是可以组件化的独立测试)
    pod lib create FMBase

这次成功了

  • 将ReplaceMe.m文件使用category文件夹替换掉

  • 本地项目的Example执行pod install进行安装,现在项目中已经出现了分类

  • 修改.spec文件
    主要是s.homepage与s.source的修改
    在.spec文件夹目录下,可以通过命令pod lib lint验证.spec文件里面内容有无错误
    pod lib lint 是本地验证
    pod spec lint是远程验证

  • 本地代码上传到私有库(本地库与远程库关联起来)

git add .
git commit -m '添加写好的组件'
git remote//查看是否关联了远程地址
git remote add origin https://github.com/../YZFMBase.git
git remote//查看是否关联了远程地址
git push origin master

在这里插入图片描述

好神奇,别人也可以直接使用CocoaPods安装我写的库了

  • 打标签
git tag '0.1.0'(该版本号需要与.spec版本号保持一致)
git push --tags
  • 将.spec文件提交到远程私有索引库中
    这样别人就可以通过查找私有库里面的.spec找到你的项目代码下载地址
    pod repo push YZFMBase FMBase.podspec
    YZFMBase远程要提交的私有库名字
    FMBase.podspec本地的.spec文件
问:为什么是YZFMBase文件夹名字,而不是一个私有索引库地址?

这是因为,.spec文件push到本地的YZFMBase文件夹,会自动找到并更新远程的私有索引库地址里面的.spec文件

在这里插入图片描述

遇到的问题:
使用pod repo push YZFMBase FMBase.podspec 命令报错:
[!] The FMBase.podspec specification does not validate.

使用pod repo push YZFMBase FMBase.podspec --allow-warnings命令成功

现在,直接在终端检索自己写的库:
pod search FMBase

在这里插入图片描述


使用

原理引用本地私有库需要这样写:
: path => '私有库地址'

现在不需要了,直接添加source即可:
source 'https://github.com/../YZFMSpecs.git'私有库
source 'https://cdn.cocoapods.org/'官方库

执行pod install
在这里插入图片描述

大致流程如下图所示:
在这里插入图片描述

流程不清楚的可以回顾第14-远程私有库升级的前10分钟


讲完了本地私有库和远程私有库的配置
假如你修改了库,然后想升级下库,这时该怎么办呢?
接下来我们一起来学习:

远程私有库的升级维护
  • 在本地项目中进行你的修改,然后pod install可以看到添加的文件

神奇的是,之前category文件夹没有,现在居然又有了,简直了

因为对原项目进行了修改,等于是升级了,需要修改.spec的版本号

  • 修改.spec的版本号
  • 提交修改
git add .
git commit -m '修改'
git push origin master
  • 打标签 并 上传
git tag '0.2.0'
git push --tags

现在代码库里面的.spec已经是最新的了,但是检索库里面的.spec不是最新的,需要把最新的.spec更新到检索库里面的.spec

  • 更新检索库的.spec
    pod repo push YZFMBase FMBase.podspec --allow-warnings

然后,回到主项目,更新pod update --no-repo-update即可
pod update --no-repo-update:不需要更新repo库

在这里插入图片描述

SDK更新成功


第三方库的正确使用

对于第三方框架,可以直接使用,但最好做一层封装
比如AFNetworking或者SDWebImage,都可以再做一层封装,在使用的时候,使用自己写的封装,而不是直接使用第三方框架里面的api
这样虽然麻烦一点,但是后期换框架或者升级框架的时候就简单很多

就比如之前的SDWebImage,后期加了前缀sd_…,如果之前是对其封装过一层,改起来很快,如果没有封装过,那就得代码里一个一个改了。


组件库里面依赖其他第三方库怎么办?

比如,我在组件代码里面依赖了一个AFNetworking和SDWebImage,这时该如何操作?

在.spec文件中,里面有这个s.dependency 'AFNetworking', '~> 2.3'
也就是当前库s依赖其他库AFNetworking

如此,在私有检索库里面,找到.spec文件,检测到里面依赖其他库,则会自动将其也下载下来

虽然在Podfile文件里面没有写相应的库
在这里插入图片描述
但,因为有依赖,在pod install后,里面仍有两个库
在这里插入图片描述

然后按照上面的流程即可操作成:

在这里插入图片描述


优化

有个问题,比如在组件中我写了10个库,我在项目A中只需要前两个库,而项目B中只需要最后两个库,那,我在项目A中使用的时候,按照上面的做法,会把组件里面写的10个库都下载下来,这是没必要的,我们仅需要前2个即可。

如何做到需要哪一个下载哪一个呢?

我们在使用命令pod search AFNetworking时,会看到:
在这里插入图片描述Subspecs:子库
如果你只想使用AFN里面的某一个功能,只需要引入对应的子库即可,没有必要把整个AFN库引入到项目里面。
在使用的时候
pod 'AFNetworking/Reachability'即可
这就是我们想要的

因此,我们也要将组件里面的库,做划分,分为不同的subspeces子库

对.spec做修改,添加subspec:

//里面的总路径不需要了,注掉
#s.source_files = 'FMBase/Classes/**/*'

  //起个名字category
  //起个别名c
  //c.source_files必须写对
  s.subspec 'category' do |c|
    c.source_files = 'FMBase/Classes/category/**/*'
  end
  
  s.subspec 'UIFont' do |f|
    f.source_files = 'FMBase/Classes/UIFont/**/*'
  end

另外,子库里面谁依赖其他库,把依赖写在子库里面

不要忘记修改版本号

如此,
如果你想按照全部,还是pod 'FMBase'
如果你想按照某一个,则只需要按照某一个即可pod 'FMBase/category'

pod 'FMBase/category'
pod 'FMBase/UIFont'
这种写法与下面这种写法等价
pod 'FMBase', :subspecs => ['category', 'UIFont']

学习完基础组的相关制作、更新操作
我们来学习下功能组件的制造

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值