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.