ps:背景大图源于网络
在了解了cocoapods的简单使用后,接下来看看,如果利用cocoapods管理依赖库,在发布和使用的时候都做了什么事情: 在(一)中进行了pod install
一、关于popdspec文件
1. popdspec是什么;
podspec配置文件的内容简述:podspec 是用于 描述一个 Pod 库的源代码和资源将如何被打包编译成链接库或 framework 的文件 ,而 Podspec 中的这些描述内容最终将映会映射到 Specification 类中(以下简称 Spec)
podspec描述了一个pod库的基本信息,库名,版本,获取的source地址,及其依赖的其他子库;
文件源所在git地址,源文件所在git地址的文件路径,源文件对应的tag值
2. 创建一个podsepec;
创建一个pod库,自动生成podspec文件:
pod lib create + 库名
podsepec文件中可设置的配置内容如下所示:
name:组件名称
version:组件版本
summary:简介
description:描述
homepage:项目主页地址
license:开源协议(了解一下开源协议有哪几种)
author:作者
platform:指定编译的代码被指定到了哪个平台以及该平台的最低版本
source:项目的git地址
public_header_files:公开的头文件
resource:资源文件,单个
resources: 资源文件(含bundle)
source_file:需要包含的源文件;
dependency:依赖库,不能依赖未发布的库
subspec:子库(可设置文件夹分层)
如下是本地一个pod库的podspec文件:其中能看到该库的基本信息,路径等等:
参考文章链接: zhuanlan.zhihu.com/p/265338343
3. pod发布都有哪些流程
打tag;
本地验证lint规则;(可选)
远端验证lint规则;(可选)
向索引库提交索引文件;
(1)私有库:pod repo push [索引库名][要提交的索引文件.podspec].
(2)公有库:
pod trunk register 邮箱:会收到一封验证邮件,点击后提示回到控制台
pod trunk push;
另外,在管理的时候通常会有一个索引库来存放工程依赖的所有库的信息,包括历史tag,每一个打过历史tag的podspec文件,该文件内部描述了对应:
使用的时候会根据tag下的podspec文件来获取当前库的相关信息,来依赖到对应的代码;
二、发布和使用
1. 组件的发布流程(从创建到发布,详细看一下整个流程指导)
(1)、 创建本地仓库
pod lib create 库名
根据提示,按照需要进行选择处理,结束后,pod会自动帮你处理完成,创建一个新的pod库;
(2)、 关联远端仓库地址*
git remote add origin 远端仓库链接
(3)、提交代码到远端,可以在sourcetree上操作,也可以通过git命令:
git push -u origin 分支名称
报错:
分支搞错了,处理一下就好;
(4)、 打tag , 可以在sourcetree上操作 , 也可以利用git命令
git tag -a tag标记 -m "add tag tag标记"
git push origin tag标记
(5)、 本地lint规则验证 : pod lib lint MyFirstProject.podspec --allow-warnings*
(6)、 远端lint规则验证 : pod spec lint MyFirstProject.podspec --allow-warnings*
报错: “- ERROR | [iOS] unknown: Encountered an unknown error (incompatible character encodings: UTF-8 and ASCII-8BIT) during validation.”
解决:source地址错误,用了中文,在进行spec远端规则验证的时候编码格式报错;
修改后:
(7)、发布到cocospod仓库*
pod trunk push MyFirstProject.podspec --allow-warnings
报错:
需要进行邮箱注册;
解决:
(8)、发布到trunk源,这是一个全球公认的pod管理仓库:
pod trunk push MyFirstProject.podspec --allow-warnings
报错:
问题:库的发布到远端,猜测网络服务器不支持的问题; 另外查了一下trunk源上的信息,发现已存在该库名;
到此发现trunk源一直发不上去;然后就发自己的私有源库去了😂😂😂😂
**ps:注意下trunk源对于同名pod库的处理,这里没有检索到具体方式,等我再爸=扒一扒看看,或者有大佬可以解答下**
(9)、 添加到索引库 ,( 也是发布的过程 , 相当于是自己创建的一个私有源 , 来管理需要的podspec配置文件 )
索引库:github上创建一个仓库,用来存放podspec文件;
通过命令:pod repo add privatespec git地址
将其添加到repo下;
然后通过:pod repo push privatespec MyFirstProject.podspec --allow-warnings
将该sdk的podspec push到索引库里;
查看索引库:
到这里,从创建一个pod库,到发布已经完成(正常是通过pod trunk push发布到全球公认的一个大的仓库里,不过我们也可以创建自己的私有库地址,将依赖的所有pod库管理起来)。
如下图是我们索引库中的内容:
2. 发布上线之后,如何使用
(1)、通过“pod search 库名”检索trunk源中是否有已上传的库
不过我们这里是将库传到了自己的私有源上,能够看到目前已经有我们上传的pod库的相关描述文件了。
(2)、在项目的podfile文件中,引入对应的库名,在工程下执行pod install
然后你如果更新了该版本,要拉取最新的pod库:
方法一:在podfile中将版本号写为最新的,这样每次有新的库更新,都要修改podfile文件
方法二:在podfile中如下去加载pod,这样pod install或者update的时候会去检索,做完依赖分析后,拉取合适的版本;
问题:pod update的时候卡住:可以通过下面的命令来解决:
pod update --verbose --no-repo-update
pod install --verbose --no-repo-update
这里看一下pod install 和pod update的时候都做了些什么,同时两者的区别是什么,我们下期见;