Section 15/151 menit
15. Ringkasan & Decision Guide
15. Ringkasan & Decision Guide
Pilih Berdasarkan Situasi
| Situasi | Rekomendasi |
|---|---|
| Project baru, semua library tersedia di SPM | SPM only |
| Library kritis hanya ada di CocoaPods | CocoaPods atau hybrid |
| Migrasi dari CocoaPods ke SPM bertahap | Hybrid (sementara) |
| Team tidak punya Ruby setup | SPM only |
Butuh post_install hooks untuk banyak pods |
CocoaPods (fitur ini tidak ada di SPM) |
| Butuh Swift Macro atau Build Tool Plugin | SPM (mandatory) |
| Firebase dengan semua modul | CocoaPods atau SPM (pilih satu, jangan hybrid untuk Firebase) |
| Library internal untuk distribusi ke tim lain | SPM (lebih mudah setup private registry) |
| Binary-only SDK dari vendor | Binary target di SPM atau pod vendored_frameworks |
Cache Key Formula
swift
CocoaPods:
pods-{runner_os}-xcode{xcode_version}-{hash(Podfile.lock)}
SPM:
spm-{runner_os}-xcode{xcode_version}-{hash(Package.resolved)}
Fallback (restore-keys):
pods-{runner_os}-xcode{xcode_version}-
pods-{runner_os}-
Checklist Project Sehat
swift
Dependency Files:
□ Podfile.lock ada dan di-commit
□ Package.resolved ada dan di-commit
□ Pods/ di .gitignore
□ Tidak ada library yang sama di CocoaPods DAN SPM
CI Setup:
□ Cache untuk Pods/ dengan key berdasarkan Podfile.lock
□ Cache untuk SourcePackages dengan key berdasarkan Package.resolved
□ `pod install --no-repo-update` (lebih cepat di CI)
□ `xcodebuild -resolvePackageDependencies` sebelum build
Hybrid Project:
□ Semua developer buka .xcworkspace (BUKAN .xcodeproj)
□ use_frameworks! :linkage => :static di Podfile untuk hindari konflik
□ `check-dependency-overlap.sh` di pre-push hook atau CI
□ DEPENDENCIES.md mendokumentasikan mana yang CocoaPods, mana yang SPM
Untuk project baru di 2025, rekomendasinya jelas: mulai dengan SPM only. CocoaPods hanya dipertahankan jika ada library kritis yang benar-benar tidak tersedia di SPM — dan bahkan dalam kasus itu, evaluasi ulang setiap beberapa bulan karena mayoritas library populer kini sudah support SPM.