Belajar Capacitorjs - Swift Package Manager & Dependency Management
Episode 14 of 28

Belajar Capacitorjs - Swift Package Manager & Dependency Management

Adopsi Swift Package Manager (SPM) sebagai package manager iOS di Capacitor 8, generated `Package.swift`, traits & swift-tools-version config, migrasi dari CocoaPods legacy, serta praktik menambah SDK iOS pihak ketiga via SPM.

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

Setelah di episode 13 kita mengkustomisasi proyek native langsung, pada episode ini kita membahas Swift Package Manager (SPM) — package manager modern untuk ekosistem Apple yang kini menjadi pendekatan utama di Capacitor 8. SPM menggantikan CocoaPods yang sudah legacy.

Mengapa SPM penting? Karena Ionic/Capacitor team secara resmi mengadopsi SPM sebagai package manager default di Capacitor 8. CocoaPods masih didukung tetapi dianggap legacy. Memahami SPM akan mempersiapkan kalian untuk masa depan Capacitor, termasuk Capacitor 9 yang berjalan.

Apa Itu SPM?

Swift Package Manager adalah tool dependency management bawaan Apple. Ia terintegrasi langsung di Xcode (sejak Xcode 11) dan tidak membutuhkan tool tambahan seperti CocoaPods.

Keunggulan SPM vs CocoaPods:

AspekSPMCocoaPods
Terintegrasi di XcodeYa (native)Perlu plugin tambahan
SpeedCepat (resolved di Xcode)Lambat (resolved via Ruby)
ConfigPackage.swiftPodfile + Podfile.lock
StatusAktif dikembangkan AppleMaintenance mode

SPM di Capacitor 8

Capacitor 8 menggenerate Package.swift secara otomatis untuk project kalian:

100%

Generated Package.swift

Setelah npx cap sync, Capacitor akan generate Package.swift di root project iOS:

Package.swift (auto-generated)
// swift-tools-version: 5.9
import PackageDescription
 
let package = Package(
    name: "App",
    platforms: [.iOS(.v13)],
    products: [
        .library(name: "App", targets: ["App"]),
    ],
    dependencies: [
        // Dependencies dari plugin yang terinstall
    ],
    targets: [
        .target(
            name: "App",
            dependencies: [],
            path: "App/App"
        ),
    ]
)

Konfigurasi swift-tools-version

Capacitor 8 mendukung swift-tools-version yang bisa dikonfigurasi. Ini menentukan versi Swift minimum yang dibutuhkan:

capacitor.config.ts - SPM config
const config: CapacitorConfig = {
  // ...
  ios: {
    // Konfigurasi SPM
    swiftToolsVersion: '5.9',
  },
};

Migrasi dari CocoaPods

Jika project lama masih pakai CocoaPods:

Langkah 1: Hapus CocoaPods

Hapus CocoaPods artifacts
rm -rf ios/Pods
rm -rf ios/Podfile.lock
rm -rf ios/Podfile

Langkah 2: Sync Ulang

Sync ulang dengan SPM
npx cap sync ios

Capacitor akan generate Package.swift baru dan menyelesaikan dependencies via SPM.

Langkah 3: Buka di Xcode

Buka project di Xcode
npx cap open ios

Di Xcode, resolve packages: File → Packages → Resolve Package Versions.

Warning

Pastikan semua plugin yang kalian pakai sudah mendukung SPM. Plugin yang sangat tua mungkin hanya mendukung CocoaPods. Cek dokumentasi masing-masing plugin sebelum migrasi.

Menambah SDK iOS via SPM

Melalui Xcode

  1. Buka project di Xcode.
  2. File → Add Package Dependencies...
  3. Masukkan URL repository: https://github.com/stripe/stripe-ios.
  4. Pilih version rule: "Up to Next Major Version".
  5. Add Package.

Melalui Package.swift

Tambah dependency via Package.swift
let package = Package(
    // ...
    dependencies: [
        .package(url: "https://github.com/stripe/stripe-ios.git", from: "20.0.0"),
    ],
    targets: [
        .target(
            name: "App",
            dependencies: [
                .product(name: "Stripe", package: "stripe-ios"),
            ]
        ),
    ]
)

Traits (Experimental)

Capacitor 8.5 memperkenalkan SPM traits — fitur experimental untuk conditional compilation:

Package.swift dengan traits
let package = Package(
    // ...
    traits: [
        .trait(name: "DebugTools", default: false),
    ]
)

Traits memungkinkan kalian mengaktifkan/menonaktifkan fitur dependency berdasarkan environment.

Kelebihan SPM untuk Tim

  • Satu config: tidak perlu Podfile + package.json + build.gradle.
  • Konsisten: resolved version disimpan di Package.resolved (seperti package-lock.json).
  • Cepat: resolved di Xcode, tidak butuh Ruby atau tool tambahan.
  • Aktif dikembangkan: Apple terus menambah fitur SPM.

Penutup

Pada episode 14 ini, kalian telah memahami:

  • SPM adalah package manager default di Capacitor 8, menggantikan CocoaPods.
  • Package.swift di-generate otomatis oleh npx cap sync.
  • Migrasi dari CocoaPods: hapus Podfile → sync ulang → resolve di Xcode.
  • Tambah SDK via Xcode atau Package.swift langsung.

Di episode 15 selanjutnya, kita akan membahas integrasi framework UI — Ionic Framework 8/9 untuk komponen mobile-grade, atau Tailwind/shadcn-style di React/Vue biasa, serta pola mobile UX seperti navigation stack, tabs, modals, dan pull-to-refresh. Sampai jumpa!

Belajar Capacitorjs - Swift Package Manager & Dependency Management | Belajar Capacitorjs