Swift Package Manager 是苹果官方推出的库管理工具。类似 cocoapods。

准备事项:

  • 一个需要封装的库
  • 存放库的远程仓库,如 github、gitee、gitLab等

创建Package

创建 Package 有2种方式,命令行和 Xcode。

一、命令行

首先创建包名

mkdir SPMTest
cd SPMTest

创建 package 项目

swift package init

此时我们已经创建好了一个包项目,只需要双击 Package.swift 文件即可启动 Xcode,进行编码和测试。

我们也可以使用swift package generate-xcodeproj来生成 xcode 项目,但是一般不需要。

Tips: 对于已经存在的库, 我们可以指定源码路径, 不一定要使用默认的构建源码路径

二、Xcode

通过 Xcode 开发工具,我们也可以新建一个 Package 项目。

输入库名即可。

Package 文件编辑

Package.swift相当于 Cocoapods 库的 xxx.podspes文件,是对库的配置。

示例:

import PackageDescriptionlet package = Package(name: "SPMTest",products: [// Products define the executables and libraries a package produces, and make them visible to other packages..library(name: "SPMTest",targets: ["SPMTest"]),],dependencies: [// Dependencies declare other packages that this package depends on.// .package(url: /* package url */, from: "1.0.0"),],targets: [// Targets are the basic building blocks of a package. A target can define a module or a test suite.// Targets can depend on other targets in this package, and on products in packages this package depends on..target(name: "SPMTest",dependencies: []),.testTarget(name: "SPMTestTests",dependencies: ["SPMTest"]),]
)

默认添加 name、products、targets,还可以添加其他参数,但是需要按照顺序。

参数解释

name:库包的名称;

defaultLocalization:资源的默认本地化;

platforms:支持的最低系统平台的列表;

pkgConfig:用于C模块的名称。如果存在,Xcode将搜索.pc文件以获取系统目标所需的其他标志;

providers:系统目标的程序包提供者;

products:此软件包可让客户使用的产品列表;

dependencies:软件包依赖项列表(可空,或需要其它外部依赖);

targets:属于此软件包的目标列表(源码目录、测试目录);

swiftLanguageVersions:此软件包兼容的Swift版本列表;

cLanguageStandard:用于此程序包中所有C目标的C语言标准;

cxxLanguageStandard:用于此程序包中所有C ++目标的C ++语言标准;

测试

一、 单元测试

自行封装的库,建议写好单元测试,以便后期维护和保证库的稳定性。

二、使用测试

在库还没有推到远程仓库,或者没有发布时,本地该如何测试?

将库文件夹手动拉入项目,手动添加库

Tips: Xcode 可在不删除远程库的条件下,添加本地库调试(本地库会覆盖远程库),调试完成删除即可

使用

我们可以在 Xcode 的菜单栏 File -> Swift Pakcages -> Add Package Dependncy进入添加页面。

也可以直接选择项目,进入PROJECT 选择 Swift Packages

复制库地址或者搜索库选择之后,选择版本号,等待下载就可以了。

Tips: 没有发布 release 的库 只能通过 branch 或者 commit 下载代码

项目使用的 SPM 库文件路径在[appName].xcodeproj/project.workspace/xcshareddata/swiftpm/Package.resolved

更新第三方库

我们使用 Cocoapods 的时候可以随时通过 pod install 或者 pod update将库更新到最新,如果使用 Swift Package Manager 怎么更新了。

虽然Xcode会更新你的包依赖并自动解析包版本,但你可以从File > Swift Packages菜单中触发这两个动作。

如下图,选择更新库。

参考

Swift Package Manager介绍 – raywenderlich

如何让自己的库支持 Swift Package Manager

how to use swift package manager – Mobile Thinking: 英文介绍,包含如何创建和使用。

iOS 包依赖管理工具(五):Swift Pakcage Manager自定义篇 – 简书-青叶小小

WWDC2020 - Swift Package Manager – kemchenj

Swift Package Manager 库制作相关推荐

  1. combin14_使用SwiftUI,Combin和Swift Package Manager(SPM)构建复杂的模块化架构

    combin14 We should imagine a modular architecture like a modular building. We need to put pre-design ...

  2. [翻译练习] Swift Package Manager 重写 macOS 部署目标

    译自:oleb.net/blog/2017/0- Swift 3.1 修复了 Swift Package Manager 无法重写 MacOS 部署目标的 Bug. 当你在 macOS 上执行 swi ...

  3. Xcode Swift package manager 无法下载 GitHub 包问题

    解决方法: 使用终端进入项目根目录 复制并在终端运行终端代理命令 最后运行如下命令 xcodebuild -resolvePackageDependencies -scmProvider system ...

  4. Swift tips 017 - Speeding up Swift package tests

    代码截图 代码出处: Swift Tips 017 by John Sundell[1] 小笔记 这段代码在说什么 Swift Package Manager(Swift 包管理器,一般简称 Swif ...

  5. node和npm是什么_什么是npm? 面向初学者的Node Package Manager教程

    node和npm是什么 This article should serve as an all-in-one essential guide for Node.js' favorite sidekic ...

  6. 静态库制作-混编(工程是oc为基础)

    最近工作需要,需要制作一些静态库.由于缺乏经验,特意找了一些资料,加上自己的测试.特意在此记录一些心得和踩过的坑.所谓"好记性不如烂笔头",希望自己以后忘记的时候能回头来看看,同时 ...

  7. 少女风vue组件库制作全攻略~~

    预览 组件库官网 github地址 如果喜欢各位小哥哥小姐姐给个小星星鼓励一下哈, 请勿在生产环境中使用,供学习&交流~~ 完整项目目录结构 git clone到本地安装依赖后,执行npm r ...

  8. 深入安卓Package Manager和Package Installer

    我们每天都在安装和卸载APK(安卓应用程序包文件),或许一天会有好几次,但是你有想过下面问题吗? 什么是Package Manager(包管理器)和Package Installer(程序安装包)? ...

  9. 使用 Swift Package 插件生成代码

    前言 不久前,我正在工作中开发一项新服务,该服务由 Swift Package 组成,该 Package 公开了一个类似于Decodable协议,供我们应用程序的其余部分使用.事实上,该协议是从Dec ...

最新文章

  1. 2019半年总结:Teams are powerful
  2. 《大道至简》一书第三版,与编辑就本书写作风格的讨论
  3. CAS单点登录3--服务端登录页个性化
  4. 浏览器差异总结,可以用此判断浏览器版本(转)
  5. leetcode--数组(Medium1)
  6. python中response对象的属性_Django 中的响应对象 Response
  7. 探索数据可视化,业务数据是核心
  8. 用计算机模拟宇宙,计算机中的宇宙
  9. Kubernetes 搭建 ES 集群(存储使用 local pv)
  10. Unity: 打飞碟简单版
  11. 【Web:Bootstrap框架】简单实现理解
  12. linux md5sum 文件夹,每天一个 Linux 命令(63):cksum、md5sum、sha1sum命令
  13. 短信验证功能、邮箱验证功能
  14. imx6ul的sd卡启动过程分析
  15. android下拉框代码,Android下拉列表spinner的实例代码
  16. 基于Python的工人员工工资管理系统
  17. 什么是期权?如何从概念上理解看涨期权/看跌期权?
  18. 欧洲语言c1怎么考,【从A1到C2】欧洲共同语言参考标准对应的德语考试
  19. net framework 4 0如何安装 安装失败怎么办
  20. llinux服务器7277端口未开启,造成was控制台中node agent远程节点显示停用状态

热门文章

  1. 《Netty In Action》第二章:第一个Netty程序
  2. OpenStack(Kilo版本)基础架构学习笔记
  3. 【IntelliJ IDEA】tomcat启动,打印日志乱码问题
  4. 【LeanEAP.NET】精益企业应用平台---源码Demo下载
  5. Scrum中如何实现一个Sprint?
  6. 被Html的Button标签耍了一次
  7. 敏捷个人俱乐部2012年2月线下活动:活出我的最好生活
  8. bzoj 1207: [HNOI2004]打鼹鼠
  9. JS实现图片放大查看
  10. Kafka监控工具KafkaOffsetMonitor配置及使用