cocoapod(二)—— 发布库,使用库

4,048 阅读5分钟

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 + 库名

image.png

image.png

podsepec文件中可设置的配置内容如下所示:

name:组件名称
version:组件版本
summary:简介
description:描述
homepage:项目主页地址 
license:开源协议(了解一下开源协议有哪几种)
author:作者
platform:指定编译的代码被指定到了哪个平台以及该平台的最低版本
source:项目的git地址
public_header_files:公开的头文件
resource:资源文件,单个
resources: 资源文件(含bundle)
source_file:需要包含的源文件;
dependency:依赖库,不能依赖未发布的库
subspec:子库(可设置文件夹分层)

如下是本地一个pod库的podspec文件:其中能看到该库的基本信息,路径等等:

image.png

参考文章链接: 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文件,该文件内部描述了对应:

image.png 使用的时候会根据tag下的podspec文件来获取当前库的相关信息,来依赖到对应的代码;

二、发布和使用

1. 组件的发布流程(从创建到发布,详细看一下整个流程指导)

(1)、 创建本地仓库

pod lib create 库名

根据提示,按照需要进行选择处理,结束后,pod会自动帮你处理完成,创建一个新的pod库;

image.png

(2)、 关联远端仓库地址*

git remote add origin 远端仓库链接

(3)、提交代码到远端,可以在sourcetree上操作,也可以通过git命令:

git push -u origin 分支名称

报错: image.png 分支搞错了,处理一下就好;

(4)、 打tag 可以在sourcetree上操作 也可以利用git命令

git tag -a tag标记 -m "add tag tag标记"  

git push origin tag标记

image.png 

(5)、 本地lint规则验证 pod lib lint MyFirstProject.podspec --allow-warnings*

image.png

(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.”

image.png 解决:source地址错误,用了中文,在进行spec远端规则验证的时候编码格式报错;

修改后:

image.png

(7)、发布到cocospod仓库*

pod trunk push MyFirstProject.podspec --allow-warnings

报错:

image.png

需要进行邮箱注册;

解决: image.png

(8)、发布到trunk源,这是一个全球公认的pod管理仓库:

pod trunk push MyFirstProject.podspec --allow-warnings

报错:

image.png

问题:库的发布到远端,猜测网络服务器不支持的问题; 另外查了一下trunk源上的信息,发现已存在该库名;

image.png

到此发现trunk源一直发不上去;然后就发自己的私有源库去了😂😂😂😂

**ps:注意下trunk源对于同名pod库的处理,这里没有检索到具体方式,等我再爸=扒一扒看看,或者有大佬可以解答下**

(9)、 添加到索引库 ,( 也是发布的过程 相当于是自己创建的一个私有源 来管理需要的podspec配置文件

索引库:github上创建一个仓库,用来存放podspec文件;

通过命令:pod repo add privatespec git地址

将其添加到repo下;

image.png

然后通过:pod repo push privatespec MyFirstProject.podspec --allow-warnings 将该sdk的podspec push到索引库里; image.png

查看索引库:

image.png

到这里,从创建一个pod库,到发布已经完成(正常是通过pod trunk push发布到全球公认的一个大的仓库里,不过我们也可以创建自己的私有库地址,将依赖的所有pod库管理起来)。 如下图是我们索引库中的内容: image.png

image.png

2. 发布上线之后,如何使用

(1)、通过“pod search 库名”检索trunk源中是否有已上传的库

不过我们这里是将库传到了自己的私有源上,能够看到目前已经有我们上传的pod库的相关描述文件了。

(2)、在项目的podfile文件中,引入对应的库名,在工程下执行pod install

image.png

image.png 然后你如果更新了该版本,要拉取最新的pod库:

方法一:在podfile中将版本号写为最新的,这样每次有新的库更新,都要修改podfile文件

方法二:在podfile中如下去加载pod,这样pod install或者update的时候会去检索,做完依赖分析后,拉取合适的版本;

image.png

问题:pod update的时候卡住:可以通过下面的命令来解决:

pod update --verbose --no-repo-update

pod install --verbose --no-repo-update

这里看一下pod install 和pod update的时候都做了些什么,同时两者的区别是什么,我们下期见;