Section 6/171 menit

6. Versioning & Semantic Versioning

6. Versioning & Semantic Versioning

SPM menggunakan SemVer 2.0 (MAJOR.MINOR.PATCH). Aturan:

  • MAJOR naik kalau ada breaking change.
  • MINOR naik kalau ada fitur baru (backward compatible).
  • PATCH naik 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).