diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c4bc2ed..9c5b2ce 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -12,12 +12,23 @@ concurrency: cancel-in-progress: true jobs: - test: - name: Build, Lint and Test the SDK + apple: + name: Apple build & test (${{ matrix.dependency_manager }}) runs-on: macos-26 + # Swift Package Manager derives the plugin's package identity from the checkout + # directory name, which must match the package name `telemetrydecksdk`. + defaults: + run: + working-directory: telemetrydecksdk + strategy: + fail-fast: false + matrix: + dependency_manager: [cocoapods, spm] steps: - name: Repository checkout uses: actions/checkout@v5 + with: + path: telemetrydecksdk - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1 with: @@ -28,6 +39,34 @@ jobs: uses: subosito/flutter-action@v2 with: channel: stable + - name: Select dependency manager + run: | + if [ "${{ matrix.dependency_manager }}" = "spm" ]; then + flutter config --enable-swift-package-manager + else + flutter config --no-enable-swift-package-manager + fi + - name: Install dependencies + run: flutter pub get + - name: Build + run: | + cd example + flutter build ios --release --no-codesign + flutter build macos + - name: Test macOS + run: make test-macos + # todo: add iOS testing (with code signing enabled) + + android: + name: Android build, lint & test + runs-on: macos-26 + steps: + - name: Repository checkout + uses: actions/checkout@v5 + - name: Setup Flutter + uses: subosito/flutter-action@v2 + with: + channel: stable - name: Configure JDK uses: actions/setup-java@v4 with: @@ -38,13 +77,8 @@ jobs: - name: Build run: | cd example - flutter build ios --release --no-codesign - flutter build macos flutter build apk - name: Lint run: make checklint - name: Test Android run: make test-android - - name: Test macOS - run: make test-macos - # todo: add iOS testing (with code signing enabled) diff --git a/.gitignore b/.gitignore index 49a187c..cdb4799 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,8 @@ migrate_working_dir/ **/doc/api/ .dart_tool/ build/ + +# Swift Package Manager +.build/ +.swiftpm/ +**/telemetrydecksdk/Package.resolved diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index dee0723..0c545e4 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -2,10 +2,10 @@ PODS: - Flutter (1.0.0) - integration_test (0.0.1): - Flutter - - TelemetryDeck (2.11.0) + - TelemetryDeck (2.14.1) - telemetrydecksdk (1.0.0): - Flutter - - TelemetryDeck (~> 2.11.0) + - TelemetryDeck (~> 2.11) DEPENDENCIES: - Flutter (from `Flutter`) @@ -27,9 +27,9 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 integration_test: 4a889634ef21a45d28d50d622cf412dc6d9f586e - TelemetryDeck: 50c6ddb1031ee91e7828d5f023af1419f9aadcad - telemetrydecksdk: 9947cdb29545b0ce3356b6b19e524bdc2303df7c + TelemetryDeck: 41e9a250c1be0de716d8b164a029dbc0e846f614 + telemetrydecksdk: 3a0c7b0331facbe8d78060c1b33b404fd4f62c25 -PODFILE CHECKSUM: a57f30d18f102dd3ce366b1d62a55ecbef2158e5 +PODFILE CHECKSUM: 9c46fd01abff66081b39f5fa5767b3f1d0b11d76 COCOAPODS: 1.16.2 diff --git a/example/ios/Runner/AppDelegate.swift b/example/ios/Runner/AppDelegate.swift index b636303..c30b367 100644 --- a/example/ios/Runner/AppDelegate.swift +++ b/example/ios/Runner/AppDelegate.swift @@ -1,13 +1,16 @@ -import UIKit import Flutter +import UIKit @main -@objc class AppDelegate: FlutterAppDelegate { +@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { - GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } + + func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) { + GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry) + } } diff --git a/example/ios/Runner/Info.plist b/example/ios/Runner/Info.plist index bb18120..e6e0d5a 100644 --- a/example/ios/Runner/Info.plist +++ b/example/ios/Runner/Info.plist @@ -2,6 +2,8 @@ + CADisableMinimumFrameDurationOnPhone + CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName @@ -24,6 +26,29 @@ $(FLUTTER_BUILD_NUMBER) LSRequiresIPhoneOS + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneConfigurationName + flutter + UISceneDelegateClassName + FlutterSceneDelegate + UISceneStoryboardFile + Main + + + + + UIApplicationSupportsIndirectInputEvents + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile @@ -41,9 +66,5 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - diff --git a/example/macos/Podfile.lock b/example/macos/Podfile.lock index 99db6e1..aca6ae0 100644 --- a/example/macos/Podfile.lock +++ b/example/macos/Podfile.lock @@ -3,7 +3,7 @@ PODS: - TelemetryDeck (2.11.0) - telemetrydecksdk (0.0.1): - FlutterMacOS - - TelemetryDeck (~> 2.11.0) + - TelemetryDeck (~> 2.11) DEPENDENCIES: - FlutterMacOS (from `Flutter/ephemeral`) @@ -22,8 +22,8 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 TelemetryDeck: 50c6ddb1031ee91e7828d5f023af1419f9aadcad - telemetrydecksdk: 7c31fa86d7ef3f2dbfd4bba0165233de9c1c84f3 + telemetrydecksdk: ff3767fe4deb54ed53967899bd75b640407d281c -PODFILE CHECKSUM: 9ebaf0ce3d369aaa26a9ea0e159195ed94724cf3 +PODFILE CHECKSUM: f0c21717cb7ee9112f915044c74bfceb5b12e02a COCOAPODS: 1.16.2 diff --git a/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..9ab534d --- /dev/null +++ b/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,14 @@ +{ + "pins" : [ + { + "identity" : "swiftsdk", + "kind" : "remoteSourceControl", + "location" : "https://github.com/TelemetryDeck/SwiftSDK", + "state" : { + "revision" : "ad4a03ec7ea7416a4081370f21c86e55b02a5b88", + "version" : "2.14.1" + } + } + ], + "version" : 2 +} diff --git a/example/pubspec.lock b/example/pubspec.lock index 1698550..e6ed5c6 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -280,4 +280,4 @@ packages: version: "3.1.0" sdks: dart: ">=3.10.0-0 <4.0.0" - flutter: ">=3.18.0-18.0.pre.54" + flutter: ">=3.41.0" diff --git a/ios/telemetrydecksdk.podspec b/ios/telemetrydecksdk.podspec index b86b60e..cfccd6c 100644 --- a/ios/telemetrydecksdk.podspec +++ b/ios/telemetrydecksdk.podspec @@ -13,10 +13,10 @@ Flutter SDK for TelemetryDeck, a privacy-conscious analytics service for apps an s.license = { :file => '../LICENSE' } s.author = { 'TelemetryDeck' => 'info@telemetrydeck.com' } s.source = { :path => '.' } - s.source_files = 'Classes/**/*' + s.source_files = 'telemetrydecksdk/Sources/telemetrydecksdk/**/*' s.dependency 'Flutter' - s.dependency 'TelemetryDeck', '~> 2.11.0' - s.platform = :ios, '12.0' + s.dependency 'TelemetryDeck', '~> 2.11' + s.platform = :ios, '13.0' # Flutter.framework does not contain a i386 slice. s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } diff --git a/ios/telemetrydecksdk/Package.swift b/ios/telemetrydecksdk/Package.swift new file mode 100644 index 0000000..d77f938 --- /dev/null +++ b/ios/telemetrydecksdk/Package.swift @@ -0,0 +1,25 @@ +// swift-tools-version: 5.9 +import PackageDescription + +let package = Package( + name: "telemetrydecksdk", + platforms: [ + .iOS("13.0") + ], + products: [ + .library(name: "telemetrydecksdk", targets: ["telemetrydecksdk"]) + ], + dependencies: [ + .package(name: "FlutterFramework", path: "../FlutterFramework"), + .package(url: "https://github.com/TelemetryDeck/SwiftSDK", .upToNextMajor(from: "2.11.0")) + ], + targets: [ + .target( + name: "telemetrydecksdk", + dependencies: [ + .product(name: "FlutterFramework", package: "FlutterFramework"), + .product(name: "TelemetryDeck", package: "SwiftSDK") + ] + ) + ] +) diff --git a/ios/Classes/TelemetrydecksdkPlugin.swift b/ios/telemetrydecksdk/Sources/telemetrydecksdk/TelemetrydecksdkPlugin.swift similarity index 100% rename from ios/Classes/TelemetrydecksdkPlugin.swift rename to ios/telemetrydecksdk/Sources/telemetrydecksdk/TelemetrydecksdkPlugin.swift diff --git a/macos/telemetrydecksdk.podspec b/macos/telemetrydecksdk.podspec index d1d72b5..dcf0048 100644 --- a/macos/telemetrydecksdk.podspec +++ b/macos/telemetrydecksdk.podspec @@ -14,11 +14,11 @@ Flutter SDK for TelemetryDeck, a privacy-conscious analytics service for apps an s.author = { 'TelemetryDeck' => 'info@telemetrydeck.com' } s.source = { :path => '.' } - s.source_files = 'Classes/**/*' + s.source_files = 'telemetrydecksdk/Sources/telemetrydecksdk/**/*' s.dependency 'FlutterMacOS' - s.dependency 'TelemetryDeck', '~> 2.11.0' + s.dependency 'TelemetryDeck', '~> 2.11' - s.platform = :osx, '10.11' + s.platform = :osx, '10.15' s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } s.swift_version = '5.0' end diff --git a/macos/telemetrydecksdk/Package.swift b/macos/telemetrydecksdk/Package.swift new file mode 100644 index 0000000..58e0dfa --- /dev/null +++ b/macos/telemetrydecksdk/Package.swift @@ -0,0 +1,25 @@ +// swift-tools-version: 5.9 +import PackageDescription + +let package = Package( + name: "telemetrydecksdk", + platforms: [ + .macOS("10.15") + ], + products: [ + .library(name: "telemetrydecksdk", targets: ["telemetrydecksdk"]) + ], + dependencies: [ + .package(name: "FlutterFramework", path: "../FlutterFramework"), + .package(url: "https://github.com/TelemetryDeck/SwiftSDK", .upToNextMajor(from: "2.11.0")) + ], + targets: [ + .target( + name: "telemetrydecksdk", + dependencies: [ + .product(name: "FlutterFramework", package: "FlutterFramework"), + .product(name: "TelemetryDeck", package: "SwiftSDK") + ] + ) + ] +) diff --git a/macos/Classes/TelemetrydecksdkPlugin.swift b/macos/telemetrydecksdk/Sources/telemetrydecksdk/TelemetrydecksdkPlugin.swift similarity index 100% rename from macos/Classes/TelemetrydecksdkPlugin.swift rename to macos/telemetrydecksdk/Sources/telemetrydecksdk/TelemetrydecksdkPlugin.swift diff --git a/pubspec.yaml b/pubspec.yaml index c90198a..908410a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -8,7 +8,7 @@ documentation: "https://telemetrydeck.com/docs/" environment: sdk: ">=3.2.3 <4.0.0" - flutter: ">=3.3.0" + flutter: ">=3.41.0" dependencies: flutter: