使用 Swift Package Manager 集成依赖库
本文首发于 Ficow Shen's Blog,原文地址: 使用 Swift Package Manager 集成依赖库。
内容概览
- 前言
- 添加依赖包
- 在项目中使用依赖
- 管理已导入的依赖
- 在团队中统一依赖的版本
- 总结
前言
在 Swift Package Manager 出现之前,我们需要使用 CococaPods, Carthage 等包管理工具来管理依赖。
现在,我们可以直接使用 Xcode 来管理依赖。Xcode 内建了对 Git 版本控制系统的支持,我们可以轻松地使用 Xcode 中的 Swift Package Manager 来管理 公开的、私有的 仓库中的包。
添加依赖包
首先,找到添加依赖的菜单:

然后,输入依赖的名称或者仓库地址进行搜索。比如,我输入了 alamofire:

可以看到,搜索结果有很多。我们可以根据 仓库的名称 还有 仓库的主人 以及 仓库的描述(fork, star的数量) 来找出我们真正期望的结果!当然,你也可以直接输入仓库的地址,然后进行下一步操作!
如果输入的是仓库地址,Xcode 就会校验这个仓库:

接下来,需要决定依赖的版本:

选择决定版本的规则:

目前有4种规则,都基于语义化版本(表示法:MAJOR.MINOR.PATCH ,即: 大版本.小版本.修复版本):
Up to Next Major,比如:输入a.b.c,依赖的版本就会在a.b.c到a+1.b.c之间;Up to Next Minor,比如:输入a.b.c,依赖的版本就会在a.b.c到a.b+1.0之间;Range,指定一个自定义的版本范围;Exact,指定一个固定版本;
当然,也可以选择这个仓库里的某个分支、提交记录。然后,点击下一步,Xcode 就会开始拉取依赖。

接下来,选择需要导入依赖的目标(target),默认选择的是应用所在的目标:

导入完毕,最终效果如下:

在项目中使用依赖
如下所示,在项目中使用 Alamofire。如果可以编译成功,则表示导入依赖成功。
import UIKit
import Alamofire
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
AF.request("https://httpbin.org/get").response { response in
debugPrint(response)
}
}
}
管理已导入的依赖

如果需要添加/删除依赖,选中依赖对应的行,然后点击 + 或者 - 即可。
点击删除时,会有确认提示:

如果需要修改依赖的版本,双击依赖对应的行,Xcode 会修改版本的控制面板:

除此之外,也可以使用 Xcode 菜单栏中的选项:

各个选项的作用:
Reset Package Caches,重置依赖包的缓存Resolve Package Versions,生成Package.resolved文件,已确定依赖的版本信息Update to Latest Package Versions,根据您配置的依赖包的版本控制规则,对依赖包进行升级。
在团队中统一依赖的版本
用 Swift Package Manager 导入依赖后,Xcode 会在 项目根目录/项目名称.xcodeproj/project.workspace/xcshareddata/swiftpm/ 这个目录生成一个 Package.resolved 文件。其中的内容大致如下:
{
"object": {
"pins": [
{
"package": "Alamofire",
"repositoryURL": "https://github.com/Alamofire/Alamofire.git",
"state": {
"branch": null,
"revision": "64dd16a5f2099dd5400f5e6d1442dc5ab0c1d917",
"version": "5.2.0"
}
}
]
},
"version": 1
}
把这个文件提交到 Git,可以帮助团队成员统一依赖包的版本。
总结
整体来看,学习和使用 Swift Package Manager 都非常容易。而且,这是官方提供的工具,十分推荐使用!
你甚至不需要创建什么文件,也不需要操作命令行!只需要有一个 Git 仓库的名称或者地址,然后就可以导入依赖了,非常简单、高效!
朋友,行动起来吧!感受 Swift Package Manager 带给你的快乐 ~
参考内容
Adding Package Dependencies to Your App
Ficow Shen原创文章,转载请注明出处。
使用 Swift Package Manager 集成依赖库的更多相关文章
- Swift Package Manager(一)初探
一句话:Swift Package Manager(swift包管理器,简称:SPM)就是在swift开发中用来替代CocoaPod的:在swift开发中,SPM完全可以替代CocoaPod的功能,并 ...
- pycharm创建虚拟环境venv和添加依赖库package
1.创建虚拟环境 因为项目采用不同版本的python,所依赖的库的版本也不一样,为了避免版本冲突,为每一个项目每个python版本创建一个虚拟环境,环境中所使用的依赖库也是独立存在,不会被其他版本或其 ...
- node.js之看懂package.json依赖库版本控制
金天:学习一个新东西,就要持有拥抱的心态,如果固守在自己先前的概念体系,就会有举步维艰的感觉.node.js依赖库的版本控制 一般node.js项目会依赖大量第三方module, 那么如何控制modu ...
- RPM Package Manager
本文大部分内容来自鸟哥的Linux私房菜,并且由作者根据自己的学习情况做了一些更改,鸟哥原文链接 1. 程序的安装方式 源代码安装:利用厂商释出的Tarball 来进行软件的安装,每次安装程序都需要检 ...
- Unity Package Manager
(注:Unity 2018.1及以后的版本才可以使用Package Manager.) 一个package是一个容器,里面放的是Assets, Shaders, Textures, plug-ins, ...
- 系列篇|编译可在Android上运行的依赖库(一):glib库
前言 这是系列文章,它们由<编译可在Android上运行的glib库>及其他4篇文章组成,这4篇文章在“编译依赖库”一节中列出.由于glib库依赖于其他第三方库,所以需要先将依赖的第三方库 ...
- 你需要知道的包管理器(Package Manager)
最近我花了一点时间关注了在不同系统之中所用到的包管理器(Package Manager) .最开始的时候,我是在使用Linux操作系统时,对这种工具以及它背后的想法深深迷恋住了:这真是自由的软件世界. ...
- WeedFS依赖库 0.6.1
WeedFS依赖库 版本 0.6.1 =======================================================================glog====== ...
- swift中第三方网络请求库Alamofire的安装与使用
swift中第三方网络请求库Alamofire的安装与使用 Alamofire是swift中一个比较流行的网络请求库:https://github.com/Alamofire/Alamofire.下面 ...
随机推荐
- 12-21 Request庫
- 2020牛客暑假多校训练营 第二场 G Greater and Greater bitset
LINK:Greater and Greater 确实没能想到做法. 考虑利用bitset解决问题. 做法是:逐位判断每一位是否合法 第一位 就是 bitset上所有大于\(b_1\)的位置 置为1. ...
- 微信小程序订阅消息调研
相关资料 背景:微信模板消息已正式下架,改为订阅消息,详情如下: 服务变更通知 订阅消息:订阅消息相关内容如下: 订阅消息 接口设计 获取接口访问凭证 :根据appId和secret获取接口访问凭证a ...
- Spring MVC method POST no supported
首先:一些隐含的知识点要知道 POST 的不支持对静态资源的访问[默认情况下是这样,个人不太了解,仅总结大概思路],如果是post 而响应的是个静态资源,则很多情况下出现这种错误 因此在使用POST应 ...
- .net core编写转发服务
我有个小伙伴问我,他需要写一个转发服务的他有很多功能要通过他的服务转发~ 技术栈又不一定asp.net core,我就想起泥水老前辈的BeetleX.FastHttpApi 中午午休,折腾了一会儿前辈 ...
- FastAPI框架入门 基本使用, 模版渲染, form表单数据交互, 上传文件, 静态文件配置
安装 pip install fastapi[all] pip install unicorn 基本使用(不能同时支持,get, post方法等要分开写) from fastapi import Fa ...
- 【av68676164(p41-p42)】内存管理功能
存储器的功能需求 容量足够大 速度足够快 信息永久保存 多道程序并行 多道程序并行带来的问题 共享:代码和数据共享,节省内存 保护:不允许内存中的程序相互间非法访问 实际存储器体系 三级存储体系 Ca ...
- 为何选择spark!
随着大数据处理的应用场景越来越多,人们对Hadoop的要求也越来越高,开发出的对应的系统也越来越多,人们迫切的需要一个综合的计算框架,Spark应运而生,我们可以看看Spark可以干些什么. 那么为什 ...
- 怎么在微信公众号上传PPT?
我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件. 以下是公众号添加附件使用“微附件”小程序的教 ...
- C#LeetCode刷题之#404-左叶子之和(Sum of Left Leaves)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4084 访问. 计算给定二叉树的所有左叶子之和. 3 / ...