通过Cocoapods分发Swift框架

出色的软件也具有出色的安装经验。 如果该软件太难安装,将很少使用它。

在我以前的文章中,我们学习了如何使用Swift框架重用和共享代码。 我们创建了一个包含框架目标的项目,该目标包含一个登录屏幕。 然后,我们在Xcode工作区中添加了框架和应用程序项目。 最后,我们通过工作空间将框架链接到应用程序并使用了该框架。

我们有责任获取并链接框架项目。 我们甚至没有办法管理框架的不同版本。

因此框架的安装和管理经验不是很好。 有没有更简单的方法来管理和安装框架? 🤔

就在这里! 🎉Cocoapods是一种流行的工具,可简化Swift框架的安装和共享。

在本文中,我们将逐步介绍通过Cocoapods共享Swift框架的过程。 稍后,我们将在应用程序中使用它。

我们将在Cocoapods将访问的git存储库中托管我们的框架。 在本文中,我假设您熟悉git

创建框架也不在本文讨论范围之内。 要查看如何创建框架,请查看我以前的文章。 将提供一个框架项目。

最后,我们只会谈论Cocoapods对于Swift框架可以做什么。

在开始之前,让我们快速了解Cocoapods的工作方式。 它将帮助我们与之合作。

本指南使用Xcode 10.1和Swift 4.2。

Cocoapods如何运作?

在本节中,我们将从两个不同角度简单地概述可可豆的工作方式。

  1. 将框架安装到iOS应用程序项目
  2. 向Cocoapods发布框架。

如果您已经熟悉Cocoapods的工作原理,请随时跳过任何或所有部分。

1.将框架安装到iOS应用程序项目

让我们开始看当Cocoapods如何工作的简化概述,当我们要求该工具将名为FrameworkA的Swift框架安装到名为MyApp的 iOS应用程序项目中时。

我们告诉Cocoapods,我们要在项目目录根目录下名为Podfile的文件中的MyApp target中安装FrameworkA

按照我们的示例, Podfile看起来应类似于以下内容:

 以“ MyApp”为目标 
吊舱“ FrameworkA”
结束

在上面的示例中,我们告诉Cocoapods我们的项目有一个名为MyApp的目标。 我们还告诉Cocoapods, MyApp目标需要一个名为FrameworkA的框架 ,该框架通过Cocoapods共享。 Cocoapods中的共享框架称为pod

捕获项目目标及其要求之后,我们必须告诉Cocoapods根据项目规范来建立我们的项目。 为此,我们必须运行pod install

pod install期间,Cocoapods将读取我们的Podfile并执行任何必要的操作以相应地配置我们的项目。

这是pod install过程中发生的情况的快速示意图:

当Cocoapods读取我们的Podfile它首先获取FrameworkA的规范。 存放规范的地方称为规范存储库或商店。 默认情况下,它仅搜索Cocoapods规范存储库。 但是,我们可以指向其他规范存储库,甚至我们自己的。

注意,我们没有指定要安装的FrameworkA版本。 在这种情况下,Cocoapods将获取可用的最新版本。

pod install执行结束时,Cocoapods将为我们生成一个工作空间,其框架已经链接到我们的应用程序目标! 🎉

仅需很少的步骤,我们就可以完成框架的安装,而仅使用Apple提供的本地工具就需要执行更多的步骤。

2.发布框架到Cocoapods

现在,我们了解了Cocoapods如何安装框架,为了使其他应用程序使用我们的框架,我们要做的唯一一件事情就是将框架的规范发布到规范存储库中。

让我们来体验一下吧!

入门

在本指南中,我们将:

  1. 安装Cocoapods
  2. 检索包含框架目标的Xcode项目
  3. 创建一个本地git仓库来托管我们的框架项目
  4. 创建本地规范存储库
  5. 将我们的框架规范发布到我们的规范库
  6. 将我们的框架安装到应用程序中

在开始潜水之前,让我们打开终端应用程序。 在整个指南中,我们将使用终端来完成框架的共享和安装。

1.安装Cocoapods

首先,让我们安装Cocoapods,该工具将简化共享和安装框架。 在终端输入或中,复制并粘贴以下命令。

 宝石安装cocoapods 

2.检索启动程序项目

接下来,让我们设置入门框架项目,该项目将通过Cocoapods共享。 让我们通过终端下载启动项目并将其放置在我们的主目录中。

 光盘〜 
curl -o MyFramework.zip -L https://www.dropbox.com/s/5vykpag4xb5vh51/MyFramework.zip -s
解压-q MyFramework.zip

3.创建本地托管的git存储库

对于本文,我们将在Mac中本地托管MyFramework项目的git存储库。 要创建本地托管的git存储库,请执行以下命令:

  mkdir〜/ MyFramework.git 
cd〜/ MyFramework.git
git init-裸

在上面,我们创建了一个目录来保存git仓库(扩展名为.git ),并在该目录中初始化了一个git仓库。

现在我们有了一个存放框架的地方,让我们将MyFramework项目内容添加到该地方。 执行以下命令:

  cd〜/ MyFramework 
git初始化
git remote add origin〜/ MyFramework.git
git添加
git commit -m“初始提交”
git tag -a 0.0.1 -m“版本0.0.1”
git push origin -u主
git push origin-标签

现在,我们将源代码存储在本地git存储库中。

4.创建本地规范存储库

让我们创建一个存储规范的存储库。 这是我们发布框架规范的地方。 为此,请执行以下命令:

  mkdir〜/ MySpecs.git 
cd〜/ MySpecs.git
git init-裸
git clone〜/ MySpecs.git〜/ MySpecs
cd〜/我的规格
触摸README.md
git添加README.md
git commit -m“初始提交”
git push origin -u主
pod repo添加我的规格〜/ MySpecs.git

前几个命令与上一节类似,在前一节中我们创建了一个git存储库来保存我们的框架。 最后一个命令pod repo add my-specs ~/MySpecs.git告诉Cocoapods将~/MySpecs.git添加到规范存储库列表中,并为其指定my-specs名称。 您可以通过运行pod repo list来检查Cocoapods拥有的规范存储库pod repo list

5.发布MyFramework的规范

在推动Cocoapods规范之前,让我们在项目中添加git标签,以便Cocoapods可以引用项目的特定快照。 git标签将为我们当前的项目状态添加一个标识符。 由于git不在本指南的范围内,因此只需知道添加到我们的项目框架中就不会影响通过Cocoapods交付的代码,因为Cocoapods将引用项目的当前状态。

让我们将框架的当前状态标记为版本1.0.1。 运行以下命令:

 cd ~/MyFramework 
git tag -a 0.0.1 -m "Version 0.0.1"

接下来,让我们向项目添加一个Cocoapods规范。 运行以下命令:

 猫>〜/ MyFramework.podspec <<-EOF 
  Pod :: Spec.new do | s | 
s.name =“ MyFramework”
s.version =“ 0.0.1”
s.summary =“ MyFramework项目的简短描述。”
s.description = <<-DESC
MyFramework项目的扩展描述。
数据中心
s.homepage =“ http://your.homepage/此处”
s.license = {:type =>'版权',:text => <<-许可证
版权2018
许可授予...
执照
}
s.author = {“ $(git config user.name)” =>“ $(git config user.email)”}
s.source = {:git =>“ $ HOME / MyFramework.git”,:tag =>“#{s.version}”}
s.source_files =“ MyFramework / ** / *。swift”
s.resources =“ MyFramework / ** / *。xib”
s.platform =:ios
s.swift_version =“ 4.2”
s.ios.deployment_target = '12 .0'
结束
 紧急行动 

上面的命令将创建一个名为MyFramework.podspec的文件,并将EOF之间的内容添加到该文件中。

在这里,我们为Cocoapods添加了必要的信息,以便能够获取正确的代码并将其安装到installers项目中。 您可以在此处找到其他Cocoapods规范属性,以根据您的项目需求配置框架。

现在,我们已经创建了一个规范。 最后要做的是通过将规范推送到规范存储库,使该规范对框架使用者可用。

运行以下命令以将MyFramework规范推送到私有规范存储库:

  pod repo push my-specs〜/ MyFramework.podspec 

做得好! 现在,我们的框架已列在我们的规范存储库中,可供应用程序使用! 在最后一步,我们将通过应用程序使用MyFramework。

6.在应用程序中安装MyFramework

在我们可以通过Cocoapods测试MyFramework的安装之前,我们需要一个应用程序来安装它。 让我们从上一篇文章中获取MyApp项目。

运行以下命令:

 光盘〜 
curl -o MyApp.zip -L https://www.dropbox.com/s/jfdrj58lgrhjc4t/MyApp.zip? -s
解压-q MyApp.zip

接下来,让我们在MyApp中安装MyFramework。 我们首先必须创建一个Podfile ,在其中指定要在MyApp中安装的MyFramework。 运行以下命令:

  cd〜/ MyApp 
猫> Podfile <<-EOF
 以“ MyApp”为目标 
use_frameworks!
pod'MyFramework','0.0.1',:source =>“ $ HOME / MySpecs.git”
结束
 紧急行动 

注意use_frameworks! 使用框架时是必需的。

接下来,让我们告诉Cocoapods在Podfile中安装指定的框架。 运行pod install命令来执行此操作。

在Xcode中打开MyApp.xcworkspace并运行该应用程序。 这就是全部! 🥳

最后的笔记

在结束本文之前,请注意将MyFramework源代码复制到Pods项目中并包装在框架目标中。 每次我们构建应用程序时,都会同时构建MyFramework,然后将其附加到应用程序。

摘要

在本指南中,我们了解到

  • 椰子足如何运作
  • 如何通过Cocoapods分发框架
  • 如何通过Cocoapods安装我们的分布式框架

从集成者的角度来看,我们已经看到使用Cocoapods安装和管理框架是多么简单。 Cocoapods的简单性可以吸引更多开发人员安装和使用您的框架。

下一步

在本指南中,我们看到Cocoapods与集成商共享源代码和资产,然后将它们打包在集成商端的框架中。 我们看到集成商随后将其编译为他们的应用程序构建过程的一部分。 但是,如果我们不想共享代码怎么办? 或者,也许我们想节省时间,以便从我们的应用程序中编译大量共享但很少更改的代码。 有没有一种方法可以通过Cocoapods共享已编译的框架?

您将在下一篇文章中找到该问题的答案。 在Twitter或Medium上关注我,敬请期待!