前言
Swift Package Manager 是苹果推出的用于管理分发 swift 代码的工具。类似于 CocoPod。它使用 swift 编译系统 自动的下载源码、编译、链接程序,可以创建使用swift的库和可执行程序等。
以前,看过官网,但再次回头看,还是没印象,这次就一步一步的实际操作一下。
创建一个新的目录
$ mkdir Hello
$ cd Hello
类似pod 都有一个Podfile。SPM 都有一个 Package.swift 文件。同样 SPM 也提供了命令行帮我们做了这工作。
swift package init -h
OVERVIEW: Initialize a new package
OPTIONS:
--type empty|library|executable|system-module
看帮助文档可以知道package有多种类型,这里,我想做一个命令行工具。所有选择 executable
swift package init executable
至此一个最简单的可以 命令行 工具就做好了
编译就可以产生可执行文件了。 到文件目录中看一看一切都很清楚明了
//编译命令:
swift build
//运行命令:
swift run
注意都是在当前Hello目录下
结合 Xcode 写代码
code 还是要在 Xcode 中执行,可是浏览目录发现没有 xcode 工程文件。很简单运行下面命令即可。
swift package generate-xcodeproj
//查看更多命令
// swift package -h
至此就可以在 xcode 中愉快地写代码了
添加依赖
开发 ios 的都知道,引入第三方库都需要配置 xcode。 SPM 帮助我们完成了这些工作。比如:这里,我想让自己的控制台日志成为彩色的。引入 第三方库 Rainbow (链接里有详细的使用方法),修改后的 Package.swift 文件夹如下:
// swift-tools-version:4.2
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "Hello",
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
.package(url: "https://github.com/onevcat/Rainbow.git", from: "3.1.1"),
],
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 which this package depends on.
.target(
name: "Hello",
dependencies: ["Rainbow"]),
.testTarget(
name: "HelloTests",
dependencies: ["Hello"]),
]
)
使用第三方库
在 main.swift 中
import Rainbow
print("Red text".red)
至此,可以用命令行run 或者用 xcode 运行。
你会发现编译失败!!!
犹如CocoPod,编写完配置文件,需要执行配置文件,在控制台执行
swift package generate-xcodeproj
OK!!!
获取命令行参数 CommandLine.arguments
补充
一开始总是不知道怎么写 Package 文件,后来发现,这个 Package 就是一个 swift 类 和 普通的 UIView 类似。这个文件大部分类容就是调用 init 方法。知道这个一切都清楚了。当然这个文件的写法也有一些规则,看这里官方blog:Swift Package Manager Manifest API Redesign
总结
一次简单实践完成,但还有不少细节和帮助文档可以细细挖掘。目前,SPM 还不支持 ios 。