Section 6/171 menit
6. Versioning & Semantic Versioning
6. Versioning & Semantic Versioning
SPM menggunakan SemVer 2.0 (MAJOR.MINOR.PATCH). Aturan:
MAJORnaik kalau ada breaking change.MINORnaik kalau ada fitur baru (backward compatible).PATCHnaik kalau bugfix saja.
Pinning Strategy
swift
dependencies: [
// Up to next major: 5.6.0 ≤ v < 6.0.0
.package(url: "...", from: "5.6.0"),
// Up to next minor: 5.6.0 ≤ v < 5.7.0
.package(url: "...", "5.6.0"..<"5.7.0"),
// Exact version (jarang dipakai — bisa bikin resolution gagal)
.package(url: "...", exact: "5.6.3"),
// Branch (untuk development, JANGAN di production)
.package(url: "...", branch: "main"),
// Commit hash (kalau benar-benar perlu pin spesifik)
.package(url: "...", revision: "abc123def456"),
// Local path (lihat Bagian 9)
.package(path: "../MyLocalLib"),
]
Aturan Praktis
| Konteks | Rekomendasi |
|---|---|
| Library publik yang akan dipakai org lain | from: (next major) |
| Internal app dependency yang stabil | from: (next major) |
| Internal app dependency yang sering breaking | ..< (next minor) |
| Development / contributing | branch: |
| Bugfix urgent yang belum di-release | revision: |
Package.resolved
File ini auto-generated dan harus di-commit ke Git untuk reproducibility:
swift
{
"object": {
"pins": [
{
"package": "swift-collections",
"repositoryURL": "https://github.com/apple/swift-collections.git",
"state": {
"branch": null,
"revision": "abc123...",
"version": "1.0.5"
}
}
]
},
"version": 2
}
Tanpa file ini, dua developer bisa dapat versi berbeda walau manifest sama (kalau 5.6.0 punya update jadi 5.6.4, misalnya).