From 73a463422160e2b0ec74b0a5952cfcde67f989e6 Mon Sep 17 00:00:00 2001 From: Christian Falch Date: Wed, 28 Oct 2026 15:06:04 +0100 Subject: [PATCH] feat(ios): add Swift Package Manager support --- package/Package.swift | 61 +++++++++++++++++++ package/include/ReactNativeSlider/RNCSlider.h | 1 + .../RNCSliderComponentView.h | 1 + .../ReactNativeSlider/RNCSliderManager.h | 1 + package/package.json | 3 + .../spm-headers/RCTFabricComponentsPlugins.h | 1 + .../RCTImagePrimitivesConversions.h | 1 + 7 files changed, 69 insertions(+) create mode 100644 package/Package.swift create mode 100644 package/include/ReactNativeSlider/RNCSlider.h create mode 100644 package/include/ReactNativeSlider/RNCSliderComponentView.h create mode 100644 package/include/ReactNativeSlider/RNCSliderManager.h create mode 100644 package/spm-headers/RCTFabricComponentsPlugins.h create mode 100644 package/spm-headers/RCTImagePrimitivesConversions.h diff --git a/package/Package.swift b/package/Package.swift new file mode 100644 index 00000000..4abc9269 --- /dev/null +++ b/package/Package.swift @@ -0,0 +1,61 @@ +// swift-tools-version: 6.0 + +import Foundation +import PackageDescription + +// React Native autolinks this package under +// /ios/build/generated/autolinking/libs/ReactNativeSlider. +// Exclude unused root entries in both checkouts and npm installations so +// SwiftPM does not scan examples, dependencies, or metadata for resources. +let usedRootEntries: Set = ["ios", "common", "include", "spm-headers", "Package.swift"] +let unusedRootEntries = try! FileManager.default.contentsOfDirectory(atPath: Context.packageDirectory) + .filter { !usedRootEntries.contains($0) } + .sorted() + +let package = Package( + name: "ReactNativeSlider", + platforms: [.iOS("15.1")], + products: [ + .library(name: "ReactNativeSlider", targets: ["ReactNativeSlider"]), + ], + dependencies: [ + .package(name: "ReactNative", path: "../../../../xcframeworks"), + .package(name: "React-GeneratedCode", path: "../../../ios"), + ], + targets: [ + .target( + name: "ReactNativeSlider", + dependencies: [ + .product(name: "ReactHeaders", package: "ReactNative"), + .product(name: "ReactNativeHeaders", package: "ReactNative"), + .product(name: "ReactNativeDependenciesHeaders", package: "ReactNative"), + .product(name: "ReactAppHeaders", package: "React-GeneratedCode"), + ], + path: ".", + exclude: ["ios/RNCSlider.xcodeproj"] + unusedRootEntries, + sources: ["ios", "common/cpp"], + // Keep the public header tree separate from the legacy Xcode project. + publicHeadersPath: "include", + cSettings: [ + .define("RCT_NEW_ARCH_ENABLED", to: "1"), + .headerSearchPath("ios"), + .headerSearchPath("common/cpp"), + .headerSearchPath("spm-headers"), + ], + cxxSettings: [ + .define("RCT_NEW_ARCH_ENABLED", to: "1"), + .headerSearchPath("ios"), + .headerSearchPath("common/cpp"), + .headerSearchPath("spm-headers"), + .define("DEBUG", .when(configuration: .debug)), + .define("NDEBUG", .when(configuration: .release)), + ], + linkerSettings: [ + .linkedFramework("UIKit"), + .linkedFramework("Foundation"), + .linkedFramework("CoreGraphics"), + ] + ), + ], + cxxLanguageStandard: .cxx20 +) diff --git a/package/include/ReactNativeSlider/RNCSlider.h b/package/include/ReactNativeSlider/RNCSlider.h new file mode 100644 index 00000000..dec093da --- /dev/null +++ b/package/include/ReactNativeSlider/RNCSlider.h @@ -0,0 +1 @@ +#import "../../ios/RNCSlider.h" diff --git a/package/include/ReactNativeSlider/RNCSliderComponentView.h b/package/include/ReactNativeSlider/RNCSliderComponentView.h new file mode 100644 index 00000000..36ff9f12 --- /dev/null +++ b/package/include/ReactNativeSlider/RNCSliderComponentView.h @@ -0,0 +1 @@ +#import "../../ios/RNCSliderComponentView.h" diff --git a/package/include/ReactNativeSlider/RNCSliderManager.h b/package/include/ReactNativeSlider/RNCSliderManager.h new file mode 100644 index 00000000..49c752b2 --- /dev/null +++ b/package/include/ReactNativeSlider/RNCSliderManager.h @@ -0,0 +1 @@ +#import "../../ios/RNCSliderManager.h" diff --git a/package/package.json b/package/package.json index 87ad0ecb..134d8959 100644 --- a/package/package.json +++ b/package/package.json @@ -70,5 +70,8 @@ "android": { "javaPackageName": "com.reactnativecommunity.slider" } + }, + "swiftpmConfig": { + "name": "ReactNativeSlider" } } diff --git a/package/spm-headers/RCTFabricComponentsPlugins.h b/package/spm-headers/RCTFabricComponentsPlugins.h new file mode 100644 index 00000000..04d77508 --- /dev/null +++ b/package/spm-headers/RCTFabricComponentsPlugins.h @@ -0,0 +1 @@ +#import diff --git a/package/spm-headers/RCTImagePrimitivesConversions.h b/package/spm-headers/RCTImagePrimitivesConversions.h new file mode 100644 index 00000000..500618d8 --- /dev/null +++ b/package/spm-headers/RCTImagePrimitivesConversions.h @@ -0,0 +1 @@ +#import