Section 5/151 menit
5. Perbandingan Feature-by-Feature
5. Perbandingan Feature-by-Feature
Dukungan Binary Distribution
swift
# CocoaPods: binary via vendored_frameworks di podspec
spec.vendored_frameworks = 'Frameworks/MySDK.xcframework'
spec.vendored_libraries = 'Libraries/libMyLib.a'
# SPM: binary target dengan .xcframework
.binaryTarget(
name: "MySDK",
url: "https://cdn.example.com/MySDK-1.0.0.xcframework.zip",
checksum: "sha256_checksum_here"
)
# Atau local binary
.binaryTarget(
name: "MySDK",
path: "Frameworks/MySDK.xcframework"
)
Resource Bundling
swift
# CocoaPods: resource_bundles di podspec
spec.resource_bundles = {
'MyLibraryAssets' => ['Sources/Assets/**/*.{xcassets,json,lottie}']
}
# Akses di Swift:
let bundle = Bundle(for: MyClass.self)
// atau
let bundle = Bundle(identifier: "org.cocoapods.MyLibraryAssets")
let image = UIImage(named: "icon", in: bundle, compatibleWith: nil)
swift
// SPM: resources di Package.swift
.target(
name: "MyLibrary",
resources: [.process("Resources")]
)
// Akses di Swift (type-safe dengan Bundle.module):
let bundle = Bundle.module
let image = UIImage(named: "icon", in: bundle, compatibleWith: nil)
Script/Plugin Hooks
swift
# CocoaPods: post_install hook di Podfile
post_install do |installer|
installer.pods_project.targets.each do |target|
# Modify build settings
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '5.0'
end
end
end
swift
// SPM: Build Tool Plugin
// Sources/MyPlugin/MyBuildToolPlugin.swift
import PackagePlugin
@main
struct MyBuildToolPlugin: BuildToolPlugin {
func createBuildCommands(context: PluginContext, target: Target) async throws -> [Command] {
let inputFiles = target.directory.appending(subpath: "Resources")
let outputFile = context.pluginWorkDirectory.appending(subpath: "GeneratedResources.swift")
return [
.buildCommand(
displayName: "Generate Resource Enums",
executable: try context.tool(named: "ResourceGen").path,
arguments: [inputFiles.string, outputFile.string],
inputFiles: [inputFiles],
outputFiles: [outputFile]
)
]
}
}