Section 4/181 menit
4. Package.swift Lanjutan — Build Settings & Swift Settings
4. Package.swift Lanjutan — Build Settings & Swift Settings
Swift Settings per Target
swift
// Package.swift — Swift settings lanjutan
// swift-tools-version: 5.9
import PackageDescription
let package = Package(
name: "AdvancedLib",
products: [
.library(name: "AdvancedLib", targets: ["AdvancedLib"])
],
targets: [
.target(
name: "AdvancedLib",
swiftSettings: [
// Enable upcoming Swift 6 features secara bertahap
.enableUpcomingFeature("BareSlashRegexLiterals"),
.enableUpcomingFeature("ConciseMagicFile"),
.enableUpcomingFeature("ForwardTrailingClosures"),
.enableUpcomingFeature("ImportObjcForwardDeclarations"),
.enableUpcomingFeature("DisableOutwardActorInference"),
// Enable experimental features (gunakan hati-hati)
.enableExperimentalFeature("StrictConcurrency"),
// Define flag untuk conditional compilation
.define("FEATURE_ENABLED", .when(configuration: .debug)),
.define("ANALYTICS_ENABLED", .when(platforms: [.iOS, .macOS])),
// Unsafe flags (tidak kompatibel dengan library evolution)
.unsafeFlags(["-Xfrontend", "-enable-experimental-string-processing"],
.when(configuration: .debug))
]
),
.target(
name: "NetworkCore",
cSettings: [
// Untuk target yang mengandung C code
.headerSearchPath("include"),
.define("DEBUG_BUILD", .when(configuration: .debug)),
.unsafeFlags(["-Wall", "-Wextra"])
],
linkerSettings: [
// Link system frameworks
.linkedFramework("CoreBluetooth", .when(platforms: [.iOS])),
.linkedLibrary("z"), // zlib
.unsafeFlags(["-ObjC", "-all_load"])
]
)
]
)
Library Evolution & ABI Stability
swift
// Package.swift — mengaktifkan library evolution untuk distribusi binary
.target(
name: "StableLib",
swiftSettings: [
// Aktifkan untuk library yang akan didistribusi sebagai binary
// Memungkinkan binary compatibility antara versi minor
.unsafeFlags(["-enable-library-evolution"])
]
)
Library evolution penting untuk XCFramework distribution — tanpa ini, konsumen library harus rebuild binary setiap kali Swift versi berubah.