本文首发于 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.ca+1.b.c 之间;
  • Up to Next Minor,比如:输入 a.b.c,依赖的版本就会在 a.b.ca.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 集成依赖库的更多相关文章

  1. Swift Package Manager(一)初探

    一句话:Swift Package Manager(swift包管理器,简称:SPM)就是在swift开发中用来替代CocoaPod的:在swift开发中,SPM完全可以替代CocoaPod的功能,并 ...

  2. pycharm创建虚拟环境venv和添加依赖库package

    1.创建虚拟环境 因为项目采用不同版本的python,所依赖的库的版本也不一样,为了避免版本冲突,为每一个项目每个python版本创建一个虚拟环境,环境中所使用的依赖库也是独立存在,不会被其他版本或其 ...

  3. node.js之看懂package.json依赖库版本控制

    金天:学习一个新东西,就要持有拥抱的心态,如果固守在自己先前的概念体系,就会有举步维艰的感觉.node.js依赖库的版本控制 一般node.js项目会依赖大量第三方module, 那么如何控制modu ...

  4. RPM Package Manager

    本文大部分内容来自鸟哥的Linux私房菜,并且由作者根据自己的学习情况做了一些更改,鸟哥原文链接 1. 程序的安装方式 源代码安装:利用厂商释出的Tarball 来进行软件的安装,每次安装程序都需要检 ...

  5. Unity Package Manager

    (注:Unity 2018.1及以后的版本才可以使用Package Manager.) 一个package是一个容器,里面放的是Assets, Shaders, Textures, plug-ins, ...

  6. 系列篇|编译可在Android上运行的依赖库(一):glib库

    前言 这是系列文章,它们由<编译可在Android上运行的glib库>及其他4篇文章组成,这4篇文章在“编译依赖库”一节中列出.由于glib库依赖于其他第三方库,所以需要先将依赖的第三方库 ...

  7. 你需要知道的包管理器(Package Manager)

    最近我花了一点时间关注了在不同系统之中所用到的包管理器(Package Manager) .最开始的时候,我是在使用Linux操作系统时,对这种工具以及它背后的想法深深迷恋住了:这真是自由的软件世界. ...

  8. WeedFS依赖库 0.6.1

    WeedFS依赖库 版本 0.6.1 =======================================================================glog====== ...

  9. swift中第三方网络请求库Alamofire的安装与使用

    swift中第三方网络请求库Alamofire的安装与使用 Alamofire是swift中一个比较流行的网络请求库:https://github.com/Alamofire/Alamofire.下面 ...

随机推荐

  1. luogu P4321 随机漫游 期望dp 二进制 高斯消元

    LINK:随机漫游 非常妙的一道题. 容易想到倒推期望. 设状态 f[i][j]表示到达第i个点 此时已经到达的集合为j能走到全集的期望边数. 只要求出来这个就能O(1)回答询问. \(f[i][j] ...

  2. windows:跨进程读数据

    外挂.木马.病毒等可能需要读取其他进程的数据,windows提供了OpenProcess.ReadProcessMemory等函数.但越是大型的软件,防护做的越好,大概率会做驱动保护,比如hook S ...

  3. cobbler多机定制安装

    目录 cobbler多机定制安装 1. cobbler服务端部署 2. 客户端安装 3. 定制安装配置 4. 安装 client1开机 client2开机 cobbler多机定制安装 1. cobbl ...

  4. [转]35张图就是为了让你深入AQS

    以下文章来源于程序员cxuan ,作者一枝花算不算浪漫 谈到并发,我们不得不说AQS(AbstractQueuedSynchronizer),所谓的AQS即是抽象的队列式的同步器,内部定义了很多锁相关 ...

  5. mybatis plus 更新值为null的字段

    转载请注明出处: 由于mybatis plus调用默认的更新操作方法时,不更新值为空,null或默认值等得属性字段,只更新值为非null,非空非默认值的属性字段. 以下为mybatis plus sa ...

  6. 属性集 Properties

    5.1 概述 java.util.Properties 继承于 Hashtable ,来表示一个持久的属性集.它使用键值结构存储数据,每个键及其对应值都是一个字符串.该类也被许多Java类使用,比如获 ...

  7. 使用docker安装nginx并配置端口转发

    使用docker安装并运行nginx命令: docker run --name=nginx -p 80:80 -d docker.io/nginx 使用命令: docker exec -it ngin ...

  8. MyBatis深入理解参数

    目录 一.快速创建mapper文件 二.parameterType 三.MyBatis 传递参数 1. 一个简单参数(掌握) 一.快速创建mapper文件 由于每个接口都要创建一个对应的mapper文 ...

  9. 总结笔记 | 深度学习之Pytorch入门教程

    笔记作者:王博Kings 目录 一.整体学习的建议 1.1 如何成为Pytorch大神? 1.2 如何读Github代码? 1.3 代码能力太弱怎么办? 二.Pytorch与TensorFlow概述 ...

  10. 基于Asp.net Core 3.1实现的Redis及MemoryCache缓存助手CacheHelper

    这几天在面试,这个关于Redis缓存的博客一直没空写,今天总算有点时间了. 从很久很久之前,我就一直想学Redis了,反正看到各大招聘网上都要求Redis,不学就太落后了. 一开始我是按微软官网文档那 ...