一个用于在 Swift 中解析和评估语义化版本的包。
这是 semver 的绑定,它使用 Cargo 风格的语义化版本。有关更多信息,请参阅 semver 的 README。
Rust 和 Swift 之间的桥接使用 Swift Bridge 生成。
在你的 Package.swift
文件中
dependencies: [
.package(url: "https://github.com/jomy10/SemverSwift", from: "1.0.0")
],
targets: [
.target(
name: "YourTarget",
dependencies: [
.product(name: "Semver", package: "SemverSwift")
]
)
]
https://github.com/jomy10/SemverSwift
let version = Version(major: 1, minor: 0, patch: 3)
let versionParsed = try Version.parse("1.0.3").get()
XCTAssertEqual(version, versionParsed)
当然,在实际应用中,你可能想要实现一些其他的错误处理,例如 guard
或 switch
;
let versionParsedResult = Version.parse("1.0.3")
guard case .success(let versionParsed) = versionParsedResult else {
XCTFail()
}
你可以使用 VersionReq.match
方法测试一个版本是否符合特定的版本要求
let versionReq = try VersionReq.parse(">=1.0.0").get()
let version = try Version.parse("1.0.0").get()
let lowerVersion = try Version.parse("0.9.8").get()
XCTAssert(
versionReq.matches(version: version)
)
XCTAssertFalse(
versionReq.matches(version: lowerVersion)
)
*
运算符匹配任何版本
let versionReq = try VersionReq.parse("*").get()
let otherVersionReq = VersionReq.STAR
XCTAssertEqual(versionReq, otherVersionReq)
let version = Version(major: 1, minor: 50, patch: 69)
// Will always match
XCTAssert(versionReq.matches(version: version))
你也可以定义范围
let versionReq = try VersionReq.parse(">=1.2.3, <1.8").get()
let versionIn = try Version.parse("1.6.3").get()
let versionOut = try Version.parse("1.8.0").get()
XCTAssert(versionReq.matches(version: versionIn))
XCTAssertFalse(versionReq.matches(version: versionOut))
该包目前支持 *macOS*、*iOS* 和 *iOS Simulator*。
如果你使用 swiftc
编译你的程序,则可能支持 *Linux*。更多信息可以在 Swift Bridge
文档中找到。 在这种情况下,它将归结为复制 generated
文件夹中的文件(在构建之后)和复制 Semver
包中的 semver.swift
文件到你的项目中(并删除导入语句,除了 Foundation)。 然后也复制使用 cargo build --target {linux-target}
获得的静态库。 之后,按照 Swift Bridge 文档使用 swiftc
编译你的程序。 如果你需要 Linux 支持,请随时打开一个 issue,我将指导你完成整个过程并编写更详尽的文档。
尚未测试对其他 Apple 平台的支持,但我们可能需要将 Rust 编译到这些平台,但目前还没有对其他 Apple 平台的官方支持。
此目录包含 Rust 源文件,这些文件使用 swift-bridge
将 Rust semver
包桥接到 Swift。
这是由 Swift Bridge 生成的包。
这是进一步改进为 Swift 生成的包的包,提供了一个更友好的公共 API。
克隆此仓库
git clone https://github.com/jomy10/SemverSwift
要从 Rust 源文件创建一个 Swift 包,你需要安装 swift-bridge-cli
cargo install -f swift-bridge-cli
要为 *macOS*、*iOS* 和 *iOS Simulator* 构建项目,请运行以下命令
如果你使用 bash 或任何其他 shell 而不是 zsh,你可以在 build.sh
文件的顶部更改解释器。
如果你希望在其他位置构建 SwiftBridge
包,请先进行更改(默认是克隆仓库的上一层文件夹)
cd SemverRustBridge
./build.sh RELEASE
这将构建 SemverBridge
包。 在此克隆仓库的 Package.swift
中,更改依赖项以指向此生成的文件。
要为 *macOS* 构建调试版本,请运行
./build.sh
# or
./build.sh DEBUG
要运行测试
swift test
本项目将遵循 semver 的更新。 当前版本是 1.0.6
。
许多功能目前尚未实现,并计划尽快实现(欢迎提供帮助)。
BuildMetadata
参见 CONTRIBUTING.md。
此包根据 *Apache 2.0* 和 *MIT* 双重许可获得许可,就像原始 crate 一样。