From 656ddbc9517ba30b4f90b77755dd553ac8f834a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20M=C4=99drek?= Date: Sun, 13 Sep 2026 17:32:10 +0200 Subject: [PATCH] feat: add experimental support for SPM for RN 0.87+ projects --- .gitignore | 4 ++ .../Package.swift | 62 +++++++++++++++++++ .../ios/AvoidSoftInput.h | 4 +- .../ios/AvoidSoftInput.mm | 9 +++ .../react-native-avoid-softinput/package.json | 1 + 5 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 packages/react-native-avoid-softinput/Package.swift diff --git a/.gitignore b/.gitignore index 14ea9b4..443789d 100644 --- a/.gitignore +++ b/.gitignore @@ -68,3 +68,7 @@ android/keystores/debug.keystore packages/react-native-avoid-softinput/lib/ .npmrc + +# SPM +.build/ +.swiftpm/ diff --git a/packages/react-native-avoid-softinput/Package.swift b/packages/react-native-avoid-softinput/Package.swift new file mode 100644 index 0000000..f3eb803 --- /dev/null +++ b/packages/react-native-avoid-softinput/Package.swift @@ -0,0 +1,62 @@ +// swift-tools-version: 6.0 +import PackageDescription + +let package = Package( + name: "ReactNativeAvoidSoftinput", + platforms: [.iOS(.v15)], + products: [ + .library(name: "ReactNativeAvoidSoftinput", targets: ["ReactNativeAvoidSoftinput"]) + ], + dependencies: [ + .package(name: "ReactNative", path: "../../../../xcframeworks"), + .package(name: "React-GeneratedCode", path: "../../../ios"), + ], + targets: [ + .target( + name: "ReactNativeAvoidSoftinput", + dependencies: [ + .product(name: "ReactHeaders", package: "ReactNative"), + .product(name: "ReactNativeHeaders", package: "ReactNative"), + .product(name: "ReactNativeDependenciesHeaders", package: "ReactNative"), + .product(name: "ReactAppHeaders", package: "React-GeneratedCode"), + ], + path: ".", + sources: [ + "ios/AvoidSoftInput.h", + "ios/AvoidSoftInput.mm", + "ios/AvoidSoftInputAnimationHandler.h", + "ios/AvoidSoftInputAnimationHandler.mm", + "ios/AvoidSoftInputAnimator.h", + "ios/AvoidSoftInputAnimator.mm", + "ios/AvoidSoftInputConstants.h", + "ios/AvoidSoftInputConstants.mm", + "ios/AvoidSoftInputListener.h", + "ios/AvoidSoftInputListener.mm", + "ios/AvoidSoftInputManager.h", + "ios/AvoidSoftInputManager.mm", + "ios/AvoidSoftInputUtils.h", + "ios/AvoidSoftInputUtils.mm", + "ios/AvoidSoftInputViewComponentView.h", + "ios/AvoidSoftInputViewComponentView.mm", + "ios/RCTConvert+UIViewAnimationOptions.h", + "ios/RCTConvert+UIViewAnimationOptions.mm", + ], + publicHeadersPath: "ios", + cSettings: [ + .headerSearchPath("ios"), + .define("REACT_NATIVE_AVOID_SOFTINPUT_USING_SPM") + ], + cxxSettings: [ + .headerSearchPath("ios"), + .define("REACT_NATIVE_AVOID_SOFTINPUT_USING_SPM"), + .define("DEBUG", .when(configuration: .debug)), + .define("NDEBUG", .when(configuration: .release)) + ], + linkerSettings: [ + .linkedFramework("UIKit"), + .linkedFramework("Foundation") + ] + ) + ], + cxxLanguageStandard: .cxx20 +) diff --git a/packages/react-native-avoid-softinput/ios/AvoidSoftInput.h b/packages/react-native-avoid-softinput/ios/AvoidSoftInput.h index 53150ae..dea18b0 100644 --- a/packages/react-native-avoid-softinput/ios/AvoidSoftInput.h +++ b/packages/react-native-avoid-softinput/ios/AvoidSoftInput.h @@ -1,12 +1,10 @@ #import -#import "rnavoidsoftinput.h" - @class AvoidSoftInputConstants; @class AvoidSoftInputManager; @protocol AvoidSoftInputManagerDelegate; -@interface AvoidSoftInput : RCTEventEmitter +@interface AvoidSoftInput : RCTEventEmitter @property (nonatomic, readonly, strong) AvoidSoftInputManager *_Nonnull manager; diff --git a/packages/react-native-avoid-softinput/ios/AvoidSoftInput.mm b/packages/react-native-avoid-softinput/ios/AvoidSoftInput.mm index 34956e9..b8e06de 100644 --- a/packages/react-native-avoid-softinput/ios/AvoidSoftInput.mm +++ b/packages/react-native-avoid-softinput/ios/AvoidSoftInput.mm @@ -3,6 +3,15 @@ #import "AvoidSoftInputManager.h" #import "RCTConvert+UIViewAnimationOptions.h" +#ifdef REACT_NATIVE_AVOID_SOFTINPUT_USING_SPM +#import +#else +#import "rnavoidsoftinput.h" +#endif + +@interface AvoidSoftInput () +@end + @interface AvoidSoftInput () @end diff --git a/packages/react-native-avoid-softinput/package.json b/packages/react-native-avoid-softinput/package.json index bf2a64b..1cec141 100644 --- a/packages/react-native-avoid-softinput/package.json +++ b/packages/react-native-avoid-softinput/package.json @@ -36,6 +36,7 @@ "android", "ios", "cpp", + "Package.swift", "ReactNativeAvoidSoftinput.podspec", "jest", "LICENSE",