This package provides the Swift protocol compatible with Semantic Versioning (2.0.0).
-
By conforming to the
SemanticVersioning
protocol, it can be represented as a type that behaves as a version of software compliant with Semantic Versioning (2.0.0).import SemanticVersioning // conforms to SemanticVersioning struct MyAppVersion: SemanticVersioning { let major: Int let minor: Int let patch: Int let preRelease: PreRelease? let buildMetaData: String? }
-
Can be initialized from String literals.
let appVersion: MyAppVersion = "1.1.1" // String literals can also contain pre-release and build metadata. // let appVersion: MyAppVersion = "1.1.1-alpha" // let appVersion: MyAppVersion = "1.1.1-alpha build.1"
-
Comparable and Equatable.
if appVersion > "1.0.0" { // Some operation when appVersion is greater than 1.0.0 } else if appVersion == "0.1.0" { // Some operation when appVersion is 0.1.0 }
-
Increment version number.
print(appVersion) // -> 1.1.1 print(appVersion.increment(.major)) // -> 2.0.0 print(appVersion.increment(.minor)) // -> 1.2.0 print(appVersion.increment(.patch)) // -> 1.1.2
-
Validate version format with macro.
import SemanticVersioningMacro let validVersionString = #semanticVersioning("1.0.0") // Valid format! let invalidVersionString = #semanticVersioning("1.0.a") // Invalid format! Compile error!
- Swift 5.9 or later
- macOS 10.15 or iOS 12.0 or watchOS 4.0 or tvOS 1.0
- Apple Platforms
- Linux
-
Add SemanticVersioning to your
Package.swift
dependencies:.package(url: "https://github.com/taji-taji/SemanticVersioning.git", from: "1.0.0")
-
Add SemanticVersioning to your dependencies of
SemanticVersioning
target:.product(name: "SemanticVersioning", package: "SemanticVersioning"), // If you want to use macro, add `SemanticVersioningMacro`. .product(name: "SemanticVersioningMacro", package: "SemanticVersioning"),