创建自己的CocoaPods库

介绍

作为iOS开发人员,您可能在项目中使用了一些CocoaPods库,并且您可能非常熟悉如何安装它们并调用它们的方法。 但是,您是否梦想过通过分发自己的pod(CocoaPods库)为iOS开源社区做出贡献? 想象一下,许多iOS应用程序都将使用您的超棒库,这不是太棒了吗?

在本教程中,我将向您展示如何分发一个简单的pod。 除此之外,您还将学习如何利用Travis CI和Codecov来确保您的Pod可靠可靠。

总览

有多种创建吊舱的方法。 最常见的方法是遵循CocoaPods官方文档Using Pod Lib Create,基本上,您可以使用以下命令快速引导Xcode工作区以开发新的Pod:

  > pod lib创建[pod名称] 

在自举的工作区中,我不喜欢的一件事是,与单元测试有关的代码嵌套在示例目标内部,这对我来说没有意义。 经过一番尝试和错误之后,我找到了一种从头开始创建pod并很好地组织单元测试和示例代码的方法。

以下是创建窗格的所有步骤的快速概述:

  1. 设置Xcode项目和必要的目标
  2. 链接到Github
  3. 实施吊舱
  4. 编写单元测试
  5. 配置Travis CI和Codecov
  6. 发布广告连播

在撰写本文时,我正在使用以下软件:

  • macOS Mojave 10.14.3
  • Xcode 10.1
  • 斯威夫特4.2
  • 椰子足1.6.0

好的,让我们开始吧!

设置Xcode项目和必要的目标

实际上,在创建项目之前,有一项重要的工作要做,让我们命名Pod SwiftyLib ,并确保未在CocoaPods上使用该名称,幸运的是,该名称尚未提交,因此我们可以继续进行。

创建一个Cocoa Touch Framework Xcode项目

在后台,CocoaPods库是Cocoa Touch框架库。 启动Xcode并创建一个新项目,选择Cocoa Touch Framework

输入名称SwiftyLib   ,选中Include Unit Tests复选框。 在下一页上,选择项目位置,不要Create Git repository on my Mac选中“ Create Git repository on my Mac因为稍后我们将创建它。

按下“ Create按钮后,将Create项目,并且工作区应如下所示:

准备目标

如您所见,我们现在有一个名为SwiftyLib的项目,它有两个目标:

  1. SwiftyLib:我们的pod实施将在这里进行
  2. SwiftyLibTests:单元测试我们的pod并收集代码覆盖率

在Xcode中,每个目标都有一个方案,可让您控制构建和测试行为。 如您在SwiftyLib方案中看到的那样,当我们执行Test命令时,它将触发用SwiftyLibTests目标编写的测试。

在许多Cocoapods项目中,开发人员喜欢将一些演示或示例作为其pod的一部分,这些将有助于人们更好地了解如何使用pod。 为此,我们添加一个名为SwiftyLibExamples的新目标。 从项目导航器中选择SwiftyLib项目,然后选择File> New> Target…,选择Single View App作为模板,然后单击Next

输入名称SwiftyLibExamples并单击Finish

现在项目导航器应如下所示:

SwiftyLibTests没有嵌套在SwiftyLibExamples内部。 稍后,我们将使用我们的pod来实现示例,现在,我们只需完成第一步,就可以成功构建用于制作pod的项目!

链接到Github

不用说,Github是开源项目的最佳托管服务,更重要的是,当您发布CocoaPods库时,Cocoapods要求您指定从中检索源的位置,而Github是一个完美的选择。

创建一个新的仓库

转到Github并创建一个名为SwiftyLib的新项目,将其他设置保留为默认设置,然后单击Create repository ,现在将创建一个空的Github存储库。

在下一个屏幕中,我们将使用以下信息链接现有的Xcode项目:

链接现有项目

打开一个终端,导航到SwiftyLib Xcode项目文件夹,然后键入以下命令:

  > git init 
> git remote add origin git@github.com:{USERNAME} /SwiftyLib.git
> git添加。
> git commit -m“初始项目设置”
> git push -u原始主机

README和MIT许可证

现在我们已将源代码上传到Github! 在完成本节之前,让我们从Github页面创建README.md文件和MIT license文件。 要创建README.md请单击“ Add a README按钮,添加MIT license文件,单击“ Create new file按钮,然后按照此处的Github官方指南进行操作,这非常简单。

完成后,键入以下命令以与远程存储库同步。

  > git拉 
...
更改2个文件,插入24个(+)
创建模式100644许可
创建模式100644 README.md

做得好,您刚刚完成了另一个里程碑!

实施吊舱

是时候编写一些Swift代码并实现我们的SwiftyLib了。 如前所述,所有实现都将在SwiftyLib目标中进行。 在项目导航器中,右键单击SwiftyLab目标,然后选择“ New File...

选择Swift File作为新文件模板,单击Next …。

将文件命名为SwiftyLib ,确保该文件属于SwiftyLib目标,并将其保存在SwiftyLib文件夹中,如下面的屏幕快照所示。

让我们编辑新创建的SwiftyLib.swift文件:

我们刚刚实现了SwiftyLib库,让我们编写一些单元测试用例。

编写单元测试

单元测试对于确保库的健壮性至关重要,并且由于我们的库非常简单,因此编写单元测试很容易🙂

编辑SwiftyLibTests.swift

应通过测试用例,切换到reports navigator并检查代码覆盖率:

如您所见,覆盖率仅为50%,因为我们没有为sub()函数编写单元测试,所以让我们开始吧!

至此,我们有了一个功能强大的Pod,让我们保存所有更改并将其推送到Github。

  > git添加。 
> git commit -m“添加测试用例”
> git推

配置Travis CI和Codecov

每当我们对Github进行新的更改时,都应该测试我们的pod,并确保所有测试用例都没有损坏。

Travis CI是一项托管的分布式连续集成服务,用于构建和测试GitHub上托管的软件项目。

我们可以利用Travis帮助我们运行测试用例,并将代码覆盖率报告提交给Codecov。

Codecov是一种报告工具,旨在将任何覆盖率报告格式处理为Codecov的标准格式。 您可以更改Codecov处理报告和表达覆盖率信息的方式的配置。

为了让Travis在我们的Github存储库中进行任何更改,请在Travis上同步您的Github帐户并启用我们的SwiftyLib存储库。

在我们的项目文件夹中创建一个.travis.yml文件:

接下来,让我们让Travis将代码覆盖率报告发送给Codecov。 在我们走得太远之前,让我们看一下Travis到目前为止所做的事情。 Travis执行以下脚本来运行测试:

  > xcodebuild测试\ 
-enableCodeCoverage是 \
-项目SwiftyLib.xcodeproj \
-方案SwiftyLib \
-sdk $ TEST_SDK \
-destination“ platform = iOS Simulator,OS = $ OS,name = $ NAME” \
ONLY_ACTIVE_ARCH =是

请注意,代码覆盖率报告是使用xcodebuild test命令生成的。 如果遵循Codecov的指南,我们可以使用以下命令将代码覆盖率报告推送到Codecov:

  > bash <(curl -s https://codecov.io/bash)-t {CODECOV_TOKEN} 

您可能会看到一些奇怪的报告,其中报告了不必要的文件,但是我们只希望看到覆盖率报告,就像我们在Xcode前面看到的那样。

ather

要解决此问题,就是让Travis将准确的代码覆盖率报告发送给Codecov,让我们借用另一个工具Slather 。 使用slather,我们可以指定如何准确地收集代码覆盖率信息。

首先,让我们创建配置文件以定义如何收集代码覆盖率信息,然后创建一个名为.slather.yml的新文件:

您可以在Codecov上查看代码覆盖率的详细信息:

优秀! 我们达到了另一个里程碑,我们的吊舱坚固耐用,并受到Travis和Codecov的保护。

发布广告连播

最后,是时候发布我们的pod了! 首先,安装cocoapods

  > gem install cocoapods 

然后创建一个podspec文件,该文件定义了我们的pod,例如在哪里找到源。

  >荚规范创建SwiftyLib 
...
SwiftyLib.podspec创建的规范

编辑SwiftyLib.podspec文件:

检查SwiftyLib.podspec是否正确,修复是否存在问题

  >豆荚皮棉 
...
-> SwiftyLib(0.0.1)
SwiftyLib通过了验证。

大! 让我们将更改保存到Github!

  > git添加。 
> git commit -m“添加了SwiftyLib.podspec”
> git推

开始分发我们的图书馆

标记正确的版本

  > git标签0.0.1 
> git push原点0.0.1

然后推!

  > 荚树干推 
...
更新spec repo`master`
---------------------------
🎉恭喜
🚀SwiftyLib(0.0.1)成功发布
📅2月24日,15:49
🌎https://cocoapods.org/pods/SwiftyLib
👍告诉你的朋友!
---------------------------

请注意,版本号应与spec.version定义的SwiftyLib.podspec

恭喜你! 您刚刚将CocoaPods库发布到了开源社区!

该项目的源代码可以在Github中找到。