Section 7/221 menit
7. Modular Architecture untuk Build Speed
7. Modular Architecture untuk Build Speed
Mengapa Modularisasi Mempercepat Build
Dengan membagi app ke beberapa framework/package, Xcode bisa:
- Mengkompilasi modul secara paralel —
NetworkKitdanUIComponentsbisa dikompilasi bersamaan - Skip recompile modul yang tidak berubah — ubah
NetworkKit, Xcode tidak recompileUIComponents - Cache pre-compiled modules — modul stabil jarang dikompilasi ulang
Struktur Modular yang Efektif
swift
MyApp/
├── App/ # Main target — tipis, hanya composition root
├── Packages/
│ ├── NetworkKit/ # HTTP client, endpoints, models API
│ ├── UIComponents/ # Design system, reusable views
│ ├── CoreDomain/ # Business logic, use cases, entities
│ ├── DataLayer/ # Repository, persistence, caching
│ └── FeatureModules/
│ ├── HomeFeature/ # Feature-specific: hanya depend on Core + Network
│ ├── ProfileFeature/
│ └── CheckoutFeature/
└── Podfile / Package.swift
Package.swift untuk Local Package
swift
// Packages/NetworkKit/Package.swift
// Local package untuk modul Network
// swift-tools-version: 5.9
import PackageDescription
let package = Package(
name: "NetworkKit",
platforms: [.iOS(.v16)],
products: [
.library(name: "NetworkKit", targets: ["NetworkKit"]),
],
dependencies: [],
targets: [
.target(
name: "NetworkKit",
dependencies: [],
swiftSettings: [
.enableExperimentalFeature("StrictConcurrency"),
]
),
.testTarget(
name: "NetworkKitTests",
dependencies: ["NetworkKit"]
),
]
)
Aturan Dependency Antar Modul
Hindari circular dependency — ini akan membuat build graph rumit dan memperlambat semuanya.
swift
# ✓ Dependency yang baik (unidirectional)
MainApp → FeatureModules → CoreDomain → (tidak ada dependency internal)
MainApp → UIComponents → (tidak ada dependency internal)
MainApp → DataLayer → CoreDomain
# ❌ Circular dependency — akan error atau sangat lambat
CoreDomain → DataLayer → CoreDomain (SIRKULAR — hindari!)