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.