cocoaPods私有库的创建与使用

2021-04-23  本文已影响0人  技术进阶在路上

前言:创建私有 Spec Repo(也就是所有私有 pod 的仓库)

spec repo 是pods的一个索引,是所有公开的pods 的podspec文件的一个仓库,其实就是一个部署在服务器的Git仓库,当你使用CocoaPods 后它会被Clone到本地的~/.cocoapods/repos。这个仓库只存放podspec文件

步骤1:创建私有仓库

1、在git上创建私有仓库地址

测试私有仓库地址:http://10.20.7.105/Component-based/DSTestLib.git

2、查看本地索引是否建立 

      查看命令:  pod repo list

查看本地索引是否建立 

3、如果本地索引未建立,在终端terminal执行命令 创建本地索引

首先 进入~/.cocoapods/repos目录 查看有一个master的目录,master就是cocoapod官网的索引源,现在要做的就是创建自己私有的Spec Repo.

# pod repo add [Private Repo Name] [GitHub HTTPS clone URL]

$ pod repo add DSSpecs http://10.20.7.105/Component-based/DSSpecs.git

步骤2:创建 Pod 项目工程

1、创建 Pod 项目工程

# pod lib create [Project Name]

$ pod lib create MyLib

xxxxLib是你自己组件代码的名称

这个命令会自动生成一套组件代码工程测试代码,并且有Git管理

还会生成podspec索引文件.

会有以下提示,按照问题回答就可以 ,如果碰到创建失败的情况,更新 cocoaPods 再试试!

To get you started we need to ask a few questions, this should only take a minute.

If this is your first time we recommend running through with the guide:

https://guides.cocoapods.org/making/using-pod-lib-create.html

( hold cmd and click links to open in a browser. )

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

What is your class prefix?

> DS

最后一行私有库如果有前缀,填写前缀,例如: DS   如果没有前缀,填写: no

上面依次对应平台类型 、 语言 、 Demo 、 测试框架 、 界面测试 、 类前缀 等,填完之后Enter,会生成如下图的工程目录代码。

工程目录代码

2、添加相关代码

├── MyLib

│ ├── Assets **存放资源文件!!!**

│ └── Classes

│            └── ReplaceMe.m **注意存放你自己实现的库相关代码!!!**

├── Example

│          **就是一个样例工程相关代码文件**

3、开发模式下测试 pod 打开Example工程目录下的podfile文件:

#pod 'MyLib', :path => '../' # 指定路径

pod 'DSTestLib', :path => '../' # 指定podspec文件

然后在 Example 工程目录下执行 pod update命令安装依赖,打开项目工程,可以看到库文件都被加载到Pods子项目中了 不过它们并没有在 Pods 目录下,而是跟测试项目一样存在于 Development Pods/MyLib 中,这是因为我们是在本地测试,而没有把 podspec 文件添加到 Spec Repo 中的缘故。测试库文件没有问题,接着我们需要执行第4步

4、提交Pod到代码仓库

注意:不是podspec索引仓库,是代码仓库在终端执行命令:

$ git add .

$ git commit -s -m "初始化MyLib 库"

$ git remote add origin http://10.20.7.105/Component-based/DSTestLib.git#添加远端仓库

$ git push origin master #提交到远端仓库

步骤3:提交podspec文件到私有Spec Repo仓库

1、配置podspec文件

配置podspec文件

打开工程,查看DSTestLib.podspec文件

s.version 是pod的版本信息 这个后面打tag的时候用的到

s.summary 是简短的描述

s.source 是项目远程仓库的地址,这里不要用SSH,用HTTPS。

s.homepage 是项目主页地址 就是HTTPS地址后面去掉.git 就可以

s.source_files 是项目的文件 就是刚才替换ReplaceMe.m的那些文件

s.resource_bundles 是资源文件

s.frameworks 是用到了系统的哪些库 例如UIKit、Foundation

s.dependency 是用到哪些第三方库 比如AFNetworking 有多个就写多个s.dependency

s.public_header_files 项目的公共头文件,举个例子,当引入Masonry、YTKNetwork的时候 可以创建一个header文件,然后将#import “Masonry.h” #import “YTKNetwork.h”写入进去

 podspec更多配置请参考: 官方文档

2、编辑完MyLib.podspec文件后,需要验证一下这个MyLib.podspec文件是否可用

$ pod lib lint // 如果终端输出这个信息,就说明验证通过,否则会提示错误信息,去修改

-> DSTestLib (0.1.0)

DSTestLib passed validation.

验证一下这个MyLib.podspec文件是否可用

$ pod lib lint --verbose

$ pod lib lint --allow-warnings

$ pod lib lint --sources=https://gitee.com/yuyiios/YYSpecs.git

$ pod lib lint --use-libraries

–verbose 假如有error,查看报错信息

–allow-warnings 假如有warning,可以通过来忽略错误信息通过验证

–sources 假如这个私有库还依赖其他的私有库,一定要指定私有库的索引源(就是我上文说的YYSpecs的git地址)–sources=https://github.com/artsy/Specs,master

–use-libraries 如果用了第三方的framework或者静态库,要加上。

3、给pod 打上标签

$ git tag 0.1.0     #打上标签,这个很重要

$ git push 0.1.0#推送tag到远端仓库

到这里,成功提交到远程代码仓库,MyLib Pod 库就初步完成了代码实现,接下来就是重点了,将制作的私有库放到podspec索引仓库。

4、pod 检验 

   打完标签后,执行

 $ pod spec lint

pod lib lint和pod spec lint的区别是前者只会检验本地的pod,后者是本地和远端都会检验,所以之前用到的--allow-warning --sources --use-libraries 等命令的这里都要带上。

5、推送至索引源仓库

远端和本地都校验通过后就要将DSTestLib.podspec推送至DSSpecs仓库中 成功后去~/.cocoapods/repos/DSSpecs有个DSTestLib目录 有个0.1.0的版本

~/.cocoapods/repos/DSSpecs 有个DSTestLib目录

同时,索引库DSSpecsmaster分支会有DSTestLib的提交记录;

索引库DSSpecs  master分支会有DSTestLib的提交记录

#$ pod repo push [Repo名] [podspec 文件名字]

$ pod repo pushDSSpecsDSTestLib.podspec

$ pod repo pushDSSpecsDSTestLib.podspec--verbose --allow-warnings

可选参数同样包括上述的--source=,跟上面描述的一样,不再赘述。

这样创建私有库的工作就完成了。

最后验证一下

$ pod search DSTestLib

pod search DSTestLib

  新建一个空项目,导入私有库验证一下,这里一定要带上source就是DSTestLib所在索引源的远端地址。

导入私有库验证一下

当遇到使用依赖库创建子类的时候会在 .h 文件中引入依赖库的头文件 而这样通常会在 执行 pod repo push 的时候发生错误。这个时候在 pod repo push 命令中添加 --use-libraries 参数可解决这个问题。而如果 .h 文件对依赖库中类的引用是非必须的, 也可以将 依赖库中类的声明放到 .m 中, 以解决这个错误。

参考:

COCOAPODS官网:https://guides.cocoapods.org/making/private-cocoapods.html

COCOAPODS官方配置 podspec文档:https://guides.cocoapods.org/syntax/podspec.html

上一篇下一篇

猜你喜欢

热点阅读