Section 4/171 menit
4. Struktur Package & Package.swift
4. Struktur Package & Package.swift
Layout Standar
swift
MyPackage/
├── Package.swift # Manifest
├── Package.resolved # Lock file (auto-generated)
├── README.md
├── Sources/
│ ├── MyLib/ # Source target
│ │ ├── Public.swift
│ │ └── Internal.swift
│ └── MyExecutable/ # Executable target
│ └── main.swift
├── Tests/
│ └── MyLibTests/
│ └── MyLibTests.swift
└── .build/ # Build artifacts (gitignored)
SPM mengandalkan convention: target bernama MyLib otomatis melihat ke Sources/MyLib/. Bisa dioverride via parameter path:.
Manifest Minimal
swift
// swift-tools-version:5.10
// Komentar di atas: WAJIB di baris pertama. Menentukan versi tools minimum.
import PackageDescription
let package = Package(
name: "MyLib",
products: [
.library(name: "MyLib", targets: ["MyLib"]),
],
targets: [
.target(name: "MyLib"),
.testTarget(name: "MyLibTests", dependencies: ["MyLib"]),
]
)
Komponen kunci:
| Field | Fungsi |
|---|---|
swift-tools-version |
Versi minimum SPM / Swift toolchain |
name |
Identifier package (bukan path) |
platforms |
Min OS version per platform |
products |
API publik (library/executable yang bisa di-depend) |
dependencies |
Package eksternal yang dibutuhkan |
targets |
Unit kompilasi internal |
Manifest dengan Platform & Dependency
swift
// swift-tools-version:5.10
import PackageDescription
let package = Package(
name: "MyApp",
platforms: [
.iOS(.v16),
.macOS(.v13),
],
products: [
.library(name: "AppCore", targets: ["AppCore"]),
],
dependencies: [
.package(url: "https://github.com/apple/swift-collections.git", from: "1.0.0"),
.package(url: "https://github.com/pointfreeco/swift-snapshot-testing.git", from: "1.15.0"),
],
targets: [
.target(
name: "AppCore",
dependencies: [
.product(name: "Collections", package: "swift-collections"),
]
),
.testTarget(
name: "AppCoreTests",
dependencies: [
"AppCore",
.product(name: "SnapshotTesting", package: "swift-snapshot-testing"),
]
),
]
)