欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CocoaPods制作第三方库,管理自己的私有库以及发布官方库(模块化与组件化)

程序员文章站 2022-04-26 22:11:18
...

CocoaPods在这里就不多做介绍了,相信大家都对此都使用过,也知道其对我们的好处。CocoaPods可以使我们项目管理第三方更容易,平时第三方库都是pod install下来的,再也不用之前的手动拖进工程了。那么我们今天就来说下我们自己怎么制作第三方并发布到CocoaPods官方;还有项目组件化,把自己的模块封装成库并发布到私有的git上。

这里的内容是为了记录自己学习的经历,内容也是结合前人经验和自己实践写的,请多多宽容。

一 . Cocoapods环境安装

首先我们需要安装CocoaPods环境,CocoaPods环境安装,没安装的同学可以跟着安装下。最好安装最新的环境,否则执行下边步骤可能会出现错误。

二 . 制作本地库

打开终端,cd到你想建立文件的目录,通过pod指令建库:(NNUBase是lib的名称)

pod lib create YYBase

紧接着你会看见一串指令,显示将从Cocoapos下载模板:

Cloning `https://github.com/CocoaPods/pod-template.git` into `YYBase`.

模板下载下来后,会有几个问题需要你回答:

CocoaPods制作第三方库,管理自己的私有库以及发布官方库(模块化与组件化)

分别是:(1)你想在什么平台上运行:iOS

(2)选择什么语言:ObjC(emmm重复了一次是因为我输错一个字母,请忽略)

(3)你的库需要包括一个测试的demo应用吗?Yes

(4)将使用什么类型的测试框架:None(因为不知道其他几种类型所以用none)

(5)你想创建基于视图的测试吗:No

(6)类别的前缀:YY(这个可以自己定义)

6个问题提交完毕后会自动running install。

Running pod install on your new library.

Analyzing dependencies
Downloading dependencies
Installing YYBase (0.1.0)
Generating Pods project
Integrating client project

[!] Please close any current Xcode sessions and use `NNUBase.xcworkspace` for this project from now on.
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.

 Ace! you're ready to go!
 We will start you off by opening your project in Xcode
  open 'YYBase/Example/NNUBase.xcworkspace'

并且在install结束后自动打开lib工程文件,我的这里是叫YYBase.xcworkspace。一个空的本地库的文件结构如下:

 

其中ReplaceMe.m文件的位置是你需要将你要封装的代码放入的位置。这里我就随便放入一个模块的文件。

CocoaPods制作第三方库,管理自己的私有库以及发布官方库(模块化与组件化)

*注意点:

1、我们自己的代码不管是新添加文件、还是现有代码有改动,都需要需要在cd到Example下执行pod install后,才能导入头文件import NNUBase,代码才会更新。

2.我们自己的代码文件最多一层文件结构即Classes下一级的文件夹内只能放代码,不能再创建子文件夹。

3.每个类文件如果想暴露出去,则需要在类名前添加修饰符即(public class xxx或者open extension xxx),添加public、open,而extension不能用open修饰所以用plublic修饰。

4.如果已经暴露的类,想暴露里边的函数方法,则也需要在方法 func 前加public,否则外部调用会找不到方法名。

到这里本地库我们已经制作好了,如果把我们本地当做git库的话,这时候我们只需要在你其他的项目或者工程的Podfile文件里添加如下:
YYTest:是项目名称
YYBase:本地私有库
path:是指定本地库所在的位置

target 'YYTest' do
  pod 'YYBase', :path => '/Users/nnu-scens/Desktop/Text/YYBase'
end

二 . 本地库提交到远程库

首先我们先了解下Specs和Specs Repo、Code和Code Repo。

Specs:使用CocoaPods的指令创建好本地库之后,默认生成一个podspec文件。它描述该库某一个版本的信息,比如库的名字、版本号、描述、依赖库等等。

Specs Repo:就是存放spec文件的git库,它包含了所有可用的第三方库。每个库都会有独立的文件夹,每个版本以独立的子文件夹保存。文件夹中只有一个描述文件,也就是Spec文件。

Code:就是我们自己库的源代码。
Code Repo:就是Git库存放源代码的地方。

重点:!Code Repo和Spec Repo不能一概而论,所以就不能把那个Repo放到一个git库中,需要将他们分开存放。

cd到你的源代码目录下,提交源代码到git:

git remote add origin https://github.com/Yyue98/YYBase
git add .
git commit -a -m "0.1.0"
git push origin master
git tag 0.1.0
git push origin 0.1.0

CocoaPods制作第三方库,管理自己的私有库以及发布官方库(模块化与组件化)

要将本地库配置到远程库中,需要将spec文件调试通,不能有error和warning。

修改好spec文件后需要使用命令测试一下(测试前确保在github中新建了一个同名的repository):

CocoaPods制作第三方库,管理自己的私有库以及发布官方库(模块化与组件化)

pod lib lint

库如果没有通过验证,就说明Spec配置有问题,在Spec出现warnings是不行的,我们可以根据警告进行修改,也可以我们执行pod lib lint --allow-warnings

pod lib lint --allow-warnings

当你的pod lib lint通过则说明本地库文件验证无误可以部署了。这时候就可以把代码push到远程库。注意可能报错的有的是路径问题,有的是你添加的源码必须能调试通过。

CocoaPods制作第三方库,管理自己的私有库以及发布官方库(模块化与组件化)

此时本地的lib调试通过的了就可以添加到远程的spec库中。在添加前同样需要在github中创建一个repo。地址为:https://github.com/Yyue98/YYDemoSpecs.git

pod repo add YYDemoSpecs https://github.com/Yyue98/YYDemoSpecs.git

repo添加成功后你可以在 ~/.cocopods/repos/ 目录下找到和你建立的spec repo同名的文件夹。然后你就需要cd到你存放需要添加的spec文件的目录下将它push到远程端仓库中。

pod repo push YYDemoSpecs YYBase.podspec

和lib lint一样在push之前会先检查lib的有效性,只有通过检查才能够push到远程库中。

CocoaPods制作第三方库,管理自己的私有库以及发布官方库(模块化与组件化)

三 . 发布到Cocoapods官方库中

首先先用cd到Spec文件所在的目录,然后执行pod lib lint。和发布远程库一样,必须在lib lint没有错误的前提下才能发布。

提交之前,你需要注册pod账号。实质上是将"邮箱--名称--电脑"绑定在一起,所以这里不需要密码。

pod trunk register EMAIL [NAME]

以下是该指令的帮助文档,大概意思是:
如果第一次注册,邮箱和名称都是必须的。如果已经注册过,可以省略名称(除非你想修改名称)。推荐填写描述信息,以及给出了一些Examples,按着Example做就可以了。

pod trunk register EMAIL [NAME]

      Register a new account, or create a new session.

      If this is your first registration, both an `EMAIL` address and your
      `NAME` are required. If you’ve already registered with trunk, you may omit
      the `NAME` (unless you would like to change it).

      It is recommended that you provide a description of the session, so that
      it will be easier to identify later on. For instance, when you would like
      to clean-up your sessions. A common example is to specify the location
      where the machine, that you are using the session for, is physically
      located.

      Examples:

          $ pod trunk register aaa@qq.com 'Eloy Durán' --description='Personal Laptop'
          $ pod trunk register aaa@qq.com --description='Work Laptop'
          $ pod trunk register aaa@qq.com

结果
[!] Please verify the session by clicking the link in the verification email that has been sent to [email protected]
去邮箱认证即可。
注册账号之后,我们可以尝试将Spec提交到Specs Repo:
执行命令:

pod trunk push YYBase.podspec --allow-warnings

CocoaPods制作第三方库,管理自己的私有库以及发布官方库(模块化与组件化)

但我这里的问题是发布成功了,但是使用pod search YYBase却找不到自己发布的库。

CocoaPods制作第三方库,管理自己的私有库以及发布官方库(模块化与组件化)

四 . 验证私有库

新建工程YYBaseTest然后,cd 到主目录,编辑Podfile文件:

source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'  # 清华镜像
source 'https://github.com/Yyue98/YYDemoSpecs.git'   # 私有库
platform :ios, '12.0'

target 'YYBaseTest' do
  pod 'YYBase'
  pod 'YYKit'
  pod 'WCDB'

end

开头的两行分别使用的是清华的镜像以及自己的私有库。

CocoaPods制作第三方库,管理自己的私有库以及发布官方库(模块化与组件化)

接下来在Xcode中打开工作空间,就会找到你install的私有库了。

CocoaPods制作第三方库,管理自己的私有库以及发布官方库(模块化与组件化)