From 612caf08e7878b0528d3c87abebb9acb47f67495 Mon Sep 17 00:00:00 2001 From: Mauro Antonio Sanz Date: Thu, 17 Sep 2026 15:21:00 -0300 Subject: [PATCH 1/2] feat: add Swift Package Manager support for iOS (#184) Flutter 3.44 makes Swift Package Manager the default package manager for Flutter apps, so plugins without a Package.swift risk build failures. - Move ios/Classes/*.swift to ios/splitio_ios/Sources/splitio_ios/ and add Package.swift, depending on the Split iOS SDK via SwiftPM (github.com/splitio/ios-client, >= 3.6.0 < 3.7.0) to mirror the podspec. - Delete the unreferenced Objective-C bridge SplitioPlugin.h/.m. The plugin registers through pluginClass SwiftSplitioPlugin, and SwiftPM does not allow mixed-language targets. - Update the podspec source_files to the new layout so CocoaPods keeps working, correct its stale version, and drop the obsolete i386 EXCLUDED_ARCHS workaround. - Raise the minimum iOS version to 12, matching the example apps and the support matrix already documented in the README. Co-Authored-By: Claude Opus 5 AI-Session-Id: 8888253a-4939-42e3-b127-1a3f91bebf49 AI-Tool: claude-code AI-Model: unknown --- splitio_ios/CHANGELOG.md | 4 +++ splitio_ios/ios/.gitignore | 7 ++++- splitio_ios/ios/Assets/.gitkeep | 0 splitio_ios/ios/Classes/SplitioPlugin.h | 4 --- splitio_ios/ios/Classes/SplitioPlugin.m | 15 ----------- splitio_ios/ios/splitio_ios.podspec | 9 +++---- splitio_ios/ios/splitio_ios/Package.swift | 26 +++++++++++++++++++ .../Sources/splitio_ios}/ArgumentParser.swift | 0 .../Sources/splitio_ios}/Constants.swift | 0 .../Sources/splitio_ios}/Extensions.swift | 0 .../SplitClientConfigHelper.swift | 0 .../splitio_ios}/SplitFactoryProvider.swift | 0 .../splitio_ios}/SplitMethodParser.swift | 0 .../Sources/splitio_ios}/SplitWrapper.swift | 0 .../splitio_ios}/SwiftSplitioPlugin.swift | 0 splitio_ios/pubspec.yaml | 2 +- 16 files changed, 41 insertions(+), 26 deletions(-) delete mode 100644 splitio_ios/ios/Assets/.gitkeep delete mode 100644 splitio_ios/ios/Classes/SplitioPlugin.h delete mode 100644 splitio_ios/ios/Classes/SplitioPlugin.m create mode 100644 splitio_ios/ios/splitio_ios/Package.swift rename splitio_ios/ios/{Classes => splitio_ios/Sources/splitio_ios}/ArgumentParser.swift (100%) rename splitio_ios/ios/{Classes => splitio_ios/Sources/splitio_ios}/Constants.swift (100%) rename splitio_ios/ios/{Classes => splitio_ios/Sources/splitio_ios}/Extensions.swift (100%) rename splitio_ios/ios/{Classes => splitio_ios/Sources/splitio_ios}/SplitClientConfigHelper.swift (100%) rename splitio_ios/ios/{Classes => splitio_ios/Sources/splitio_ios}/SplitFactoryProvider.swift (100%) rename splitio_ios/ios/{Classes => splitio_ios/Sources/splitio_ios}/SplitMethodParser.swift (100%) rename splitio_ios/ios/{Classes => splitio_ios/Sources/splitio_ios}/SplitWrapper.swift (100%) rename splitio_ios/ios/{Classes => splitio_ios/Sources/splitio_ios}/SwiftSplitioPlugin.swift (100%) diff --git a/splitio_ios/CHANGELOG.md b/splitio_ios/CHANGELOG.md index 6262687..745eab7 100644 --- a/splitio_ios/CHANGELOG.md +++ b/splitio_ios/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.2.0 (Sep 17, 2026) +* Added Swift Package Manager support, which becomes the default package manager for Flutter apps in Flutter 3.44. CocoaPods remains fully supported. +* Updated the minimum supported iOS version to 12. + # 1.1.0 (Jan 28, 2026) * Added new configuration for Fallback Treatments, which allows setting a treatment value and optional config to be returned in place of "control", either globally or by flag. Read more in our docs. * Updated iOS SDK to `3.6.0`. diff --git a/splitio_ios/ios/.gitignore b/splitio_ios/ios/.gitignore index 0c88507..82152f5 100644 --- a/splitio_ios/ios/.gitignore +++ b/splitio_ios/ios/.gitignore @@ -35,4 +35,9 @@ Icon? /Flutter/Generated.xcconfig /Flutter/ephemeral/ -/Flutter/flutter_export_environment.sh \ No newline at end of file +/Flutter/flutter_export_environment.sh + +# Swift Package Manager +.build/ +.swiftpm/ +Package.resolved diff --git a/splitio_ios/ios/Assets/.gitkeep b/splitio_ios/ios/Assets/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/splitio_ios/ios/Classes/SplitioPlugin.h b/splitio_ios/ios/Classes/SplitioPlugin.h deleted file mode 100644 index 032ad7e..0000000 --- a/splitio_ios/ios/Classes/SplitioPlugin.h +++ /dev/null @@ -1,4 +0,0 @@ -#import - -@interface SplitioPlugin : NSObject -@end diff --git a/splitio_ios/ios/Classes/SplitioPlugin.m b/splitio_ios/ios/Classes/SplitioPlugin.m deleted file mode 100644 index 0b18eab..0000000 --- a/splitio_ios/ios/Classes/SplitioPlugin.m +++ /dev/null @@ -1,15 +0,0 @@ -#import "SplitioPlugin.h" -#if __has_include() -#import -#else -// Support project import fallback if the generated compatibility header -// is not copied when this plugin is created as a library. -// https://forums.swift.org/t/swift-static-libraries-dont-copy-generated-objective-c-header/19816 -#import "splitio_ios-Swift.h" -#endif - -@implementation SplitioPlugin -+ (void)registerWithRegistrar:(NSObject*)registrar { - [SwiftSplitioPlugin registerWithRegistrar:registrar]; -} -@end diff --git a/splitio_ios/ios/splitio_ios.podspec b/splitio_ios/ios/splitio_ios.podspec index cdbf4e7..eea0993 100644 --- a/splitio_ios/ios/splitio_ios.podspec +++ b/splitio_ios/ios/splitio_ios.podspec @@ -4,7 +4,7 @@ # Pod::Spec.new do |s| s.name = 'splitio_ios' - s.version = '0.9.0' + s.version = '1.2.0' s.summary = 'split.io official Flutter plugin.' s.description = <<-DESC split.io official Flutter plugin. @@ -13,12 +13,11 @@ split.io official Flutter plugin. s.license = { :file => '../LICENSE' } s.author = { 'Split' => 'support@split.io' } s.source = { :path => '.' } - s.source_files = 'Classes/**/*' + s.source_files = 'splitio_ios/Sources/splitio_ios/**/*.swift' s.dependency 'Flutter' s.dependency 'Split', '~> 3.6.0' - s.platform = :ios, '9.0' + s.platform = :ios, '12.0' - # Flutter.framework does not contain a i386 slice. - s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } + s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } s.swift_version = '5.0' end diff --git a/splitio_ios/ios/splitio_ios/Package.swift b/splitio_ios/ios/splitio_ios/Package.swift new file mode 100644 index 0000000..b29523f --- /dev/null +++ b/splitio_ios/ios/splitio_ios/Package.swift @@ -0,0 +1,26 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "splitio_ios", + platforms: [ + .iOS("12.0") + ], + products: [ + .library(name: "splitio-ios", targets: ["splitio_ios"]) + ], + dependencies: [ + // Mirrors the `~> 3.6.0` constraint in splitio_ios.podspec. + .package(url: "https://github.com/splitio/ios-client", "3.6.0" ..< "3.7.0") + ], + targets: [ + .target( + name: "splitio_ios", + dependencies: [ + .product(name: "Split", package: "ios-client") + ] + ) + ] +) diff --git a/splitio_ios/ios/Classes/ArgumentParser.swift b/splitio_ios/ios/splitio_ios/Sources/splitio_ios/ArgumentParser.swift similarity index 100% rename from splitio_ios/ios/Classes/ArgumentParser.swift rename to splitio_ios/ios/splitio_ios/Sources/splitio_ios/ArgumentParser.swift diff --git a/splitio_ios/ios/Classes/Constants.swift b/splitio_ios/ios/splitio_ios/Sources/splitio_ios/Constants.swift similarity index 100% rename from splitio_ios/ios/Classes/Constants.swift rename to splitio_ios/ios/splitio_ios/Sources/splitio_ios/Constants.swift diff --git a/splitio_ios/ios/Classes/Extensions.swift b/splitio_ios/ios/splitio_ios/Sources/splitio_ios/Extensions.swift similarity index 100% rename from splitio_ios/ios/Classes/Extensions.swift rename to splitio_ios/ios/splitio_ios/Sources/splitio_ios/Extensions.swift diff --git a/splitio_ios/ios/Classes/SplitClientConfigHelper.swift b/splitio_ios/ios/splitio_ios/Sources/splitio_ios/SplitClientConfigHelper.swift similarity index 100% rename from splitio_ios/ios/Classes/SplitClientConfigHelper.swift rename to splitio_ios/ios/splitio_ios/Sources/splitio_ios/SplitClientConfigHelper.swift diff --git a/splitio_ios/ios/Classes/SplitFactoryProvider.swift b/splitio_ios/ios/splitio_ios/Sources/splitio_ios/SplitFactoryProvider.swift similarity index 100% rename from splitio_ios/ios/Classes/SplitFactoryProvider.swift rename to splitio_ios/ios/splitio_ios/Sources/splitio_ios/SplitFactoryProvider.swift diff --git a/splitio_ios/ios/Classes/SplitMethodParser.swift b/splitio_ios/ios/splitio_ios/Sources/splitio_ios/SplitMethodParser.swift similarity index 100% rename from splitio_ios/ios/Classes/SplitMethodParser.swift rename to splitio_ios/ios/splitio_ios/Sources/splitio_ios/SplitMethodParser.swift diff --git a/splitio_ios/ios/Classes/SplitWrapper.swift b/splitio_ios/ios/splitio_ios/Sources/splitio_ios/SplitWrapper.swift similarity index 100% rename from splitio_ios/ios/Classes/SplitWrapper.swift rename to splitio_ios/ios/splitio_ios/Sources/splitio_ios/SplitWrapper.swift diff --git a/splitio_ios/ios/Classes/SwiftSplitioPlugin.swift b/splitio_ios/ios/splitio_ios/Sources/splitio_ios/SwiftSplitioPlugin.swift similarity index 100% rename from splitio_ios/ios/Classes/SwiftSplitioPlugin.swift rename to splitio_ios/ios/splitio_ios/Sources/splitio_ios/SwiftSplitioPlugin.swift diff --git a/splitio_ios/pubspec.yaml b/splitio_ios/pubspec.yaml index 5035e48..fcdd980 100644 --- a/splitio_ios/pubspec.yaml +++ b/splitio_ios/pubspec.yaml @@ -1,7 +1,7 @@ name: splitio_ios description: The official iOS implementation of splitio Flutter plugin. repository: https://github.com/splitio/flutter-sdk-plugin/tree/main/splitio_ios -version: 1.1.0 +version: 1.2.0 environment: sdk: ">=2.16.2 <4.0.0" From 1188f44f698f9572f1fc81d501f24348304ef71a Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 17 Sep 2026 19:25:16 -0300 Subject: [PATCH 2/2] New import for stricter Swift build --- .../ios/splitio_ios/Sources/splitio_ios/SplitMethodParser.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/splitio_ios/ios/splitio_ios/Sources/splitio_ios/SplitMethodParser.swift b/splitio_ios/ios/splitio_ios/Sources/splitio_ios/SplitMethodParser.swift index d54abd6..9fc06b4 100644 --- a/splitio_ios/ios/splitio_ios/Sources/splitio_ios/SplitMethodParser.swift +++ b/splitio_ios/ios/splitio_ios/Sources/splitio_ios/SplitMethodParser.swift @@ -1,5 +1,6 @@ import Foundation import Split +import Flutter import UIKit protocol SplitMethodParser {