Section 12/181 menit
12. Monorepo & Local Package Development
12. Monorepo & Local Package Development
Struktur Monorepo SPM
swift
MyCompany/
├── Package.swift ← root package (opsional)
├── Apps/
│ ├── MainApp/
│ │ ├── MainApp.xcodeproj
│ │ └── Package.swift
│ └── WidgetExtension/
│ └── Package.swift
├── Packages/
│ ├── CoreDomain/
│ │ └── Package.swift
│ ├── NetworkLayer/
│ │ └── Package.swift
│ ├── UIComponents/
│ │ └── Package.swift
│ └── Analytics/
│ └── Package.swift
└── Tools/
├── CodeGenPlugin/
│ └── Package.swift
└── LintingPlugin/
└── Package.swift
Local Package Dependency
swift
// Apps/MainApp/Package.swift — menggunakan local packages
import PackageDescription
let package = Package(
name: "MainApp",
dependencies: [
// Local packages — path relatif dari file Package.swift ini
.package(path: "../../Packages/CoreDomain"),
.package(path: "../../Packages/NetworkLayer"),
.package(path: "../../Packages/UIComponents"),
// Remote packages
.package(url: "https://github.com/apple/swift-collections", from: "1.0.0")
],
targets: [
.target(
name: "MainApp",
dependencies: [
.product(name: "CoreDomain", package: "CoreDomain"),
.product(name: "NetworkLayer", package: "NetworkLayer"),
.product(name: "UIComponents", package: "UIComponents")
]
)
]
)
Edit Mode untuk Development Lokal
swift
# Clone dan edit package secara lokal sementara
# (tanpa mengubah Package.swift utama)
swift package edit swift-collections
# Sekarang swift-collections ada di ./checkouts/swift-collections/
# Edit file di sana, perubahan langsung terlihat
# Selesai editing — kembali ke versi dari Package.resolved
swift package unedit swift-collections
Workspace Pattern di Xcode
Untuk development dengan local packages di Xcode, buat .xcworkspace:
swift
MyProject.xcworkspace/
├── contents.xcworkspacedata
└── ...
# contents.xcworkspacedata
<?xml version="1.0" encoding="UTF-8"?>
<Workspace version="1.0">
<FileRef location="group:MyApp/MyApp.xcodeproj"/>
<FileRef location="group:../Packages/CoreDomain/Package.swift"/>
<FileRef location="group:../Packages/UIComponents/Package.swift"/>
</Workspace>
Dengan workspace, kamu bisa edit package dan app dalam satu sesi Xcode, dengan full autocomplete dan refactoring support.