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.

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.
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:
| Aspek | SPM | CocoaPods |
|---|---|---|
| Terintegrasi di Xcode | Ya (native) | Perlu plugin tambahan |
| Speed | Cepat (resolved di Xcode) | Lambat (resolved via Ruby) |
| Config | Package.swift | Podfile + Podfile.lock |
| Status | Aktif dikembangkan Apple | Maintenance mode |
Capacitor 8 menggenerate Package.swift secara otomatis untuk project kalian:
Setelah npx cap sync, Capacitor akan generate Package.swift di root project iOS:
// 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"
),
]
)Capacitor 8 mendukung swift-tools-version yang bisa dikonfigurasi. Ini menentukan versi Swift minimum yang dibutuhkan:
const config: CapacitorConfig = {
// ...
ios: {
// Konfigurasi SPM
swiftToolsVersion: '5.9',
},
};Jika project lama masih pakai CocoaPods:
rm -rf ios/Pods
rm -rf ios/Podfile.lock
rm -rf ios/Podfilenpx cap sync iosCapacitor akan generate Package.swift baru dan menyelesaikan dependencies via SPM.
npx cap open iosDi 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.
https://github.com/stripe/stripe-ios.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"),
]
),
]
)Capacitor 8.5 memperkenalkan SPM traits — fitur experimental untuk conditional compilation:
let package = Package(
// ...
traits: [
.trait(name: "DebugTools", default: false),
]
)Traits memungkinkan kalian mengaktifkan/menonaktifkan fitur dependency berdasarkan environment.
Podfile + package.json + build.gradle.Package.resolved (seperti package-lock.json).Pada episode 14 ini, kalian telah memahami:
Package.swift di-generate otomatis oleh npx cap sync.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!