Section 11/181 menit

11. Version Pinning & Package.resolved Internals

11. Version Pinning & Package.resolved Internals

Anatomi Package.resolved

swift
// Package.resolved — format v3 (Swift 5.8+)
{
  "originHash" : "abc123...",
  "pins" : [
    {
      "identity" : "swift-collections",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/apple/swift-collections",
      "state" : {
        "revision" : "937e904258d22af6e447a0b72c0bc67583ef64a3",
        "version" : "1.0.6"
      }
    },
    {
      "identity" : "my-private-lib",
      "kind" : "registry",
      "location" : "https://registry.example.com",
      "state" : {
        "checksum" : "e3b0c44...",
        "version" : "2.1.0"
      }
    }
  ],
  "version" : 3
}

Aturan Package.resolved:

  • Selalu commit Package.resolved ke repository — ini memastikan semua developer dan CI build dengan versi yang sama
  • Jangan edit manual — gunakan swift package update atau swift package resolve
  • Package.resolved di-update otomatis ketika menjalankan swift package update atau menambah dependency baru

Operasi Versi

swift
# Resolve (download sesuai Package.resolved jika ada)
swift package resolve

# Update semua package ke versi terbaru yang kompatibel
swift package update

# Update package tertentu saja
swift package update swift-collections

# Lihat dependency graph
swift package show-dependencies

# Lihat dependency graph sebagai JSON
swift package show-dependencies --format json

# Audit dependency (mencari known vulnerabilities)
swift package audit