Section 8/171 menit

8. Binary Targets & XCFramework

8. Binary Targets & XCFramework

Kadang kamu butuh distribute pre-compiled framework (closed source, atau library C++ yang susah di-build dari source). SPM mendukung via binaryTarget.

Local Binary Target

swift
.binaryTarget(
    name: "ProprietaryAnalytics",
    path: "Frameworks/ProprietaryAnalytics.xcframework"
)

Remote Binary Target

swift
.binaryTarget(
    name: "ProprietaryAnalytics",
    url: "https://cdn.company.com/releases/1.2.3/ProprietaryAnalytics.xcframework.zip",
    checksum: "abc123def456..."
)

Cara generate checksum:

swift
swift package compute-checksum ProprietaryAnalytics.xcframework.zip

Membuat XCFramework

swift
# Build untuk iOS device
xcodebuild archive \
    -scheme MyLib \
    -destination "generic/platform=iOS" \
    -archivePath "build/MyLib-iOS" \
    SKIP_INSTALL=NO \
    BUILD_LIBRARY_FOR_DISTRIBUTION=YES

# Build untuk iOS simulator
xcodebuild archive \
    -scheme MyLib \
    -destination "generic/platform=iOS Simulator" \
    -archivePath "build/MyLib-iOS-Simulator" \
    SKIP_INSTALL=NO \
    BUILD_LIBRARY_FOR_DISTRIBUTION=YES

# Gabungkan jadi XCFramework
xcodebuild -create-xcframework \
    -framework "build/MyLib-iOS.xcarchive/Products/Library/Frameworks/MyLib.framework" \
    -framework "build/MyLib-iOS-Simulator.xcarchive/Products/Library/Frameworks/MyLib.framework" \
    -output "MyLib.xcframework"

Catatan penting: BUILD_LIBRARY_FOR_DISTRIBUTION=YES memunculkan stable ABI (module interface .swiftinterface). Tanpa ini, XCFramework hanya bisa dipakai dengan Swift version yang persis sama.