创建自己的CocoaPods库
介绍
作为iOS开发人员,您可能在项目中使用了一些CocoaPods库,并且您可能非常熟悉如何安装它们并调用它们的方法。 但是,您是否梦想过通过分发自己的pod(CocoaPods库)为iOS开源社区做出贡献? 想象一下,许多iOS应用程序都将使用您的超棒库,这不是太棒了吗?
在本教程中,我将向您展示如何分发一个简单的pod。 除此之外,您还将学习如何利用Travis CI和Codecov来确保您的Pod可靠可靠。
总览
有多种创建吊舱的方法。 最常见的方法是遵循CocoaPods官方文档Using Pod Lib Create,基本上,您可以使用以下命令快速引导Xcode工作区以开发新的Pod:
> pod lib创建[pod名称]
在自举的工作区中,我不喜欢的一件事是,与单元测试有关的代码嵌套在示例目标内部,这对我来说没有意义。 经过一番尝试和错误之后,我找到了一种从头开始创建pod并很好地组织单元测试和示例代码的方法。
以下是创建窗格的所有步骤的快速概述:
- 设置Xcode项目和必要的目标
- 链接到Github
- 实施吊舱
- 编写单元测试
- 配置Travis CI和Codecov
- 发布广告连播
在撰写本文时,我正在使用以下软件:
- 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
的项目,它有两个目标:
- SwiftyLib:我们的pod实施将在这里进行
- 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中找到。