From ce8859a0c7b819fdf05ddce9fbb05c9cb3fced1d Mon Sep 17 00:00:00 2001 From: Fadi George Date: Mon, 30 Mar 2026 10:33:07 -0700 Subject: [PATCH 01/17] chore: add symlink for shared assets in demo_spm example --- examples/demo_spm/.gitignore | 1 + examples/demo_spm/assets | 1 + examples/demo_spm/lib | 1 + examples/demo_spm/pubspec.yaml | 37 ++++++++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+) create mode 120000 examples/demo_spm/.gitignore create mode 120000 examples/demo_spm/assets create mode 120000 examples/demo_spm/lib create mode 100644 examples/demo_spm/pubspec.yaml diff --git a/examples/demo_spm/.gitignore b/examples/demo_spm/.gitignore new file mode 120000 index 00000000..590ac178 --- /dev/null +++ b/examples/demo_spm/.gitignore @@ -0,0 +1 @@ +../demo/.gitignore \ No newline at end of file diff --git a/examples/demo_spm/assets b/examples/demo_spm/assets new file mode 120000 index 00000000..da5ad123 --- /dev/null +++ b/examples/demo_spm/assets @@ -0,0 +1 @@ +../demo/assets \ No newline at end of file diff --git a/examples/demo_spm/lib b/examples/demo_spm/lib new file mode 120000 index 00000000..255adc2f --- /dev/null +++ b/examples/demo_spm/lib @@ -0,0 +1 @@ +../demo/lib \ No newline at end of file diff --git a/examples/demo_spm/pubspec.yaml b/examples/demo_spm/pubspec.yaml new file mode 100644 index 00000000..7062405b --- /dev/null +++ b/examples/demo_spm/pubspec.yaml @@ -0,0 +1,37 @@ +name: demo +description: OneSignal Flutter SDK Demo App +publish_to: 'none' +version: 1.0.0+1 + +environment: + sdk: ^3.7.0 + +dependencies: + flutter: + sdk: flutter + onesignal_flutter: + path: ../../ + provider: ^6.1.0 + shared_preferences: ^2.3.0 + http: ^1.2.0 + url_launcher: ^6.2.0 + flutter_svg: ^2.0.0 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^5.0.0 + flutter_launcher_icons: ^0.14.3 + +flutter_launcher_icons: + android: true + ios: true + remove_alpha_ios: true + image_path: "assets/onesignal_logo_icon_padded.png" + adaptive_icon_background: "#FFFFFF" + adaptive_icon_foreground: "assets/onesignal_logo_icon_padded.png" + +flutter: + uses-material-design: true + assets: + - assets/onesignal_logo.svg From 77c28d620a652550332644babd1426aeb515c894 Mon Sep 17 00:00:00 2001 From: Fadi George Date: Mon, 30 Mar 2026 11:22:27 -0700 Subject: [PATCH 02/17] chore: remove PR conventions documentation --- .cursor/rules/pr-conventions.mdc | 32 -------------------------------- 1 file changed, 32 deletions(-) delete mode 100644 .cursor/rules/pr-conventions.mdc diff --git a/.cursor/rules/pr-conventions.mdc b/.cursor/rules/pr-conventions.mdc deleted file mode 100644 index cd953b17..00000000 --- a/.cursor/rules/pr-conventions.mdc +++ /dev/null @@ -1,32 +0,0 @@ ---- -description: Conventions for pull request titles and body content -alwaysApply: true ---- - -# Pull Request Conventions - -## PR Title - -Use semantic/conventional commit prefixes in PR titles: - -- `fix:` for bug fixes -- `feat:` for new features -- `chore:` for maintenance tasks (deps, CI, tooling) -- `refactor:` for code restructuring without behavior changes -- `docs:` for documentation-only changes -- `test:` for test-only changes - -Example: `fix: resolve notification grouping on Android 14` - -## PR Body - -Follow the repo's PR template at `.github/pull_request_template.md`. Every PR body must include: - -1. **One Line Summary** (required) -2. **Motivation** (required) explaining why the change is being made -3. **Scope** (recommended) describing what is and isn't affected -4. **Testing** section with manual and/or unit testing details -5. **Affected code checklist** with relevant items checked -6. **Checklist** sections confirmed - -Remove the instructional header block (between `` and ``) before submitting. From 48ffcbac77abf2cc150a7c4629f6e51ecad6a80d Mon Sep 17 00:00:00 2001 From: Fadi George Date: Mon, 30 Mar 2026 11:34:29 -0700 Subject: [PATCH 03/17] feat: add Swift Package Manager support for iOS plugin Migrate iOS plugin source files from ios/Classes/ to the SPM-compatible directory structure at ios/onesignal_flutter/Sources/onesignal_flutter/. Add Package.swift targeting OneSignal-iOS-SDK 5.5.0 via SPM. Update podspec paths so CocoaPods continues to work alongside SPM. Scaffold demo_spm example app for SPM build verification. Made-with: Cursor --- examples/demo/ios/Podfile.lock | 2 +- examples/demo_spm/.metadata | 45 ++ examples/demo_spm/README.md | 16 + examples/demo_spm/analysis_options.yaml | 28 + examples/demo_spm/android/.gitignore | 14 + .../demo_spm/android/app/build.gradle.kts | 44 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 45 ++ .../onesignal/example/demo/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + examples/demo_spm/android/build.gradle.kts | 24 + examples/demo_spm/android/gradle.properties | 2 + .../gradle/wrapper/gradle-wrapper.properties | 5 + examples/demo_spm/android/settings.gradle.kts | 26 + examples/demo_spm/ios/.gitignore | 34 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + examples/demo_spm/ios/Flutter/Debug.xcconfig | 1 + .../demo_spm/ios/Flutter/Release.xcconfig | 1 + .../ios/Runner.xcodeproj/project.pbxproj | 643 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 119 ++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../demo_spm/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 ++++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 1226 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 1418 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + examples/demo_spm/ios/Runner/Info.plist | 49 ++ .../ios/Runner/Runner-Bridging-Header.h | 1 + .../ios/RunnerTests/RunnerTests.swift | 12 + ios/Assets/.gitkeep | 0 ios/onesignal_flutter.podspec | 4 +- ios/onesignal_flutter/Package.swift | 31 + .../onesignal_flutter}/OSFlutterCategories.m | 2 +- .../onesignal_flutter}/OSFlutterDebug.m | 4 +- .../OSFlutterInAppMessages.m | 4 +- .../OSFlutterLiveActivities.m | 6 +- .../onesignal_flutter}/OSFlutterLocation.m | 4 +- .../OSFlutterNotifications.m | 4 +- .../OSFlutterPushSubscription.m | 4 +- .../onesignal_flutter}/OSFlutterSession.m | 4 +- .../onesignal_flutter}/OSFlutterUser.m | 6 +- .../onesignal_flutter}/OneSignalPlugin.m | 18 +- .../onesignal_flutter}/OSFlutterCategories.h | 0 .../onesignal_flutter}/OSFlutterDebug.h | 0 .../OSFlutterInAppMessages.h | 0 .../OSFlutterLiveActivities.h | 0 .../onesignal_flutter}/OSFlutterLocation.h | 0 .../OSFlutterNotifications.h | 0 .../OSFlutterPushSubscription.h | 0 .../onesignal_flutter}/OSFlutterSession.h | 0 .../onesignal_flutter}/OSFlutterUser.h | 0 .../onesignal_flutter}/OneSignalPlugin.h | 0 85 files changed, 1548 insertions(+), 31 deletions(-) create mode 100644 examples/demo_spm/.metadata create mode 100644 examples/demo_spm/README.md create mode 100644 examples/demo_spm/analysis_options.yaml create mode 100644 examples/demo_spm/android/.gitignore create mode 100644 examples/demo_spm/android/app/build.gradle.kts create mode 100644 examples/demo_spm/android/app/src/debug/AndroidManifest.xml create mode 100644 examples/demo_spm/android/app/src/main/AndroidManifest.xml create mode 100644 examples/demo_spm/android/app/src/main/kotlin/com/onesignal/example/demo/MainActivity.kt create mode 100644 examples/demo_spm/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 examples/demo_spm/android/app/src/main/res/drawable/launch_background.xml create mode 100644 examples/demo_spm/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 examples/demo_spm/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 examples/demo_spm/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 examples/demo_spm/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 examples/demo_spm/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 examples/demo_spm/android/app/src/main/res/values-night/styles.xml create mode 100644 examples/demo_spm/android/app/src/main/res/values/styles.xml create mode 100644 examples/demo_spm/android/app/src/profile/AndroidManifest.xml create mode 100644 examples/demo_spm/android/build.gradle.kts create mode 100644 examples/demo_spm/android/gradle.properties create mode 100644 examples/demo_spm/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 examples/demo_spm/android/settings.gradle.kts create mode 100644 examples/demo_spm/ios/.gitignore create mode 100644 examples/demo_spm/ios/Flutter/AppFrameworkInfo.plist create mode 100644 examples/demo_spm/ios/Flutter/Debug.xcconfig create mode 100644 examples/demo_spm/ios/Flutter/Release.xcconfig create mode 100644 examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj create mode 100644 examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 examples/demo_spm/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 examples/demo_spm/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 examples/demo_spm/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/demo_spm/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 examples/demo_spm/ios/Runner/AppDelegate.swift create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 examples/demo_spm/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 examples/demo_spm/ios/Runner/Base.lproj/Main.storyboard create mode 100644 examples/demo_spm/ios/Runner/Info.plist create mode 100644 examples/demo_spm/ios/Runner/Runner-Bridging-Header.h create mode 100644 examples/demo_spm/ios/RunnerTests/RunnerTests.swift delete mode 100644 ios/Assets/.gitkeep create mode 100644 ios/onesignal_flutter/Package.swift rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter}/OSFlutterCategories.m (98%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter}/OSFlutterDebug.m (95%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter}/OSFlutterInAppMessages.m (97%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter}/OSFlutterLiveActivities.m (97%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter}/OSFlutterLocation.m (95%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter}/OSFlutterNotifications.m (98%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter}/OSFlutterPushSubscription.m (96%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter}/OSFlutterSession.m (96%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter}/OSFlutterUser.m (97%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter}/OneSignalPlugin.m (88%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter}/OSFlutterCategories.h (100%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter}/OSFlutterDebug.h (100%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter}/OSFlutterInAppMessages.h (100%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter}/OSFlutterLiveActivities.h (100%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter}/OSFlutterLocation.h (100%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter}/OSFlutterNotifications.h (100%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter}/OSFlutterPushSubscription.h (100%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter}/OSFlutterSession.h (100%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter}/OSFlutterUser.h (100%) rename ios/{Classes => onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter}/OneSignalPlugin.h (100%) diff --git a/examples/demo/ios/Podfile.lock b/examples/demo/ios/Podfile.lock index d8512b81..236ac9ea 100644 --- a/examples/demo/ios/Podfile.lock +++ b/examples/demo/ios/Podfile.lock @@ -78,7 +78,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 - onesignal_flutter: 557110960f936d1d2d792864149e79a58945c686 + onesignal_flutter: fa28e94a7baa3cd8b503fc4d760103405882f47f OneSignalXCFramework: 943852e7d70d719f73e9669d48620aeec1b93022 shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb url_launcher_ios: 7a95fa5b60cc718a708b8f2966718e93db0cef1b diff --git a/examples/demo_spm/.metadata b/examples/demo_spm/.metadata new file mode 100644 index 00000000..83b34ebb --- /dev/null +++ b/examples/demo_spm/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "f6ff1529fd6d8af5f706051d9251ac9231c83407" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407 + base_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407 + - platform: android + create_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407 + base_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407 + - platform: ios + create_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407 + base_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407 + - platform: linux + create_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407 + base_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407 + - platform: macos + create_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407 + base_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407 + - platform: web + create_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407 + base_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407 + - platform: windows + create_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407 + base_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/examples/demo_spm/README.md b/examples/demo_spm/README.md new file mode 100644 index 00000000..dbd403a0 --- /dev/null +++ b/examples/demo_spm/README.md @@ -0,0 +1,16 @@ +# demo + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/examples/demo_spm/analysis_options.yaml b/examples/demo_spm/analysis_options.yaml new file mode 100644 index 00000000..0d290213 --- /dev/null +++ b/examples/demo_spm/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/examples/demo_spm/android/.gitignore b/examples/demo_spm/android/.gitignore new file mode 100644 index 00000000..be3943c9 --- /dev/null +++ b/examples/demo_spm/android/.gitignore @@ -0,0 +1,14 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/examples/demo_spm/android/app/build.gradle.kts b/examples/demo_spm/android/app/build.gradle.kts new file mode 100644 index 00000000..e9c12dae --- /dev/null +++ b/examples/demo_spm/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.onesignal.example.demo" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_17.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.onesignal.example.demo" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/examples/demo_spm/android/app/src/debug/AndroidManifest.xml b/examples/demo_spm/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 00000000..399f6981 --- /dev/null +++ b/examples/demo_spm/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/examples/demo_spm/android/app/src/main/AndroidManifest.xml b/examples/demo_spm/android/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..710757c5 --- /dev/null +++ b/examples/demo_spm/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/demo_spm/android/app/src/main/kotlin/com/onesignal/example/demo/MainActivity.kt b/examples/demo_spm/android/app/src/main/kotlin/com/onesignal/example/demo/MainActivity.kt new file mode 100644 index 00000000..9409a2eb --- /dev/null +++ b/examples/demo_spm/android/app/src/main/kotlin/com/onesignal/example/demo/MainActivity.kt @@ -0,0 +1,5 @@ +package com.onesignal.example.demo + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/examples/demo_spm/android/app/src/main/res/drawable-v21/launch_background.xml b/examples/demo_spm/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/examples/demo_spm/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/examples/demo_spm/android/app/src/main/res/drawable/launch_background.xml b/examples/demo_spm/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 00000000..304732f8 --- /dev/null +++ b/examples/demo_spm/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/examples/demo_spm/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/demo_spm/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/examples/demo_spm/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/examples/demo_spm/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/examples/demo_spm/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/demo_spm/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/examples/demo_spm/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/demo_spm/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/examples/demo_spm/android/app/src/main/res/values-night/styles.xml b/examples/demo_spm/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 00000000..06952be7 --- /dev/null +++ b/examples/demo_spm/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/examples/demo_spm/android/app/src/main/res/values/styles.xml b/examples/demo_spm/android/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..cb1ef880 --- /dev/null +++ b/examples/demo_spm/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/examples/demo_spm/android/app/src/profile/AndroidManifest.xml b/examples/demo_spm/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 00000000..399f6981 --- /dev/null +++ b/examples/demo_spm/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/examples/demo_spm/android/build.gradle.kts b/examples/demo_spm/android/build.gradle.kts new file mode 100644 index 00000000..dbee657b --- /dev/null +++ b/examples/demo_spm/android/build.gradle.kts @@ -0,0 +1,24 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/examples/demo_spm/android/gradle.properties b/examples/demo_spm/android/gradle.properties new file mode 100644 index 00000000..fbee1d8c --- /dev/null +++ b/examples/demo_spm/android/gradle.properties @@ -0,0 +1,2 @@ +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true diff --git a/examples/demo_spm/android/gradle/wrapper/gradle-wrapper.properties b/examples/demo_spm/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..e4ef43fb --- /dev/null +++ b/examples/demo_spm/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-all.zip diff --git a/examples/demo_spm/android/settings.gradle.kts b/examples/demo_spm/android/settings.gradle.kts new file mode 100644 index 00000000..ca7fe065 --- /dev/null +++ b/examples/demo_spm/android/settings.gradle.kts @@ -0,0 +1,26 @@ +pluginManagement { + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.11.1" apply false + id("org.jetbrains.kotlin.android") version "2.2.20" apply false +} + +include(":app") diff --git a/examples/demo_spm/ios/.gitignore b/examples/demo_spm/ios/.gitignore new file mode 100644 index 00000000..7a7f9873 --- /dev/null +++ b/examples/demo_spm/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/examples/demo_spm/ios/Flutter/AppFrameworkInfo.plist b/examples/demo_spm/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 00000000..1dc6cf76 --- /dev/null +++ b/examples/demo_spm/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 13.0 + + diff --git a/examples/demo_spm/ios/Flutter/Debug.xcconfig b/examples/demo_spm/ios/Flutter/Debug.xcconfig new file mode 100644 index 00000000..592ceee8 --- /dev/null +++ b/examples/demo_spm/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/examples/demo_spm/ios/Flutter/Release.xcconfig b/examples/demo_spm/ios/Flutter/Release.xcconfig new file mode 100644 index 00000000..592ceee8 --- /dev/null +++ b/examples/demo_spm/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj b/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..2db0fcac --- /dev/null +++ b/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,643 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */, + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + ); + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = Q5P523GR3H; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.demo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.demo.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.demo.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.demo.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = Q5P523GR3H; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.demo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = Q5P523GR3H; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.demo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { + isa = XCSwiftPackageProductDependency; + productName = FlutterGeneratedPluginSwiftPackage; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/examples/demo_spm/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/examples/demo_spm/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..c3fedb29 --- /dev/null +++ b/examples/demo_spm/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/demo_spm/ios/Runner.xcworkspace/contents.xcworkspacedata b/examples/demo_spm/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..1d526a16 --- /dev/null +++ b/examples/demo_spm/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/examples/demo_spm/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/demo_spm/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/examples/demo_spm/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/demo_spm/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/demo_spm/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/examples/demo_spm/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/examples/demo_spm/ios/Runner/AppDelegate.swift b/examples/demo_spm/ios/Runner/AppDelegate.swift new file mode 100644 index 00000000..62666446 --- /dev/null +++ b/examples/demo_spm/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..d36b1fab --- /dev/null +++ b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..797d452e458972bab9d994556c8305db4c827017 GIT binary patch literal 406 zcmV;H0crk;P))>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed2d933e1120817fe9182483a228007b18ab6ae GIT binary patch literal 450 zcmV;z0X_bSP)iGWQ_5NJQ_~rNh*z)}eT%KUb z`7gNk0#AwF^#0T0?hIa^`~Ck;!}#m+_uT050aTR(J!bU#|IzRL%^UsMS#KsYnTF*!YeDOytlP4VhV?b} z%rz_<=#CPc)tU1MZTq~*2=8~iZ!lSa<{9b@2Jl;?IEV8)=fG217*|@)CCYgFze-x? zIFODUIA>nWKpE+bn~n7;-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGr zXPIdeRE&b2Thd#{MtDK$px*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{Hig)k suLT-RhftRq8b9;(V=235Wa|I=027H2wCDra;{X5v07*qoM6N<$f;9x^2LJ#7 literal 0 HcmV?d00001 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd7b0099ca80c806f8fe495613e8d6c69460d76 GIT binary patch literal 282 zcmV+#0p(^bcu7P-R4C8Q z&e;xxFbF_Vrezo%_kH*OKhshZ6BFpG-Y1e10`QXJKbND7AMQ&cMj60B5TNObaZxYybcN07*qoM6N<$g3m;S%K!iX literal 0 HcmV?d00001 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe730945a01f64a61e2235dbe3f45b08f7729182 GIT binary patch literal 462 zcmV;<0WtoGP)-}iV`2<;=$?g5M=KQbZ{F&YRNy7Nn@%_*5{gvDM0aKI4?ESmw z{NnZg)A0R`+4?NF_RZexyVB&^^ZvN!{I28tr{Vje;QNTz`dG&Jz0~Ek&f2;*Z7>B|cg}xYpxEFY+0YrKLF;^Q+-HreN0P{&i zK~zY`?b7ECf-n?@;d<&orQ*Q7KoR%4|C>{W^h6@&01>0SKS`dn{Q}GT%Qj_{PLZ_& zs`MFI#j-(>?bvdZ!8^xTwlY{qA)T4QLbY@j(!YJ7aXJervHy6HaG_2SB`6CC{He}f zHVw(fJWApwPq!6VY7r1w-Fs)@ox~N+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9 zR%3*Q+)t%S!MU_`id^@&Y{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&)179 zp<)v6Y}pRl100G2FL_t(o!|l{-Q-VMg#&MKg7c{O0 z2wJImOS3Gy*Z2Qifdv~JYOp;v+U)a|nLoc7hNH;I$;lzDt$}rkaFw1mYK5_0Q(Sut zvbEloxON7$+HSOgC9Z8ltuC&0OSF!-mXv5caV>#bc3@hBPX@I$58-z}(ZZE!t-aOG zpjNkbau@>yEzH(5Yj4kZiMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_st8pKG z(%SHyHdU&v%f36~uERh!bd`!T2dw;z6PrOTQ7Vt*#9F2uHlUVnb#ev_o^fh}Dzmq} zWtlk35}k=?xj28uO|5>>$yXadTUE@@IPpgH`gJ~Ro4>jd1IF|(+IX>8M4Ps{PNvmI zNj4D+XgN83gPt_Gm}`Ybv{;+&yu-C(Grdiahmo~BjG-l&mWM+{e5M1sm&=xduwgM9 z`8OEh`=F3r`^E{n_;%9weN{cf2%7=VzC@cYj+lg>+3|D|_1C@{hcU(DyQG_BvBWe? zvTv``=%b1zrol#=R`JB)>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..502f463a9bc882b461c96aadf492d1729e49e725 GIT binary patch literal 586 zcmV-Q0=4~#P)+}#`wDE{8-2Mebf5<{{PqV{TgVcv*r8?UZ3{-|G?_}T*&y;@cqf{ z{Q*~+qr%%p!1pS*_Uicl#q9lc(D`!D`LN62sNwq{oYw(Wmhk)k<@f$!$@ng~_5)Ru z0Z)trIA5^j{DIW^c+vT2%lW+2<(RtE2wR;4O@)Tm`Xr*?A(qYoM}7i5Yxw>D(&6ou zxz!_Xr~yNF+waPe00049Nkl*;a!v6h%{rlvIH#gW3s8p;bFr=l}mRqpW2h zw=OA%hdyL~z+UHOzl0eKhEr$YYOL-c-%Y<)=j?(bzDweB7{b+%_ypvm_cG{SvM=DK zhv{K@m>#Bw>2W$eUI#iU)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G! zhkE!s;%oku3;IwG3U^2kw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn`0X*2 zy3(k600_CSZj?O$Qu%&$;|TGUJrptR(HzyIx>5E(2r{eA(<6t3e3I0B)7d6s7?Z5J zZ!rtKvA{MiEBm&KFtoifx>5P^Z=vl)95XJn()aS5%ad(s?4-=Tkis9IGu{`Fy8r+H07*qoM6N<$f20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec303439225b78712f49115768196d8d76f6790 GIT binary patch literal 862 zcmV-k1EKthP)20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f5fea27c705180eb716271f41b582e76dcbd90 GIT binary patch literal 1674 zcmV;526g#~P){YQnis^a@{&-nmRmq)<&%Mztj67_#M}W?l>kYSliK<%xAp;0j{!}J0!o7b zE>q9${Lb$D&h7k=+4=!ek^n+`0zq>LL1O?lVyea53S5x`Nqqo2YyeuIrQrJj9XjOp z{;T5qbj3}&1vg1VK~#9!?b~^C5-}JC@Pyrv-6dSEqJqT}#j9#dJ@GzT@B8}x zU&J@bBI>f6w6en+CeI)3^kC*U?}X%OD8$Fd$H&LV$H&LV$H&LV#|K5~mLYf|VqzOc zkc7qL~0sOYuM{tG`rYEDV{DWY`Z8&)kW*hc2VkBuY+^Yx&92j&StN}Wp=LD zxoGxXw6f&8sB^u})h@b@z0RBeD`K7RMR9deyL(ZJu#39Z>rT)^>v}Khq8U-IbIvT> z?4pV9qGj=2)TNH3d)=De<+^w;>S7m_eFKTvzeaBeir45xY!^m!FmxnljbSS_3o=g( z->^wC9%qkR{kbGnW8MfFew_o9h3(r55Is`L$8KI@d+*%{=Nx+FXJ98L0PjFIu;rGnnfY zn1R5Qnp<{Jq0M1vX=X&F8gtLmcWv$1*M@4ZfF^9``()#hGTeKeP`1!iED ztNE(TN}M5}3Bbc*d=FIv`DNv&@|C6yYj{sSqUj5oo$#*0$7pu|Dd2TLI>t5%I zIa4Dvr(iayb+5x=j*Vum9&irk)xV1`t509lnPO0%skL8_1c#Xbamh(2@f?4yUI zhhuT5<#8RJhGz4%b$`PJwKPAudsm|at?u;*hGgnA zU1;9gnxVBC)wA(BsB`AW54N{|qmikJR*%x0c`{LGsSfa|NK61pYH(r-UQ4_JXd!Rsz)=k zL{GMc5{h138)fF5CzHEDM>+FqY)$pdN3}Ml+riTgJOLN0F*Vh?{9ESR{SVVg>*>=# zix;VJHPtvFFCRY$Ks*F;VX~%*r9F)W`PmPE9F!(&s#x07n2<}?S{(ygpXgX-&B&OM zONY&BRQ(#%0%jeQs?oJ4P!p*R98>qCy5p8w>_gpuh39NcOlp)(wOoz0sY-Qz55eB~ z7OC-fKBaD1sE3$l-6QgBJO!n?QOTza`!S_YK z_v-lm^7{VO^8Q@M_^8F)09Ki6%=s?2_5eupee(w1FB%aqSweusQ-T+CH0Xt{` zFjMvW{@C&TB)k25()nh~_yJ9coBRL(0oO@HK~z}7?bm5j;y@69;bvlHb2tf!$ReA~x{22wTq550 z?f?Hnw(;m3ip30;QzdV~7pi!wyMYhDtXW#cO7T>|f=bdFhu+F!zMZ2UFj;GUKX7tI z;hv3{q~!*pMj75WP_c}>6)IWvg5_yyg<9Op()eD1hWC19M@?_9_MHec{Z8n3FaF{8 z;u`Mw0ly(uE>*CgQYv{be6ab2LWhlaH1^iLIM{olnag$78^Fd}%dR7;JECQ+hmk|o z!u2&!3MqPfP5ChDSkFSH8F2WVOEf0(E_M(JL17G}Y+fg0_IuW%WQ zG(mG&u?|->YSdk0;8rc{yw2@2Z&GA}z{Wb91Ooz9VhA{b2DYE7RmG zjL}?eq#iX%3#k;JWMx_{^2nNax`xPhByFiDX+a7uTGU|otOvIAUy|dEKkXOm-`aWS z27pUzD{a)Ct<6p{{3)+lq@i`t@%>-wT4r?*S}k)58e09WZYP0{{R3FC5Sl00039P)t-s|Ns9~ z#rP?<_5oL$Q^olD{r_0T`27C={r>*`|Nj71npVa5OTzc(_WfbW_({R{p56NV{r*M2 z_xt?)2V0#0NsfV0u>{42ctGP(8vQj-Btk1n|O0ZD=YLwd&R{Ko41Gr9H= zY@z@@bOAMB5Ltl$E>bJJ{>JP30ZxkmI%?eW{k`b?Wy<&gOo;dS`~CR$Vwb@XWtR|N zi~t=w02?-0&j0TD{>bb6sNwsK*!p?V`RMQUl(*DVjk-9Cx+-z1KXab|Ka2oXhX5f% z`$|e!000AhNklrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`? zTG`AHia671e^vgmp!llKp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?hz91 z7p83F3%LVu9;S$tSI$C^%^yud1dfTM_6p2|+5Ejp$bd`GDvbR|xit>i!ZD&F>@CJrPmu*UjD&?DfZs=$@e3FQA(vNiU+$A*%a} z?`XcG2jDxJ_ZQ#Md`H{4Lpf6QBDp81_KWZ6Tk#yCy1)32zO#3<7>b`eT7UyYH1eGz z;O(rH$=QR*L%%ZcBpc=eGua?N55nD^K(8<#gl2+pN_j~b2MHs4#mcLmv%DkspS-3< zpI1F=^9siI0s-;IN_IrA;5xm~3?3!StX}pUv0vkxMaqm+zxrg7X7(I&*N~&dEd0kD z-FRV|g=|QuUsuh>-xCI}vD2imzYIOIdcCVV=$Bz@*u0+Bs<|L^)32nN*=wu3n%Ynw z@1|eLG>!8ruU1pFXUfb`j>(=Gy~?Rn4QJ-c3%3T|(Frd!bI`9u&zAnyFYTqlG#&J7 zAkD(jpw|oZLNiA>;>hgp1KX7-wxC~31II47gc zHcehD6Uxlf%+M^^uN5Wc*G%^;>D5qT{>=uxUhX%WJu^Z*(_Wq9y}npFO{Hhb>s6<9 zNi0pHXWFaVZnb)1+RS&F)xOv6&aeILcI)`k#0YE+?e)5&#r7J#c`3Z7x!LpTc01dx zrdC3{Z;joZ^KN&))zB_i)I9fWedoN>Zl-6_Iz+^G&*ak2jpF07*qoM6N<$f;w%0(f|Me literal 0 HcmV?d00001 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 0 HcmV?d00001 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 00000000..0bedcf2f --- /dev/null +++ b/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 00000000..89c2725b --- /dev/null +++ b/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/examples/demo_spm/ios/Runner/Base.lproj/LaunchScreen.storyboard b/examples/demo_spm/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000..f2e259c7 --- /dev/null +++ b/examples/demo_spm/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/demo_spm/ios/Runner/Base.lproj/Main.storyboard b/examples/demo_spm/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 00000000..f3c28516 --- /dev/null +++ b/examples/demo_spm/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/demo_spm/ios/Runner/Info.plist b/examples/demo_spm/ios/Runner/Info.plist new file mode 100644 index 00000000..9f012827 --- /dev/null +++ b/examples/demo_spm/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Demo + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + demo + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/examples/demo_spm/ios/Runner/Runner-Bridging-Header.h b/examples/demo_spm/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 00000000..308a2a56 --- /dev/null +++ b/examples/demo_spm/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/examples/demo_spm/ios/RunnerTests/RunnerTests.swift b/examples/demo_spm/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..86a7c3b1 --- /dev/null +++ b/examples/demo_spm/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/ios/Assets/.gitkeep b/ios/Assets/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/ios/onesignal_flutter.podspec b/ios/onesignal_flutter.podspec index 98de90eb..84f9d30d 100644 --- a/ios/onesignal_flutter.podspec +++ b/ios/onesignal_flutter.podspec @@ -10,8 +10,8 @@ Pod::Spec.new do |s| s.license = { :file => '../LICENSE' } s.author = { 'Brad Hesse' => 'brad@onesignal.com', 'Josh Kasten' => 'josh@onesignal.com' } s.source = { :path => '.' } - s.source_files = 'Classes/**/*' - s.public_header_files = 'Classes/**/*.h' + s.source_files = 'onesignal_flutter/Sources/onesignal_flutter/**/*.{h,m}' + s.public_header_files = 'onesignal_flutter/Sources/onesignal_flutter/include/**/*.h' s.dependency 'Flutter' s.dependency 'OneSignalXCFramework', '5.5.0' s.ios.deployment_target = '11.0' diff --git a/ios/onesignal_flutter/Package.swift b/ios/onesignal_flutter/Package.swift new file mode 100644 index 00000000..f62b9b6b --- /dev/null +++ b/ios/onesignal_flutter/Package.swift @@ -0,0 +1,31 @@ +// 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: "onesignal_flutter", + platforms: [ + .iOS("11.0") + ], + products: [ + .library(name: "onesignal-flutter", targets: ["onesignal_flutter"]) + ], + dependencies: [ + .package(url: "https://github.com/OneSignal/OneSignal-iOS-SDK", exact: "5.5.0"), + ], + targets: [ + .target( + name: "onesignal_flutter", + dependencies: [ + .product(name: "OneSignalFramework", package: "OneSignal-iOS-SDK"), + .product(name: "OneSignalInAppMessages", package: "OneSignal-iOS-SDK"), + .product(name: "OneSignalLocation", package: "OneSignal-iOS-SDK"), + .product(name: "OneSignalExtension", package: "OneSignal-iOS-SDK"), + ], + cSettings: [ + .headerSearchPath("include/onesignal_flutter") + ] + ) + ] +) diff --git a/ios/Classes/OSFlutterCategories.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterCategories.m similarity index 98% rename from ios/Classes/OSFlutterCategories.m rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterCategories.m index db3ac0ec..536e047e 100644 --- a/ios/Classes/OSFlutterCategories.m +++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterCategories.m @@ -25,7 +25,7 @@ * THE SOFTWARE. */ -#import "OSFlutterCategories.h" +#import "./include/onesignal_flutter/OSFlutterCategories.h" /* The OneSignal iOS SDK implements similar methods (`toDictionary`) diff --git a/ios/Classes/OSFlutterDebug.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterDebug.m similarity index 95% rename from ios/Classes/OSFlutterDebug.m rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterDebug.m index f443157a..28ac9b28 100644 --- a/ios/Classes/OSFlutterDebug.m +++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterDebug.m @@ -25,8 +25,8 @@ * THE SOFTWARE. */ -#import "OSFlutterDebug.h" -#import "OSFlutterCategories.h" +#import "./include/onesignal_flutter/OSFlutterDebug.h" +#import "./include/onesignal_flutter/OSFlutterCategories.h" #import @implementation OSFlutterDebug diff --git a/ios/Classes/OSFlutterInAppMessages.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterInAppMessages.m similarity index 97% rename from ios/Classes/OSFlutterInAppMessages.m rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterInAppMessages.m index 8acbaefd..7a88a4cc 100644 --- a/ios/Classes/OSFlutterInAppMessages.m +++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterInAppMessages.m @@ -25,8 +25,8 @@ * THE SOFTWARE. */ -#import "OSFlutterInAppMessages.h" -#import "OSFlutterCategories.h" +#import "./include/onesignal_flutter/OSFlutterInAppMessages.h" +#import "./include/onesignal_flutter/OSFlutterCategories.h" #import @implementation OSFlutterInAppMessages diff --git a/ios/Classes/OSFlutterLiveActivities.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterLiveActivities.m similarity index 97% rename from ios/Classes/OSFlutterLiveActivities.m rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterLiveActivities.m index aa2a1f80..d7fd4eea 100644 --- a/ios/Classes/OSFlutterLiveActivities.m +++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterLiveActivities.m @@ -25,9 +25,9 @@ * THE SOFTWARE. */ -#import "OSFlutterLiveActivities.h" -#import "OSFlutterCategories.h" -#import "OneSignalLiveActivities/OneSignalLiveActivities-Swift.h" +#import "./include/onesignal_flutter/OSFlutterLiveActivities.h" +#import "./include/onesignal_flutter/OSFlutterCategories.h" +#import #import @implementation OSFlutterLiveActivities diff --git a/ios/Classes/OSFlutterLocation.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterLocation.m similarity index 95% rename from ios/Classes/OSFlutterLocation.m rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterLocation.m index 1d0d46fd..ca088772 100644 --- a/ios/Classes/OSFlutterLocation.m +++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterLocation.m @@ -25,8 +25,8 @@ * THE SOFTWARE. */ -#import "OSFlutterLocation.h" -#import "OSFlutterCategories.h" +#import "./include/onesignal_flutter/OSFlutterLocation.h" +#import "./include/onesignal_flutter/OSFlutterCategories.h" #import @implementation OSFlutterLocation diff --git a/ios/Classes/OSFlutterNotifications.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterNotifications.m similarity index 98% rename from ios/Classes/OSFlutterNotifications.m rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterNotifications.m index cbe71d01..027596f6 100644 --- a/ios/Classes/OSFlutterNotifications.m +++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterNotifications.m @@ -25,8 +25,8 @@ * THE SOFTWARE. */ -#import "OSFlutterNotifications.h" -#import "OSFlutterCategories.h" +#import "./include/onesignal_flutter/OSFlutterNotifications.h" +#import "./include/onesignal_flutter/OSFlutterCategories.h" #import #import diff --git a/ios/Classes/OSFlutterPushSubscription.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterPushSubscription.m similarity index 96% rename from ios/Classes/OSFlutterPushSubscription.m rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterPushSubscription.m index 785a21a4..65090b89 100644 --- a/ios/Classes/OSFlutterPushSubscription.m +++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterPushSubscription.m @@ -25,8 +25,8 @@ * THE SOFTWARE. */ -#import "OSFlutterPushSubscription.h" -#import "OSFlutterCategories.h" +#import "./include/onesignal_flutter/OSFlutterPushSubscription.h" +#import "./include/onesignal_flutter/OSFlutterCategories.h" #import #import diff --git a/ios/Classes/OSFlutterSession.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterSession.m similarity index 96% rename from ios/Classes/OSFlutterSession.m rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterSession.m index a5aa511a..524c17a4 100644 --- a/ios/Classes/OSFlutterSession.m +++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterSession.m @@ -25,8 +25,8 @@ * THE SOFTWARE. */ -#import "OSFlutterSession.h" -#import "OSFlutterCategories.h" +#import "./include/onesignal_flutter/OSFlutterSession.h" +#import "./include/onesignal_flutter/OSFlutterCategories.h" #import @implementation OSFlutterSession diff --git a/ios/Classes/OSFlutterUser.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterUser.m similarity index 97% rename from ios/Classes/OSFlutterUser.m rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterUser.m index f5bd0463..a823ef2b 100644 --- a/ios/Classes/OSFlutterUser.m +++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterUser.m @@ -24,9 +24,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -#import "OSFlutterUser.h" -#import "OSFlutterCategories.h" -#import "OSFlutterPushSubscription.h" +#import "./include/onesignal_flutter/OSFlutterUser.h" +#import "./include/onesignal_flutter/OSFlutterCategories.h" +#import "./include/onesignal_flutter/OSFlutterPushSubscription.h" #import #import diff --git a/ios/Classes/OneSignalPlugin.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OneSignalPlugin.m similarity index 88% rename from ios/Classes/OneSignalPlugin.m rename to ios/onesignal_flutter/Sources/onesignal_flutter/OneSignalPlugin.m index 49369c2b..951463bb 100644 --- a/ios/Classes/OneSignalPlugin.m +++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OneSignalPlugin.m @@ -25,15 +25,15 @@ * THE SOFTWARE. */ -#import "OneSignalPlugin.h" -#import "OSFlutterCategories.h" -#import "OSFlutterDebug.h" -#import "OSFlutterInAppMessages.h" -#import "OSFlutterLiveActivities.h" -#import "OSFlutterLocation.h" -#import "OSFlutterNotifications.h" -#import "OSFlutterSession.h" -#import "OSFlutterUser.h" +#import "./include/onesignal_flutter/OneSignalPlugin.h" +#import "./include/onesignal_flutter/OSFlutterCategories.h" +#import "./include/onesignal_flutter/OSFlutterDebug.h" +#import "./include/onesignal_flutter/OSFlutterInAppMessages.h" +#import "./include/onesignal_flutter/OSFlutterLiveActivities.h" +#import "./include/onesignal_flutter/OSFlutterLocation.h" +#import "./include/onesignal_flutter/OSFlutterNotifications.h" +#import "./include/onesignal_flutter/OSFlutterSession.h" +#import "./include/onesignal_flutter/OSFlutterUser.h" @interface OneSignalPlugin () diff --git a/ios/Classes/OSFlutterCategories.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterCategories.h similarity index 100% rename from ios/Classes/OSFlutterCategories.h rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterCategories.h diff --git a/ios/Classes/OSFlutterDebug.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterDebug.h similarity index 100% rename from ios/Classes/OSFlutterDebug.h rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterDebug.h diff --git a/ios/Classes/OSFlutterInAppMessages.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterInAppMessages.h similarity index 100% rename from ios/Classes/OSFlutterInAppMessages.h rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterInAppMessages.h diff --git a/ios/Classes/OSFlutterLiveActivities.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterLiveActivities.h similarity index 100% rename from ios/Classes/OSFlutterLiveActivities.h rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterLiveActivities.h diff --git a/ios/Classes/OSFlutterLocation.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterLocation.h similarity index 100% rename from ios/Classes/OSFlutterLocation.h rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterLocation.h diff --git a/ios/Classes/OSFlutterNotifications.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterNotifications.h similarity index 100% rename from ios/Classes/OSFlutterNotifications.h rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterNotifications.h diff --git a/ios/Classes/OSFlutterPushSubscription.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterPushSubscription.h similarity index 100% rename from ios/Classes/OSFlutterPushSubscription.h rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterPushSubscription.h diff --git a/ios/Classes/OSFlutterSession.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterSession.h similarity index 100% rename from ios/Classes/OSFlutterSession.h rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterSession.h diff --git a/ios/Classes/OSFlutterUser.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterUser.h similarity index 100% rename from ios/Classes/OSFlutterUser.h rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterUser.h diff --git a/ios/Classes/OneSignalPlugin.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OneSignalPlugin.h similarity index 100% rename from ios/Classes/OneSignalPlugin.h rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OneSignalPlugin.h From 3e75c3860fb9f2bd7241f44fce247661bd7a8afd Mon Sep 17 00:00:00 2001 From: Fadi George Date: Mon, 30 Mar 2026 12:53:52 -0700 Subject: [PATCH 04/17] chore(demo_spm): configure iOS project for SPM demo --- .../demo_spm/ios/Runner.xcodeproj/project.pbxproj | 15 +++++++++------ examples/demo_spm/ios/Runner/Info.plist | 8 ++++---- examples/demo_spm/ios/Runner/Runner.entitlements | 8 ++++++++ 3 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 examples/demo_spm/ios/Runner/Runner.entitlements diff --git a/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj b/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj index 2db0fcac..f17d2754 100644 --- a/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj +++ b/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj @@ -371,15 +371,16 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = Q5P523GR3H; + DEVELOPMENT_TEAM = 99SW8E36CT; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.demo; + PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -551,15 +552,16 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = Q5P523GR3H; + DEVELOPMENT_TEAM = 99SW8E36CT; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.demo; + PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -574,15 +576,16 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = Q5P523GR3H; + DEVELOPMENT_TEAM = 99SW8E36CT; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.demo; + PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; diff --git a/examples/demo_spm/ios/Runner/Info.plist b/examples/demo_spm/ios/Runner/Info.plist index 9f012827..06844e1f 100644 --- a/examples/demo_spm/ios/Runner/Info.plist +++ b/examples/demo_spm/ios/Runner/Info.plist @@ -2,6 +2,8 @@ + CADisableMinimumFrameDurationOnPhone + CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName @@ -24,6 +26,8 @@ $(FLUTTER_BUILD_NUMBER) LSRequiresIPhoneOS + UIApplicationSupportsIndirectInputEvents + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile @@ -41,9 +45,5 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - diff --git a/examples/demo_spm/ios/Runner/Runner.entitlements b/examples/demo_spm/ios/Runner/Runner.entitlements new file mode 100644 index 00000000..903def2a --- /dev/null +++ b/examples/demo_spm/ios/Runner/Runner.entitlements @@ -0,0 +1,8 @@ + + + + + aps-environment + development + + From 7f86e84d400fc0d8d5ede52c76d4dba8d1248dbb Mon Sep 17 00:00:00 2001 From: Fadi George Date: Mon, 30 Mar 2026 12:59:11 -0700 Subject: [PATCH 05/17] chore(demo_spm): add appgroups & background mode --- examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj | 2 +- examples/demo_spm/ios/Runner/Info.plist | 4 ++++ examples/demo_spm/ios/Runner/Runner.entitlements | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj b/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj index f17d2754..c9530288 100644 --- a/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj +++ b/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 60; objects = { /* Begin PBXBuildFile section */ diff --git a/examples/demo_spm/ios/Runner/Info.plist b/examples/demo_spm/ios/Runner/Info.plist index 06844e1f..83e431e3 100644 --- a/examples/demo_spm/ios/Runner/Info.plist +++ b/examples/demo_spm/ios/Runner/Info.plist @@ -28,6 +28,10 @@ UIApplicationSupportsIndirectInputEvents + UIBackgroundModes + + remote-notification + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile diff --git a/examples/demo_spm/ios/Runner/Runner.entitlements b/examples/demo_spm/ios/Runner/Runner.entitlements index 903def2a..34463649 100644 --- a/examples/demo_spm/ios/Runner/Runner.entitlements +++ b/examples/demo_spm/ios/Runner/Runner.entitlements @@ -4,5 +4,9 @@ aps-environment development + com.apple.security.application-groups + + group.com.onesignal.example.onesignal + From 36dd7543c58f2e3617f71fd277aa83e42a41d3bf Mon Sep 17 00:00:00 2001 From: Fadi George Date: Mon, 30 Mar 2026 13:01:41 -0700 Subject: [PATCH 06/17] feat(demo_spm): add OneSignal notification extension --- .../Info.plist | 13 + .../NotificationService.swift | 35 +++ ...lNotificationServiceExtension.entitlements | 10 + .../ios/Runner.xcodeproj/project.pbxproj | 226 +++++++++++++++++- 4 files changed, 283 insertions(+), 1 deletion(-) create mode 100644 examples/demo_spm/ios/OneSignalNotificationServiceExtension/Info.plist create mode 100644 examples/demo_spm/ios/OneSignalNotificationServiceExtension/NotificationService.swift create mode 100644 examples/demo_spm/ios/OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements diff --git a/examples/demo_spm/ios/OneSignalNotificationServiceExtension/Info.plist b/examples/demo_spm/ios/OneSignalNotificationServiceExtension/Info.plist new file mode 100644 index 00000000..57421ebf --- /dev/null +++ b/examples/demo_spm/ios/OneSignalNotificationServiceExtension/Info.plist @@ -0,0 +1,13 @@ + + + + + NSExtension + + NSExtensionPointIdentifier + com.apple.usernotifications.service + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).NotificationService + + + diff --git a/examples/demo_spm/ios/OneSignalNotificationServiceExtension/NotificationService.swift b/examples/demo_spm/ios/OneSignalNotificationServiceExtension/NotificationService.swift new file mode 100644 index 00000000..53462085 --- /dev/null +++ b/examples/demo_spm/ios/OneSignalNotificationServiceExtension/NotificationService.swift @@ -0,0 +1,35 @@ +// +// NotificationService.swift +// OneSignalNotificationServiceExtension +// +// Created by Fadi George on 3/30/26. +// + +import UserNotifications + +class NotificationService: UNNotificationServiceExtension { + + var contentHandler: ((UNNotificationContent) -> Void)? + var bestAttemptContent: UNMutableNotificationContent? + + override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { + self.contentHandler = contentHandler + bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) + + if let bestAttemptContent = bestAttemptContent { + // Modify the notification content here... + bestAttemptContent.title = "\(bestAttemptContent.title) [modified]" + + contentHandler(bestAttemptContent) + } + } + + override func serviceExtensionTimeWillExpire() { + // Called just before the extension will be terminated by the system. + // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. + if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { + contentHandler(bestAttemptContent) + } + } + +} diff --git a/examples/demo_spm/ios/OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements b/examples/demo_spm/ios/OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements new file mode 100644 index 00000000..c70461e8 --- /dev/null +++ b/examples/demo_spm/ios/OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + group.com.onesignal.example.onesignal + + + diff --git a/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj b/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj index c9530288..c03c9ad5 100644 --- a/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj +++ b/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 60; + objectVersion = 70; objects = { /* Begin PBXBuildFile section */ @@ -15,6 +15,7 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E8C8D1902F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = E8C8D1892F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -25,6 +26,13 @@ remoteGlobalIDString = 97C146ED1CF9000F007C117D; remoteInfo = Runner; }; + E8C8D18E2F7B0DB7006581CB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = E8C8D1882F7B0DB7006581CB; + remoteInfo = OneSignalNotificationServiceExtension; + }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -38,6 +46,17 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; + E8C8D1962F7B0DB7006581CB /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + E8C8D1902F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ @@ -57,8 +76,23 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E8C8D1892F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = OneSignalNotificationServiceExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + E8C8D1912F7B0DB7006581CB /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Info.plist, + ); + target = E8C8D1882F7B0DB7006581CB /* OneSignalNotificationServiceExtension */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + E8C8D18A2F7B0DB7006581CB /* OneSignalNotificationServiceExtension */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (E8C8D1912F7B0DB7006581CB /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = OneSignalNotificationServiceExtension; sourceTree = ""; }; +/* End PBXFileSystemSynchronizedRootGroup section */ + /* Begin PBXFrameworksBuildPhase section */ 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; @@ -68,6 +102,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + E8C8D1862F7B0DB7006581CB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -96,6 +137,7 @@ children = ( 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, + E8C8D18A2F7B0DB7006581CB /* OneSignalNotificationServiceExtension */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, ); @@ -106,6 +148,7 @@ children = ( 97C146EE1CF9000F007C117D /* Runner.app */, 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + E8C8D1892F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex */, ); name = Products; sourceTree = ""; @@ -155,10 +198,12 @@ 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + E8C8D1962F7B0DB7006581CB /* Embed Foundation Extensions */, ); buildRules = ( ); dependencies = ( + E8C8D18F2F7B0DB7006581CB /* PBXTargetDependency */, ); name = Runner; packageProductDependencies = ( @@ -168,6 +213,28 @@ productReference = 97C146EE1CF9000F007C117D /* Runner.app */; productType = "com.apple.product-type.application"; }; + E8C8D1882F7B0DB7006581CB /* OneSignalNotificationServiceExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = E8C8D1922F7B0DB7006581CB /* Build configuration list for PBXNativeTarget "OneSignalNotificationServiceExtension" */; + buildPhases = ( + E8C8D1852F7B0DB7006581CB /* Sources */, + E8C8D1862F7B0DB7006581CB /* Frameworks */, + E8C8D1872F7B0DB7006581CB /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + E8C8D18A2F7B0DB7006581CB /* OneSignalNotificationServiceExtension */, + ); + name = OneSignalNotificationServiceExtension; + packageProductDependencies = ( + ); + productName = OneSignalNotificationServiceExtension; + productReference = E8C8D1892F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -175,6 +242,7 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 2620; LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { @@ -186,6 +254,9 @@ CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; }; + E8C8D1882F7B0DB7006581CB = { + CreatedOnToolsVersion = 26.2; + }; }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; @@ -206,6 +277,7 @@ targets = ( 97C146ED1CF9000F007C117D /* Runner */, 331C8080294A63A400263BE5 /* RunnerTests */, + E8C8D1882F7B0DB7006581CB /* OneSignalNotificationServiceExtension */, ); }; /* End PBXProject section */ @@ -229,6 +301,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + E8C8D1872F7B0DB7006581CB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -283,6 +362,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + E8C8D1852F7B0DB7006581CB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -291,6 +377,11 @@ target = 97C146ED1CF9000F007C117D /* Runner */; targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; }; + E8C8D18F2F7B0DB7006581CB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = E8C8D1882F7B0DB7006581CB /* OneSignalNotificationServiceExtension */; + targetProxy = E8C8D18E2F7B0DB7006581CB /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ @@ -593,6 +684,129 @@ }; name = Release; }; + E8C8D1932F7B0DB7006581CB /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 99SW8E36CT; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = OneSignalNotificationServiceExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = OneSignalNotificationServiceExtension; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 26.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.OneSignalNotificationServiceExtensionFlutter; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + E8C8D1942F7B0DB7006581CB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 99SW8E36CT; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = OneSignalNotificationServiceExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = OneSignalNotificationServiceExtension; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 26.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.OneSignalNotificationServiceExtensionFlutter; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + E8C8D1952F7B0DB7006581CB /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 99SW8E36CT; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = OneSignalNotificationServiceExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = OneSignalNotificationServiceExtension; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 26.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.OneSignalNotificationServiceExtensionFlutter; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Profile; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -626,6 +840,16 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + E8C8D1922F7B0DB7006581CB /* Build configuration list for PBXNativeTarget "OneSignalNotificationServiceExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E8C8D1932F7B0DB7006581CB /* Debug */, + E8C8D1942F7B0DB7006581CB /* Release */, + E8C8D1952F7B0DB7006581CB /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ From e2fe35cc5d588a9ea2c0c5699663a4911d008674 Mon Sep 17 00:00:00 2001 From: Fadi George Date: Mon, 30 Mar 2026 13:02:06 -0700 Subject: [PATCH 07/17] feat(demo_spm): integrate OneSignal extension support --- .../NotificationService.swift | 31 +++++++++---------- .../ios/Runner.xcodeproj/project.pbxproj | 4 +-- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/examples/demo_spm/ios/OneSignalNotificationServiceExtension/NotificationService.swift b/examples/demo_spm/ios/OneSignalNotificationServiceExtension/NotificationService.swift index 53462085..ab391a33 100644 --- a/examples/demo_spm/ios/OneSignalNotificationServiceExtension/NotificationService.swift +++ b/examples/demo_spm/ios/OneSignalNotificationServiceExtension/NotificationService.swift @@ -1,35 +1,32 @@ -// -// NotificationService.swift -// OneSignalNotificationServiceExtension -// -// Created by Fadi George on 3/30/26. -// - import UserNotifications +import OneSignalExtension class NotificationService: UNNotificationServiceExtension { - var contentHandler: ((UNNotificationContent) -> Void)? + var receivedRequest: UNNotificationRequest! var bestAttemptContent: UNMutableNotificationContent? + // Note this extension only runs when `mutable_content` is set + // Setting an attachment or action buttons automatically sets the property to true override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { + self.receivedRequest = request self.contentHandler = contentHandler - bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) - + self.bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) + if let bestAttemptContent = bestAttemptContent { - // Modify the notification content here... - bestAttemptContent.title = "\(bestAttemptContent.title) [modified]" - - contentHandler(bestAttemptContent) + // DEBUGGING: Uncomment the 2 lines below to check this extension is executing +// print("Running NotificationServiceExtension") +// bestAttemptContent.body = "[Modified] " + bestAttemptContent.body + + OneSignalExtension.didReceiveNotificationExtensionRequest(self.receivedRequest, with: bestAttemptContent, withContentHandler: self.contentHandler) } } - + override func serviceExtensionTimeWillExpire() { - // Called just before the extension will be terminated by the system. // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { + OneSignalExtension.serviceExtensionTimeWillExpireRequest(self.receivedRequest, with: self.bestAttemptContent) contentHandler(bestAttemptContent) } } - } diff --git a/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj b/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj index c03c9ad5..df9395ce 100644 --- a/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj +++ b/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 70; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -197,8 +197,8 @@ 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, E8C8D1962F7B0DB7006581CB /* Embed Foundation Extensions */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, ); buildRules = ( ); From c90997a177fb60c8405dae49892709735602271f Mon Sep 17 00:00:00 2001 From: Fadi George Date: Wed, 1 Apr 2026 10:34:43 -0700 Subject: [PATCH 08/17] chore(demo): add location permissions for iOS and set examples/demo to not use spm --- examples/demo/ios/Runner/Info.plist | 4 ++++ examples/demo/pubspec.yaml | 2 ++ 2 files changed, 6 insertions(+) diff --git a/examples/demo/ios/Runner/Info.plist b/examples/demo/ios/Runner/Info.plist index b3283c76..c510f8a0 100644 --- a/examples/demo/ios/Runner/Info.plist +++ b/examples/demo/ios/Runner/Info.plist @@ -43,6 +43,10 @@ NSSupportsLiveActivities + NSLocationWhenInUseUsageDescription + This app uses your location to personalize notifications and content. + NSLocationAlwaysAndWhenInUseUsageDescription + This app uses your location to personalize notifications and content, even in the background. CADisableMinimumFrameDurationOnPhone UIApplicationSupportsIndirectInputEvents diff --git a/examples/demo/pubspec.yaml b/examples/demo/pubspec.yaml index 52577bec..1b71ee24 100644 --- a/examples/demo/pubspec.yaml +++ b/examples/demo/pubspec.yaml @@ -33,6 +33,8 @@ flutter_launcher_icons: adaptive_icon_foreground: "assets/onesignal_logo_icon_padded.png" flutter: + config: + enable-swift-package-manager: false uses-material-design: true assets: - assets/onesignal_logo.svg From 36ee76a94a7372991a6a52524dc2425f95433fd9 Mon Sep 17 00:00:00 2001 From: Fadi George Date: Wed, 1 Apr 2026 10:41:05 -0700 Subject: [PATCH 09/17] fix(ios): reorder imports for SPM compatibility --- .../Sources/onesignal_flutter/OSFlutterLiveActivities.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterLiveActivities.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterLiveActivities.m index d7fd4eea..8654e393 100644 --- a/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterLiveActivities.m +++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterLiveActivities.m @@ -27,8 +27,8 @@ #import "./include/onesignal_flutter/OSFlutterLiveActivities.h" #import "./include/onesignal_flutter/OSFlutterCategories.h" -#import #import +#import @implementation OSFlutterLiveActivities + (void)registerWithRegistrar:(NSObject *)registrar { From fddf755d7bc5130782c62347d921131b728d248d Mon Sep 17 00:00:00 2001 From: Fadi George Date: Wed, 1 Apr 2026 10:46:27 -0700 Subject: [PATCH 10/17] chore(demo_spm): replace symlinked gitignore and add flutter_dotenv dep Git doesn't follow symlinked .gitignore files, so replace with a real copy. Add missing flutter_dotenv dependency and .env asset needed by the shared main.dart. Made-with: Cursor --- examples/demo_spm/.gitignore | 49 +++++++++++++++++++++++++++++++++- examples/demo_spm/pubspec.yaml | 2 ++ 2 files changed, 50 insertions(+), 1 deletion(-) mode change 120000 => 100644 examples/demo_spm/.gitignore diff --git a/examples/demo_spm/.gitignore b/examples/demo_spm/.gitignore deleted file mode 120000 index 590ac178..00000000 --- a/examples/demo_spm/.gitignore +++ /dev/null @@ -1 +0,0 @@ -../demo/.gitignore \ No newline at end of file diff --git a/examples/demo_spm/.gitignore b/examples/demo_spm/.gitignore new file mode 100644 index 00000000..b841075b --- /dev/null +++ b/examples/demo_spm/.gitignore @@ -0,0 +1,48 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.build/ +.buildlog/ +.history +.svn/ +.swiftpm/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ +/coverage/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release + +# Environment +.env diff --git a/examples/demo_spm/pubspec.yaml b/examples/demo_spm/pubspec.yaml index 7062405b..52577bec 100644 --- a/examples/demo_spm/pubspec.yaml +++ b/examples/demo_spm/pubspec.yaml @@ -16,6 +16,7 @@ dependencies: http: ^1.2.0 url_launcher: ^6.2.0 flutter_svg: ^2.0.0 + flutter_dotenv: ^5.2.1 dev_dependencies: flutter_test: @@ -35,3 +36,4 @@ flutter: uses-material-design: true assets: - assets/onesignal_logo.svg + - .env From 97954b49a24014223955299ebc0233b286b34548 Mon Sep 17 00:00:00 2001 From: Fadi George Date: Wed, 1 Apr 2026 10:48:55 -0700 Subject: [PATCH 11/17] chore(demo_spm): update app icons for iOS/Android --- .../drawable-hdpi/ic_launcher_foreground.png | Bin 0 -> 8752 bytes .../drawable-mdpi/ic_launcher_foreground.png | Bin 0 -> 5085 bytes .../drawable-xhdpi/ic_launcher_foreground.png | Bin 0 -> 11025 bytes .../ic_launcher_foreground.png | Bin 0 -> 17788 bytes .../ic_launcher_foreground.png | Bin 0 -> 25554 bytes .../res/mipmap-anydpi-v26/ic_launcher.xml | 9 ++ .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 544 -> 3492 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 442 -> 2130 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 721 -> 4548 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 1031 -> 7316 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 1443 -> 9755 bytes .../app/src/main/res/values/colors.xml | 4 + .../ios/Runner.xcodeproj/project.pbxproj | 4 +- .../AppIcon.appiconset/Contents.json | 123 +----------------- .../Icon-App-1024x1024@1x.png | Bin 10932 -> 70226 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 295 -> 607 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 406 -> 1486 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 450 -> 2284 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 282 -> 996 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 462 -> 2155 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 704 -> 3427 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 406 -> 1486 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 586 -> 3166 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 862 -> 4841 bytes .../AppIcon.appiconset/Icon-App-50x50@1x.png | Bin 0 -> 1936 bytes .../AppIcon.appiconset/Icon-App-50x50@2x.png | Bin 0 -> 4107 bytes .../AppIcon.appiconset/Icon-App-57x57@1x.png | Bin 0 -> 2171 bytes .../AppIcon.appiconset/Icon-App-57x57@2x.png | Bin 0 -> 4663 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 862 -> 4841 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 1674 -> 7623 bytes .../AppIcon.appiconset/Icon-App-72x72@1x.png | Bin 0 -> 2953 bytes .../AppIcon.appiconset/Icon-App-72x72@2x.png | Bin 0 -> 6127 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 762 -> 3107 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 1226 -> 6710 bytes .../Icon-App-83.5x83.5@2x.png | Bin 1418 -> 7352 bytes 35 files changed, 16 insertions(+), 124 deletions(-) create mode 100644 examples/demo_spm/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png create mode 100644 examples/demo_spm/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png create mode 100644 examples/demo_spm/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png create mode 100644 examples/demo_spm/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png create mode 100644 examples/demo_spm/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png create mode 100644 examples/demo_spm/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 examples/demo_spm/android/app/src/main/res/values/colors.xml create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png create mode 100644 examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png diff --git a/examples/demo_spm/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png b/examples/demo_spm/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..95de5cbfbfe878fc8ff2a8dd54c4fdbfe1e4b9b1 GIT binary patch literal 8752 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 YsgMdPYkFgTOoBkk%cw}#0ZoGc2b@~;N&o-= literal 0 HcmV?d00001 diff --git a/examples/demo_spm/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png b/examples/demo_spm/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..639bc1f7e8b1735232957950cc1bb4256958822d GIT binary patch literal 5085 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 X!oKu;_uToX?eH{Ibd+nAkP-g@5zmHg literal 0 HcmV?d00001 diff --git a/examples/demo_spm/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png b/examples/demo_spm/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..db57e20526b30e8f576418e0585f54ef0e810130 GIT binary patch literal 11025 zcmc&)WmjBHvmIc7!69gH4ekV&!689|```q3mtm0L1PcV0V1eMSg9o=@!6CT2!{zx0 z_uISH>C<0&b)C~)Ro#2!XYX8ce8Ka;~ zX2deGwoEki!2p`jH&VXKiAP6IFSTgdzS%rZHw;b!7f=3zVuNkp4;N1|d^*41#o~g1 zh}NLRRs^6FlQfVHS1=SLN9_#4ivh3U(vk$jX=Jz%gQX)NK*TS&T_7Mf4Ga%NF7>}0 zxQX^5Qa7D8)$5o>!(II&eU@3_lpq?rn#}JW;Zm7y=R9KiwX=rDDkzEovP$jZw5C(N zw#X8tM*Xz9UDYD%*dm)HG21r`-`1X~l}`L%&}@+!AU7d`@H2}?PT*@hX3?rVc9oUO zH_R?40?{E8Fr0E>O6O4(GDX=kpYMb=K8Bc*a3aA$Oi|~6p0wrc{tp@TZSzZ+CiXm8 zqNY4VL>WrO`$yMuoHv~;d4#ki13#EjT#)$wno85s$zxC0R34GPI~e2wbHnR|FR4fX zxuu<+`|-IHxqnSNzm_=(r!7xZ39RNy=vwe( zUGOO71{!srP{WW(5R^5fX=%e(a4C3QG~Gvj03+*I_meAr|9fC*bXRwnEi##-piA(~ zBEet0D%w@yWr{M}&x#w$IoR)bF0HV7$Zly_=8qp(u);b3;C3O(ywWB!` z7d=~Eg+n<3x20bC5@UFGrzY*LtTE%z`i354PUqlq}Y;#vtWz^3_@ZV5% zveKNLAr_dvWbBOpn%C24Pm1vL!0oDl={B?7HygL>ED_*|^$`CsUz@Acr5R7zgJITN z_1=#l^xz1*e{L$@{gas_x4CfbNVZA?dqNW~)qJwJIsSMYrRp!!3l-%<2@aGtD!`!X zbo+gpv^t~d^epc($-AX(r{yOQRf*g648T*Ky!qkY{8C!6Z2V~g2I4#T_~)LTPd4(M z=f3;N)g-sZDr@`cl)>xwIeNA_94&KnNCF=y1o{U|I_u=`f6`aeXQiHbPzFr zVuBo2vLRZsCSo%5`iW`t3Q;g~?Y%(Aq77o|BnW23+f?=wZf=Y6cMBzVm;Xiit4#r2 zf#a%>yZ3$Kbg|XRugYP^MWWMqZ1yy0(Ju1my=Y2R6+I5Xhb1dQUQ8}LVcbG@6m?sc zh{QxN^x3Ew2{$^x4y_Wi_SrUhsIG#ptpu|u(>U!J>3hbHT-cw4T=p(+wL#s@C0;H98zSCAw{YF{LZU^f%??KcK z-)rUV-i+2u*II8;v@*0-uX8aHo~2!Uu5 z6XZ5T%IQ3yU!8ose9rOIkq0UD>4||Eo`ReSs_9%js^U)aH%^xL-g`R#8pR$kw-pA3=~2U2Eicaoux^POP+*>2h`0(rf^Ezug2m+s+9GwE-^5Urqdw@Y-ifWq-Msr)K+)Wy+F6f7{BIOf zO~Xf40sUIZcid8gHlGSpL7+fA!Q2f!xb*Kgm)NC#itOFV62dQd=rE3zXv6 z`(pqO7>{W^owgQ-CnNTZp}kmE@tHoF(BH8ZNuGGYrOKgKRN^~#B7zlD!k zxc>%y%l$e~vA67%1Yn9ZA%24nuD3x5#p(!OG%nL(s+_~fKIf_0+71@u#L3M^7nP$^ zV;7RB*#Bh3XB{1=Sqc!Yzz?;wg3;3<0hx`!Pz&I3sI-G-Oedwxa!au3U@hQXtx2lE z6rF=d!l15qZuPp_n*KsyXedOuTDRVEZH(eC&)p?xUb#A2b2OsOO3!h&VY!T8gTm8-;wqm zH0C=56BYi*n8VqqMMdAP>O=Y1pS-rAoQ#x19Syy&ljmYNpu&u~((_9iAFLe}5{B;Y zr#IEsh1J+i(5L>5A-o{wo9483P#&UQhj;|>a}jeq^F(d^!wA|+$7b|a$wD|Nzhb{dOvLMvOiUw~rzDkqySYJQwuN3|(n7xW>FvSCQkndcpsVq}p3`|q(izLg zx#GRFyU2cQ^^5p)?s!R$cQq4eF1bFQXb~cPC>5q9jbmgYwQN4FYpG?lJD=-EN13Zu;l7B+$F(S9xoUvnG{K?vgIi46# z-l~EfT!;x^&AGU28T=ux*Q?ZQ1wn9MzPwLpEtbQ%d(As=Ew$eju>`Wpv8riTK9+q& z0a#b4h*MRb)HcY{CSfV<5AAeCpWhzXg&z2e>E!;CGHc$qg}3dQJ0A|CpgSDxBTSt=iF;&mRO14tmZh(9~)%2_>#I;a< z0{vRk_kLQMuZ2w41Y8QZIxh@fe&1Pk@Qipc9=yk7+c(GKr+6`!mCxp@ntTsw& zUaf^t$HZJ3@C6$ptaFN@Dn}DNc&gRXD84(Wt_a#L@^f`7LfOQ0S3~FLVX@ua%xZ0e zUt5Obp-Z+}a4V>RdsIm(QQ7>ip<4x`a6bOKfOgNYe7FY_Drr11Y~wXcheUO=TB zhMDp{pS=OJ2g@cg*=lNDCVwByqS6g2y$t9ioyG=cL2SYvr|PoHm`wiCdzR#+Q+-uy zo7)5S98`u}!1E^bwVdjM??%14Ja0j}+v68UZWpL^y1EySJX~zL|Dx?{py@e(pTd3- zZW+MXDGVpjJPrK2kM>-*!2Fi#n4E_VgSh;=q@AIs?RM|~gt+vvcBE|4Fw7A?zesKm zieO(|5J4RWr>RvwSiSf)j3qHsen%d4YU{JzEhUUJ%ic{CekrWAHipbaT+@^QlQ6}ge)fqwo)b9Eb5bM9c9SyHDRNQNBky?Z~AIk%GE=BR}4+Mi5qh5 zmHJ0B;Lm$I<&}6bYAVFKE5;ZV`MkN=7eJ8A;ivRm)C}KQHXBg`L`tFr*=jI#P?7xK z=-Tu6QOFGR)#HHEk-a~^D-OENkNFH*uOLZLJji@1+2IMOLAKAaKS*OeU`EgM!+}Pk zOpIg=v@jMFe)=kLj+>@75hD9HgUnobd0D>DSlxz)sM;1xhR+8ROZj$P4kLn)!H)B6 z)QFhmVy!q)dZ1g2PVnoq**NC8O6SKmsu*;J5^J&E`&!V!0*2wVBhuox@%gs7yyogg zM?rT8LD|q^S}tyR>WAgc#NFyIId;*wQLV61*OFqm1 z8|y%`mI^_?+YuFm#c8RodMm3eLb?P=_fizVOf*NfkV1{@H}RJ;V+neeAg z`$Er)BFn|;)D1-y2I5d2ZY0c7M<;B)T&mmoW^<9Mm=ilndvnekp+$OO0IFK4=_4M; zM07hDoAzx3^1Qoq!0M2@H9B066YMF+WxbSC)po2yi4z3p7Uz%CH;jzq*=`%R1-FEa z6m3LGGSjf{idj1~J~xRgf|T@3PBa)3c;Nn29e_FdUS?Ww*B;{LM^^CdxB&RKS>G2f z9`qjqtH1^a6EjsumAKeWuf07D3}w+3-hR8TemU9r*kpy%opyJ9wXw{>pEpvHSWjiF zU2ey;o(pm4(-XjZhL1G~7 z(O^)+7wKD31e!}W>6X7GqU0uR&6PP6i3nCc35zqSxBn~k&n)ujz)6zdmmtDy^A!CP zL8x*X;9F$}GJGjv!l00HUjEmyx(y%Erq*BnQ|+pUB$4sNi8_?VOz(eOxFyxmckhxW z138Km<4wLzz?KpEz2>BDFUCzJ*3|kf7O*zET3j%+g`)C9YlVy1ydS;0LehRY;CnNZ z%+%OEQy#9pI`(5fnckIg+|LhHK`%(2LfuX-gyg7;XNX_(_V6$##FA9g0JHHDec})^ zGo?dzRWx*K15rwCKhvhrRM^$42QY>Y`mTQ~NO}YAHN$5}SK|+AD^$it!||AqLp>-q zpuwd08Z3mM%&JAbyGSO=q=$`SmOdL771Q#(n7;4Cl`$;TMqvNR{*Zn5WBek1m~zuf zBMm;Wydt;Y4HagE!?S3AKn-Zb?*@9_qCS5|VJWZz81)&b4xuP0$REJ#sz@}&OTc&j z@?{t9vR9QikAPk|hg9_531Nm?h0lSE3BCN~8PJV_g_vg;ti{JhhcvRT4@p0r!ib5D z`>up^)kJ*jLFdD$`?^8p)LK*+njqlcRiGel!! zT7CNPs_KHSsOB9NMxudh?J~ct*BCJ4PtovZoS!(2z+);2)rv3$3%fI2?Ti`<^#x@d|NaO1~UI`s}e9;ZvW%{5D(-Ocj4g zop-hqyg1_^ABN$2u0(!=>3lS3KqKLhn~lOUju2z!aCsS(+p5DUdA9VSw{7_L3f{L| zOFW4q&*cqD^Eb!H*;otGnCNV)CqOiPP|V$F5+)^xAF~U0Znyi32D}o&Rr#9cf%$xe zwg5*Vb$wFL-pN#fXE6U>yI{Wu8%`Ugz=TxHkw3wf2=-vq_uEgeKP#j7BVGT?E1sj1 zKmAZe&`gUpI$};}MuK~_A8ACKu4^^KQZRs9Ij2K+i(bqxKk2agU6vT8 zw51JSh}Z1wsZ}v=CGenf=DH{A#f-K`GN$=@G7G87WZE z2?g%w$KmuvS8hPh{ngrh*Lb1vb!I`X)Z!Pe;Yns@U6|ysignw2eexdGF5jP;Z<{Q8 zmp@e>n2J(5XEXP&qT++qvT@ZlHQ_ayk@y?X%7J*UtrSS*ui&aQ6&<6Ztv@3c@a3IM z`lP#{H85a31>#~_W09F7UqCA?PU&Y8I(95I$ag3B16`2`eW|YxKmxmqVqmDpE~tDK zmyKXJ+wB@mP15zIBf$d8exyg!4O4^C)w5dRp&ZJ)MH)K9(A|(Q$;I^UR~Kf9geWq> z(cNwOHqvCivppxy3`K*8oPZy{4V%mIv3I5S;G%;|qTxRWQeDf}1kuJDxmS3ttNiGa z1L0-rNXy<=ewPzBjN(eO-$BgQ7OD&!Grtqvw07(18as#p7A%Ed^;;8Hy=mN0Aq=(jyMWv*Hzz5MJ) zN{YaRjP$q}P)g8DE^*$6*M`T&!N!JsQ|??DE^7--*MH;zzDVNK^~(W9D#d*x^y9b8 zHKo;A@|XZ_RKdXlFy>Gxp<{BA(T!7A1CRG;&UN_4OJB%ZR9P6-;_ThcxUFU>j@M!# zX6gN7wePf9tH1ctwq^kZ|DyS6;Q!`EqEJa7c?gtM{NbIziM<{Ram@p?isb8ABwp#; z&s%~Jx*Z3OW9eOyo4Cu?rvYKF_QGfni?JDcR5^yy6on73rFLD+Z{)hUv>7)~<+xWs z?}$NXt#m|wa1urd9zSjsV((u>xWE6sJbC^47$${1jh8m@mE*bE^7Z~e-h>#JV-DeFiR*e;a3AGusI=&4zt=@>4 z!A~F~Nm{tsx$(|;dFTv#Wr_OEZE*rC2a@DVa8~>m)0Zpc4y9C<=1c(hIN=td4PC<< z>)Z9!Z>KIS)4J)p*c=5sKY3R!L>S=|Qp4(rIf8LTqIRoHaqPX3oq)A1V)I{0d}2nS ztw?|A5+JJ2 zX1g-l5%%GOmStm#DbYIS3P{_uUh6iWh(riamgsRkgo%67D~ch5&j~02AvxWzOS1$l zy?;NiB_wM6=!F{hx?xt0t=R|==WK0zaeui&+emsd$^_|C9KK{?IXSabH@>yL4wCRQ z<0{>uYSsHfCbKdKi_QcEqG{a8F zd1qr+x%1fut{)6N{w$>G$%~W&pd1BH3py(#+%;8NAXyE#I=J_$l^PkAFM zCrpk15WHPd4*0tbZ&Br_oHPDozcGq{+lGg!{<${AONXV>n9Ch|rul+e<>LU8RB#ig z@f#&rPVPUMJ+U(hx69LBHjSMs6KCJ{HlMET6v)oVC}S&YicS{UWa@6`A&(~yA&u}) zK5?QpLM{7@4{*sspyCd}q1kn!+q@-PxJ!x+Ih0}IHrpp|-tg`WU1 z@mCIyA`hVqOpL)iBqZOpG0{=Sn+?IYOcplf+sMit<8FI%2wV6B!{#19A8uJ%6E;DF zi9c2CC;lizV6p&MeBo_W10)8|Gkyv#&VK`+k4cqJ$WMEvl5ssP|Fiq^sDY(@TCcE6 zN#Bf95MgR1;7p~6I10?;jVlf8xZN96&Ll%#?2qj7s;8Z)*gfkT;pg-mq)0uP{B9K|3Jw;dfcw`*M1cP zW++~gG{#1lJ>>TGk8f)uGkZk3&||~Nqw=eS=`W|RpB^MdkFd*EK3*!r=k9`7(Z`D-E7IA{DrM4R$1EeFuUtzKXBOh z0mMNjG6~A^oB)KiHF=&)H3Tu5Eqte52@$d*tfguszm>jGt})T}4nQTr&8Z5PK##ZA z++2VNGr!|I6``UUl=3?t>hbPqT{J#@P=+t7u7D%Wi5UX@VYmymib6NX4qGSYaX0Ou zpG#foXPugp2nwQ;%TUjpQ@fCtI!?_tZ)rH&csam#*P24S5~ zVW+4i$+>Cb6fePHV~!7>i8GAj7mQ3E=!`8LkT{Va@*1{LiF@XI2|TW92bk*o)^MAs zd`LoFk+lPCQiARO9zg=1a_CdR08oa1t&PIXmkgW@JhR|JZfO zk$R?J-Vj`@{M$>%mnTb1jDkO%?J%peDEi$4TQuCtsSh<)=e^UMe~2_yvZqQHKJVMWG%QWS!l zRg5}v2{+>OhZ_Gr+db0S=TCc!ZG+R-BHpa?UH##7JENn>MubDpf?H`(EL9ZZz#6+R zkk#_4jwiTKAm)6~eAuEP;ysV$73$sZgVWVK5)^x%0l1Mj>BG9VL!;4sQOh~Th?xV5 z6SB1GkIJ&2;#sMG*^vb1O&6a7q9JLywgkK<$aX3m6DTXlKfJN%-oSjXSLbET-g2f1 zICg)-2#^mfDZLvB)<(G?SV0e;*H`awF}7_?)n75Mq_kdVt|AvfKQ9lSZ%hn;km3G@fj&rO9~MEz7@iAOzn+^r zjxV_Xi-2V5#=*y9;jbMF_`ozgS^6Jr?Tp?p*SLI@J{cpiPlT9AHG5t#`_uYzan{OV zwC&goy+Rl}*X~Ug-`nUaj0T!EBFySL*M%>yf<(~ywF5W5PRpz?uPjIB662!iTy&(Vb z)8h{qu^lh#+WPraQM7NTP1s1&Mm*BTwc=4otkd~*#g5&P6J^wj%V8eycOVCH6-rq0 zCs+R*lO)FoWhGts@H`JwSVsC`sg^n_&QxoK_}gj=AqmkPv--)Eq~6}XRb$2tqx7jU zS8vgr+kolTlVHy?vsraX`tQeE#CdxQJJ8Zn zOOM!G`Co`f=Y{iR20>V)r0KIkYZy}1>oudkRz`cWE2sh$xO_00Z#hEmUoz~zY~`;J zI_eE{(LolPkqG8$4H&=R_Vr8NvT_CoUXeNzXYQ)e_zN?rAB2L>e#Ld7Y2K_H7*y`zRJ7>Z1a2zNZsG9%c{w%mnDGjH zpC60H(uK?VaZKD#qgZ7cNWk95ap)RymZC-N`=E@ga2job5LTGdxQy*?&&F42h?Sht z$m;P3%VYj3<}OjV7s5|vfvuw?I<+ytPuXLpppVTUyB>!`(R|Uku{-cHUy=vXJw+wz)DQ! zcpl#J3^BbrSYs9+xYu9R(sB4L8TmORCKn&Gdc*$AjgFRXz(dP0fbzj)Q_KV9vdkE1 zSwj_p0V1G?{wq>7SsEGv!clk=F{!vU&Ui zMLF1SoM5v*#9|H16?8`^*s+MP_D{>Vqf?F=u-Bwcox#&5;6ok(h~qSC+InSYZxiYb znZEBL-8CoKkzePEa&t2wOJ_EweOwhZIbTYo+_Rgg#I1qn(~m@MlS7FcsYr8G4U8qo7hIUU ztS|FM5||VT#YB;(D*bJU`uL5xPsfyxr>OB zpG1Gl$D!MBM*H?|JLCj=^jLLPY@T|T*J7NXGLk9!HD@%*D1^fG?2Lo|Mrejg>_HQOvecIk;~L(Gn-PXHbi29)efbv|$idOhx@ z8ru9?e=Pv;noUiqz_CGEjQom=d1kA4Hbl@Y8enF>)ZSDk8W?-v%)!TD2-;^PhBhTp z4a0?w;AHq$Oj?1Ey6mRI<~^CQusaXy{1N*K^$R*Ajr=*$Q*yL}KbK z2%tMlvNq|wIGPtbQuDc86t<%@L`-Qe_XKIidT22#yEi+Uw%j=#FY}Y7DwP5jiFu(h z5K!yfL0Uov?_I0i7fZ&$t-U~_5i8W`XjZt;8H(Ci+GI^#RKzt#%mCJ?K_kp^*c$Bf zWZ)Ma9!AK&*t{q2=J==8un77-5j8X!5`j{zA+b3>sVEYTIh=qIcE}GkLZFDg9L28M z*$%!g4MWi5C%EK_ahj}H-y-bD7RPP(3z^pQ@f%y`PAz{N89TtCVI;|am3p2V=)P1e z3PL90K#`$O+l8!}bFk;ZVzB28MJ{OKO+F;_%(tuNfRU^61s86Q^}DBk!}EaZ_i#G{ z!4^!75YuJJhN+Ei=QK?f#i*8*I#I}|L-F&&aeHo>5K=c!Eux6fu(?|3MBqJvF26lc zN8JU!qWH_P(bU&*?5g>`$Q+@W8V60U3%58!xvz1DoV5KjeC;Uf#}ono$De^nvcZkz z45Hyes8MopXd7hBFVb_jc$=KG)djxhG@U%e z*6CNHJt1r8cP-u1MMq8Qi^cRxly3C?_;wdeos1Q^Rq-oqo3jJ3bKK6pLywyFA>*h! zOCBfw2;?d${|b~W8|PHSGsVuIMi6o^V51o{aOZanS!%uz-D~kMV>MHKym#NoR=M@#Nr@iu@PF(HT>q zbgoQ_7ljy)k5*2HT~QyS_z(-teGZf(TxxFC&918@5DBdB1>G!0)RP6f=x9nG@qUD| zv|`3gj%@8^j~w5(IQ*w2RQZT{j@ho$P<-IB5wi$5j@*nV-o^46zd5{$ODpOTEd6bT z`g`X_Uu#w2&LV+x7oK8B8SYXc?&UeS@5aCy@{Ujwu;&ajGVR&=NR`d^Hm)-@;p(%$ zuC8tF$}osMmnLsz>*t+;W1OPm7sEe4ct-9>$6#~L6MD|g9g(>~oL*i9xehT=+H)%&i(Vuww0JVChiziY zAmFH2gO}eeBHp1+@}hl;7y0WVDrsJNM7Q2}3n`b9D#$#zebwFKUtG{)=o_~$E5D_k ze-q-0g?ETEucgy!?G&(FKaHPc#c?>hDI2Rmpe*yiuE3TtXYRXcI9U6_!X7Ywd?mQp zs_Y*Mx|RU1KjI8?{Cdf+*_dYdyf=Ijqw24uP^&OU0lS5fyq_UU%@%L2nq7x@DSbc< z23-@UEjbQ%CxxkYc%5|{#Cs?PoL}FDqS{0y0^J!DaN%|C`o~UXW&E8U>yKr{O8vaA z>jr^>JW~wobcePHDT5AU-55BRzkd~U^EI1V?Pk~zWFaA@FoTx!G#g>%=xBFz=9OQX zFj!smT{~)UNdkNR)r{(2eNa66ST>dwaQAJ#$>2m$DbNC{ErJ;EE$=+LzYY^A>ouI8 zOtiEe|9*1uabwyVwD}kTVLPk)LHt1eq^QO8#+spcr2Rd|Gv#+ME@gTCT|X4l{JG|* z*~KF9Sm!4*ey<3^6GJH=24H7odl*BNaLlixY4`gpa23Fgk09q37q*I$V~esPsrwh7 z(@m2%A;Cu37^q{kJcmlQe{)>&>#k^UkFUXNQ3{z>7r@=R+`##hr7=%}HY#02jX3+g zS{a$IgZFKTWXowDZMt@q&@(^Wd-)Y)!)<;GEzMW$sF`nO7rdq<{&>dIj82dYSA{co z%nrm{8vDNXUbKzq9WJPqIa!S7{a>2z`VMklg*9IJO0&ug1Yx|tGAM%f_DD`W*mcNC zFRx@`PG%yXw_Y^Z2RL-a9L<|&d>fjY?=*uYO};vDkqbHS5b29iW@jtl>Em|&1!W9u ziktFfN(H^1TlddoL;9;mrTf{hC5eMm`#d6wg^F2Q=Nu9z^BrP87k+4#YN9tAR>Va_ zL`?0u|1>cfhj8)D&CJZ`u@Mz4*z=o+yH^FaO>#AN+p3Rng7qa(eohwK33Hs TrsM6`QdfYYtcpy96a@BvY(e1e literal 0 HcmV?d00001 diff --git a/examples/demo_spm/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png b/examples/demo_spm/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..0f9c289765a0b1f396b67c45ee634adf6ee9014e GIT binary patch literal 17788 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 literal 0 HcmV?d00001 diff --git a/examples/demo_spm/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/examples/demo_spm/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000..c79c58a3 --- /dev/null +++ b/examples/demo_spm/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/examples/demo_spm/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/demo_spm/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4b7b0906d62b1847e87f15cdcacf6a4f29..88a040ba567177d631cd29073bbfb82ff719d4cf 100644 GIT binary patch literal 3492 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 SsxX-V0000P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ diff --git a/examples/demo_spm/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/examples/demo_spm/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 17987b79bb8a35cc66c3c1fd44f5a5526c1b78be..d2c144f1272de819c82601a6df553d94ba8b9e9c 100644 GIT binary patch delta 2128 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 MMhmO?R^1N&KP#<%DF6Tf literal 721 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy!iOI#yLg7ec#$`gxH85~pclTsBt za}(23gHjVyDhp4h+5i=O3-AeX1=1l$e`s#|#^}+&7(N@w0CIr{$Oe+Uk^K-ZP~83C zcc@hG6rikF&NPT(23>y!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ diff --git a/examples/demo_spm/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/demo_spm/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d34e7a88e3f88bea192c3a370d44689c3c..d241773d9bf8b23d9ec3084830b333266cc010cd 100644 GIT binary patch literal 7316 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 literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof diff --git a/examples/demo_spm/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/demo_spm/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372eebdb28e45604e46eeda8dd24651419bc0..6062e2827cfb8a12e8c93ce7ce9fdc832aa3e5f3 100644 GIT binary patch literal 9755 zcmc&)^LHIg6TY!+8;zSZ){Si&ZEPEj)7Z9c=LU_{IBD$0&W-Wq{VTp7cK4h)XXni9 znVp^InT=FdltMuyL<9f;C^FLGs-J7$e*+%&b5>oqg#!R+c4fpx)IGD$bKqRnHQq;h z9lVvy6XPMN3&IuQX{5FI=o_Q3As8VMyLQQ5C?Oewg34`*I)CMx>WGM_Br|}*Hs^gZ z#_pcq4;2I5cxyMgImYB~HV?CT;hZ=9F1Z~p9+tM=-l);hx4$Mj5|NXmD?&rSUlED` zAiE{e0|9jy(ByqK{}0guB}0Y!rg(+CtVU(xp2j#f3YBVw8GEn@MO+#r;?e}9aesuk zeZ^3kKrHc-Os4T`{^P9kIwMOEXXa!>L#LrGu660~ zdtqJN7gSBJNvlMgci}yd4;Pt^4=dT$_1Io(W)4W+dlZUN!*7AmeBy8%CleDt> z_31XKTgjiE;rY+;t(VP4I&2_$pm0Hv5TBj?d@|e!Ev-T%rW~ea_*XZC1{vnmBe-Es zLVj|ti@N*R&0h))()J1&eGht;>(v@~bMPTW4Vg7e2-TJELL>_-*b%dhF+w8eL(* z5~~||0(=GP)_Z+pe8~kByv43ymdXb#W+y|D;aFlcuRQH>*fR?#Z+W)P&1NT!#S^fr7WhlfkFVeiszhs52D3ryB8 z^`dWCi4IrG5;lpK#yXu~qf?Hkr$H|Aq;6Sp!OG&wX{BKGpgG1E_Y(NFTLZX|k?A;0 zX+7Usj2LV{sTum<7=2ijEpC|4Cd#JNx4Wbr z1fw+U&GzZN3I{_BSeDHFEg|8r$@=^4X=jBlP6=e&ppVjK;D+D;4RqHiYqjOwt4OWE zs}SEUuUGd^1z+MVoW=HELhg(lLY-DMj5?_2ct|5BVbqX4`d#`FW ze^80w8t1rsRz=rqsROMW`f~EnJgf+OhiI-0K(Ki$s;5MDgpuMO`lroids*K=A3H_i zmmS7jMwN?jk^mG#fZyKUOZCO-Ib)6Vdihc%8Uf!3A^F4+qK+;h_W4{NHMIy+>b7^* zM_Ec*f-J?{5xHIF*+=h1=(Vg^nkkH42xG24vM*o6-=sY%YI~dyX89V+F>eymrWN`F*yO@>bKO&a3pfPG{2La_I!B8rswgd(op&W1i5CA8AP zD5AKrldR4NFO2Ey*hhan#Z{+%{pAbJpPa58K6hgIh$UxnWGWCVubI0~PVL100Gw17 z;dYNmFjk-;#j^h@)oqvJYPnE>?lK)%X0sPf{rg2&x5NaWlXp>=33=*70f8s~0u=1; z6hD+yg{+;;2BIt2OEf9M_-Mye$#4Xwm;6Wfpbumo6&z*IiF zlgzt|te~3LA5`kA6@so!=AxMk?e7||dgS*Uh%kjCF~LMspG^a3vrxV6j9*#5-h= zdXPyUFmnC9+^_}K)=;FcO-+WnGp-Z-xYPfiDtg8Z3{}0;bZ_QB_t{xHZrADcTHMG& z$R30VQ7%jJLNXs@$_|0zdkMl~DP{MmKwmGPbfH)DKg`0=zN{VE)z9RDdr=K=_hA0d zY)_;rb{g-^2*}YdHB8C9_F_xPOOYw?->0w)M}3LYgG575Fqw@esQ0*py`4KSW?l-s zC`yw3&UH7s&h@&yA$W6sUl>oM3%4K#AwKqF6}-X0&8b$w5ABWS6lEUa|19&N-OHur z;eTp;?8eup%Vd1!{y1q~|0h%C3sut3*%Lqtq;ds?N~L{jMU5AHM;${EQSn6D?{-&$ zZafw^*F5cx?lG+lkVo`pZ(BgafC{Fwm`#Q^9bk8%m7!?uxwf+$0)p8sG1A`L<0vm1 zYSw{4ceMTD_x2a&pSKHEJkvSB+`RyL=Fqz8-BNOVwvTfp*8#Jj<{782#*t_$s*wBV zYhs%fSc6V6)`fB*s_4j2Uowc8bfQlG|lpBuwLg97CS-WKM+l(asF2mo~0p9b9db#m-+4+@GS6zSNYDTB5GX6`r54*J9_0tvMJTm=B7UxKIN{BAOh_-+-yP52 zaAL)z07b{<2MB-Rj&SWerLrn_Uau{9+U($pG(|F3pl&un1>>UtG0mEwSH=AtafM81 z6?N?DDq-jWC%lYT+PF4b@Hl4{cy;)-dpelC6t#jIQd*gTsOEfW&!$6q&}&`vcVh)v z7V3HZPQRA_+-jG8{o5l|br#o0o0hr384(+@b{0vkk$XS*mL(l!Ryl?MWvX1oKW@&r zhwMug2`A#*unZfh8Q#&SJr$4nc*aU0bkl(y{`2_(Ic%}edrsU^V zB2!AKN2tS65nJyy*WqOudekD)nw#hM_5L?1D6T@(3Ova4#MQHR|L62B9wl!b+!Huj zID@A#m0B{tyT5t z*pPkkSc;tQi7m}PP%3jXAV6@ck{r(1>v*gK;0Z-Vvl7aL8*prnR`j!*(ucGmVT>gN zvXVS87cGSq!}8Kr?--|rVxJhG(Zo!rm$cQP2WGFTH$gPQaf+2StSG?fh|C9@vL*9Y z@U=>eqqKmX8*g)B9a7RYa_J#w=9|}CSobf+VBcS&CyCsfnhm_@DaOH zb0JrSX&pOYVGX|?db;|zzgWigf#!6%8hmqRdxSR`{w>wT0?X2xJrKE zU^MXhc*&~HS0nzTWBzcjwOIW>-KE9FLdNm3S&j_iv>-LIkm9dxrrcNR$ptrLtbxqs zY4*$k5v+7*DK5F93$J+ON_N9u($up=`7gaIY=89N!v>1m6ZCThKsr$w4n`e!ngH`< zK8!Db5^bie+3KNr{cxd1epu+%rRhdT!*0M{m0Vvc_d5MgTL~KZX@R)%j%ktE2CTBN zuU=)pSdNvWiD3^twp_l9Oj^%6lODq$65sCv6zVuBRRQx^ZRsiGY216NVUclScatNK zgb)0z*;0!xtbmI!GNfO&g#>ur$Zv(A@okEGOhM%@7h)^@V#X5;nVWg=+1oW{EDdFqnwEo8vo9^;gZl_LTUnhz}ToAIv zEpGNNc3GNl^QFIE$1xQTBW9j_NY`zY~`m|;FO{ktT8Q@LT=~XT&R{lMl&V03M76?x@(&x(^tnYMfgI+ z|CEvNv~m9_Exn}iJ;grgqRKOB0fk*~%Z8v5WKj-Acj^PKIo&ewGper*B4vttnMOYt zfG%Q+;t0mJNu^1=E$@V!3s|&{dSD8cNh#EU1}`~dNiLwiux)sYmy2asTz)Qgl1FWi z3-*~_0HB&{m3{KgocW)xLHvhC@foUAG$6BTam)|->p({`g-8`OA4%C^`^1DY$hJe6 zx}z_kzFHqj=LI#sq*ytP!Uw97U#jnZC2hfs@2HTyiwIfpzaj;3W+5K)Df~T*- zf-m2wX0$nV8)v}omfG7p+&e;kAG2pSTb&-hhpUEoq@-bfn<5G{a52s>M|kf zPtYMv5SEdh&6hKACAC?{O?{n>8@0_-PgWZ&b>i1owffs_o6Q#PUMy!N%A1~g_9UP9 zEAo9Ew~DZZr|)mi6z$jcsZ$gdbp!Yac!;~`$m5)R@({*d55`;#O42a*kigUK+erSL`IT)`r@6Q z)E|R6JY%TzTAw@+=Hv~_yYl1hF$p-iN7KssfwDML5HEguj2K_O;P;}86gVTyVz0c7 z8x~uSl&_|)UdGc={lyKU1#?`;?~_%0`}6kWV*k!? z!~FHfpuF}$DGcsT3LL4Xp2W+JhQC1Xf7k2WD2%%LmmIzdFd8*JbLul=cp0~~)j;(I zrHxzb_YyKrhK^kQ`P|G_aDZQu9!_Ao-&l^_D{3!Euzb3bO~ma}QPygIXv3h>r4eP) zYt&dx<3*Z&e{Ep0y7pSHClgpVj^$e7ybzPxZpoxrnmKPxDoWb@H?>_Pz+a6WGpv= zONP8^V49ymcNw9HGP6TBhn4u;Ja2p?vIa^t6kV-lcJnwxvuU(&$kFsSEh_%*Q_k)K z>qd6iaqD=#fydqj8QRTv_%qm_jyE$bT%YQE0pT9S6~cW?AU~XayJWSelv_d|L_F^A7u*?F{oP0XYy}TPFzw+^$CCtAI@y(fAaNf% z(HK9Uc)3-%Y7N@L#4$tzV5Mt7w`xOBLs%Fhe&W-Gbn}xTi46i3bLlvUjvFqK%QYr0 z+4FFi8}gT2MXi!%g)UqElH4dl7C?F;uUxr!&XCo91=19?tS6gJ2{A<&n+ww9aL^Q7dr~XVmOaUMxYgVmJojA{6L`bF-;L`Z&wPQ*hO-=~i z6BI;9hMfr;3Vjk2Q_#cx^!9zf(Q^|azeRFwe58@72I(6Xo|Ks-JhOQb6 z83Q&{o-&IGWn^jEf=MW-Z6PhGwFcE#Pm(BNBvDq&g$<)%s>hfnAw)w)ZE06T0Acp1 zwEx(kMW=q2>yBzlOZ|l=Hxp-HrBM#34uE=-17{vVwIjar4)QO2|0XK?MC6H$=y=SI z%i>k%RrMzKHxl1+y|cOPIrj~pXTmZNVs zr3Y}A;p#={Y}t^Qwq=Q}s#k>Apb@v?VR1o3;5$Z{jUJPPvQ|ZT4Owdo_tGe^Oi-S* z(8Rm^9gF2@ryk#1D3s(WCBQ`8u%GxOb*1u<(EQZHBmQ(_Z|01&C0^Eo*?P>f(_Ev@*xvJtZbVm!xEgpvSMsQ7f$L<`bwWD zwX7#CRvUIDyD8XrzZ~!xp0u|)eFyO?T-QoS4ArMP)uZLyUyAmA{8NdBcZfFR# zLq3o?WhvxL$oHEzhZo9xCGVihoqtqpHgP?*9U+qrNb z#UF@?cU_fhmw0nng}*S4gW4@=Fca*_4y$fw_;ga-4Vp+p`D;6`?<2+v2ROgh;DQq7 z_<&GCZAi6HcNGC+(`{AVcV&PnBmxt>zMfw-QL{K;f1?+HaJTY=}348Up4jm>qS(Ott2+&4IRleqSTr#D(gAw6S7}t<_s5vFl*1# z&~P2Xz^COd3WY)?F^T%i_5KPI6Nu^7#Kb9xbUbHDQ2=h-$hC{kahup47VV7w<+Og| zfzRVb2b}46a>aW`-%*$GhdWZ=kU^Rho72~9)uP{Ib%DhN2byVd1XcH+*9r$B9sfT) zA#u))TSTk${sQM~bj-1Shl-YA$OVQNm|rwzrZQqqU|7{G*!PisENgMUVMOp$zs8p+ zow5oCPqFUrzW3Em_1sSb&yhJXr~(blN_=k4?vWHU7)}JF@29pz1wGl^q9kh7J~^XX z)}o!)n=Io=J4gBpd;raL(=Ol?+}F9oq1YpArYLohx?325|4yC=4eWO7VP;r=)Q(EM zwVd#DxiNlmWBshsRD{DL$gOX%lSz1Cx%j!2U5K#dO(9)5NDqiRVt>TnrKGA&SB&mI zB(1Nfu;j6tE)`Kp0z$xEykv?Fo4Yz+2b3QMQqhFNC_#*ageTfv=rYtZ!n|-PN`h)l zZqwiKYhc5kSb_2x(3h}6ad53MMvl75j*q^naV||-PF#(+k@OJyExJts3}4O%&v zo6Y{tv8M~aVXLT>Ia~Mt`0^#f`<)>DU+exL@t?25ra;ezBZ;>aCIw*rGwQ_s{92R}g(+`x! za;5eZMp}Yqlis{ihdcP2tvj5rSrEk|PZ1THN64Aq(SP{a0Su8qxx z?gundOg#MBQzEbcCZE8|C487JIweB9Stnte*PD1LuT_M@lfLYiJVW4pu1{a1(BCD$ z@hAoMgMEY<809B~CA+n4LANk90*k zudm@2?b6RjP6-3_+}jOJlcJ$kOpXwD)dN9yK@F!FicHQezh)WgUqu-YO834rKh<~y zveB-T<0K;4Qr(Vi2W+g3?0Bx7D~bsPe0wn2NAau7oE+9S{S3q zY&M-qYm$g-FHzDpYenz2KK{Igo8y;1-v?9Ez?4cv?J(0@wO$->Yg3yr@{CodVvYBX9sa=M!m0WJwD@oD)@7g5-D)m3sR!H-~yf zhBct~y`53H%%6zZSPT#!3cQImg3Kr`Qc>Tqlz^BDWUKp2KH45@ zV%G*PF=ipl@7rsXe&l!>i^WYE4I+z?<)&wIXur1x;1{1QG3T=wRjc;1d9ZwflpwPW z*m`0r(r}U%#7wx$aPOm;K$oP1)GeH>_XM2UKPr3VCPHgwj3F4Vpm@`GV?HKmY z`JrwBYSUo}SMGmTEWM_txVo z8MnxK)As|GLQ8t^(n85%imhV=O%q5Z;b$RY|9Ih2J@99SQ(U_I{p6G~! zx&h-$c0r8;tRXDNjt}Q3Yo*L08;t7o&v!xWAe)(o>u|2Iv9RMIm@5s(X^z4SnFyPNr+e$}Iq-=F#dz>qS5!b(W)Vh)@H&X$o(~^LPFKu!qwuqi zlWtF#(X5kjHVv@q@9Hg9TmQu}7UuVp2yYrdqwq@`)(GieU%foPNJJXH$sVGEn8kA6 z8v@HRLFC143NW{ePq~TCU(_=xaMlNOb!(t~f=!b_w(rrlCHI76be%8?SQZfC+Xb>5 z-wCGbIbJ-}iV+vh>%4+RrJHmBA!)gD6_yF@8XfO&2-V>&+AQ~B3_AWfzg@A&|G7^zBf-ga-0_vWpk9dr}uqT5Y*{9mKgE2m^f`R!9s{a_F2s?lTjiV4S>x*vjR! zXEhlZh?mKVBs8*$%E~nUFt92hdCrYhl(wq~Yn5DM!=XP#gV_^Ry5D=+NtAYaiYV&GL>_E`&Gr22!t z?izPHasCr?bp_#KRNC*A4}j}DX@yMxf^sMjQ=8|Et>=YQpWnl1x(n-Z!?4To{aDG_ zWhr!Su(Q+(v_*X>l*|adK~}V z71_AdO02JJ0Ako?r;-`cljq`-%<+hOf_|teO?g4ZYH*epIRFWG zUt4P;=jM60cj8GS-*YAO(Ry2H+xth~KTn5$CiSyi>=dMtW6%kc0q|Qmcy<*+zLtMq zjtPiR*mXqfAE-1&vfKzulRg4FycqWVUVxiTaO+-A1z&lf+mWKSC#Qo?uP}JrFMh$ zR4D!@acyXXhxdW<)qtZ?g@Tik2#0Bns)L0=F*wP8E9VJCkLYvcFhF`|9$Bf&HJ=yZ zE>{CVzKUzVerBI_QD_Z+VPw%~aP5FS3&X3U;!>oJW?fpBlB-}rKVsmvxz6!JbzS#D9)>*L30DZL1E(+F%Bs-d+El^%= zL+vMzKN^uY7KVUp{E(97;3shUxB%G&;#t36fcfkfbC)}IL}Q^|^txz9X*OB3S%W@V zFq;88HR>HRokJVEKf<@ujA@(J=_(2SWSj7SWgnny_u<3UW&<|bit7PiGR%aS z8ii08vR<#Jxhg#7e-k^cWwkpg0Q-1{HoQLqPGBYln_{EJO&yBva3_U}8Up|(nDgM1R#Yb77g9D$_H3+aHIeZ`_S>MHHe^f?j|HH0jH5F=aHykxO ziYUP<;+PI2a=}Df!cX_~1;55w8 zV$q(oh*j4lT{Y5aI8ARjiJv;fp=}Z&hbNb=Hmvh;ka#k@@jAUJDcN`Mu24^_RxN8? zveZ2`Yvf7MF6?3d{=70ctbmLeDPAytTv$|8zL4S9W(9GxAfST@-9Ajjvx=z%^yFntz{=@Qp}9j;r{S^qAc_Ag?m*-Dn(ci xA_qViQo#cQm*FANw>g6V(4H~>AJOec;J91dA-e7I=cg}#jD(_it*CL({{Zjho}&N& literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` diff --git a/examples/demo_spm/android/app/src/main/res/values/colors.xml b/examples/demo_spm/android/app/src/main/res/values/colors.xml new file mode 100644 index 00000000..c5d5899f --- /dev/null +++ b/examples/demo_spm/android/app/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + \ No newline at end of file diff --git a/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj b/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj index df9395ce..8c3c14f3 100644 --- a/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj +++ b/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj @@ -530,7 +530,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -587,7 +587,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d36b1fab..d0d98aa1 100644 --- a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,122 +1 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} +{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png index dc9ada4725e9b0ddb1deab583e5b5102493aa332..d4295e38c7caa112d838caae9b644c2ab048c8d2 100644 GIT binary patch literal 70226 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�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 WTw;Vjs!jaIK}9(=S-8xn;Qt3*#rq!s literal 10932 zcmeHN2~<R zh`|8`A_PQ1nSu(UMFx?8j8PC!!VDphaL#`F42fd#7Vlc`zIE4n%Y~eiz4y1j|NDpi z?<@|pSJ-HM`qifhf@m%MamgwK83`XpBA<+azdF#2QsT{X@z0A9Bq>~TVErigKH1~P zRX-!h-f0NJ4Mh++{D}J+K>~~rq}d%o%+4dogzXp7RxX4C>Km5XEI|PAFDmo;DFm6G zzjVoB`@qW98Yl0Kvc-9w09^PrsobmG*Eju^=3f?0o-t$U)TL1B3;sZ^!++3&bGZ!o-*6w?;oOhf z=A+Qb$scV5!RbG+&2S}BQ6YH!FKb0``VVX~T$dzzeSZ$&9=X$3)_7Z{SspSYJ!lGE z7yig_41zpQ)%5dr4ff0rh$@ky3-JLRk&DK)NEIHecf9c*?Z1bUB4%pZjQ7hD!A0r-@NF(^WKdr(LXj|=UE7?gBYGgGQV zidf2`ZT@pzXf7}!NH4q(0IMcxsUGDih(0{kRSez&z?CFA0RVXsVFw3^u=^KMtt95q z43q$b*6#uQDLoiCAF_{RFc{!H^moH_cmll#Fc^KXi{9GDl{>%+3qyfOE5;Zq|6#Hb zp^#1G+z^AXfRKaa9HK;%b3Ux~U@q?xg<2DXP%6k!3E)PA<#4$ui8eDy5|9hA5&{?v z(-;*1%(1~-NTQ`Is1_MGdQ{+i*ccd96ab$R$T3=% zw_KuNF@vI!A>>Y_2pl9L{9h1-C6H8<)J4gKI6{WzGBi<@u3P6hNsXG=bRq5c+z;Gc3VUCe;LIIFDmQAGy+=mRyF++u=drBWV8-^>0yE9N&*05XHZpPlE zxu@?8(ZNy7rm?|<+UNe0Vs6&o?l`Pt>P&WaL~M&#Eh%`rg@Mbb)J&@DA-wheQ>hRV z<(XhigZAT z>=M;URcdCaiO3d^?H<^EiEMDV+7HsTiOhoaMX%P65E<(5xMPJKxf!0u>U~uVqnPN7T!X!o@_gs3Ct1 zlZ_$5QXP4{Aj645wG_SNT&6m|O6~Tsl$q?nK*)(`{J4b=(yb^nOATtF1_aS978$x3 zx>Q@s4i3~IT*+l{@dx~Hst21fR*+5}S1@cf>&8*uLw-0^zK(+OpW?cS-YG1QBZ5q! zgTAgivzoF#`cSz&HL>Ti!!v#?36I1*l^mkrx7Y|K6L#n!-~5=d3;K<;Zqi|gpNUn_ z_^GaQDEQ*jfzh;`j&KXb66fWEk1K7vxQIMQ_#Wu_%3 z4Oeb7FJ`8I>Px;^S?)}2+4D_83gHEq>8qSQY0PVP?o)zAv3K~;R$fnwTmI-=ZLK`= zTm+0h*e+Yfr(IlH3i7gUclNH^!MU>id$Jw>O?2i0Cila#v|twub21@e{S2v}8Z13( zNDrTXZVgris|qYm<0NU(tAPouG!QF4ZNpZPkX~{tVf8xY690JqY1NVdiTtW+NqyRP zZ&;T0ikb8V{wxmFhlLTQ&?OP7 z;(z*<+?J2~z*6asSe7h`$8~Se(@t(#%?BGLVs$p``;CyvcT?7Y!{tIPva$LxCQ&4W z6v#F*);|RXvI%qnoOY&i4S*EL&h%hP3O zLsrFZhv&Hu5tF$Lx!8(hs&?!Kx5&L(fdu}UI5d*wn~A`nPUhG&Rv z2#ixiJdhSF-K2tpVL=)5UkXRuPAFrEW}7mW=uAmtVQ&pGE-&az6@#-(Te^n*lrH^m@X-ftVcwO_#7{WI)5v(?>uC9GG{lcGXYJ~Q8q zbMFl7;t+kV;|;KkBW2!P_o%Czhw&Q(nXlxK9ak&6r5t_KH8#1Mr-*0}2h8R9XNkr zto5-b7P_auqTJb(TJlmJ9xreA=6d=d)CVbYP-r4$hDn5|TIhB>SReMfh&OVLkMk-T zYf%$taLF0OqYF?V{+6Xkn>iX@TuqQ?&cN6UjC9YF&%q{Ut3zv{U2)~$>-3;Dp)*(? zg*$mu8^i=-e#acaj*T$pNowo{xiGEk$%DusaQiS!KjJH96XZ-hXv+jk%ard#fu=@Q z$AM)YWvE^{%tDfK%nD49=PI|wYu}lYVbB#a7wtN^Nml@CE@{Gv7+jo{_V?I*jkdLD zJE|jfdrmVbkfS>rN*+`#l%ZUi5_bMS<>=MBDNlpiSb_tAF|Zy`K7kcp@|d?yaTmB^ zo?(vg;B$vxS|SszusORgDg-*Uitzdi{dUV+glA~R8V(?`3GZIl^egW{a919!j#>f` znL1o_^-b`}xnU0+~KIFLQ)$Q6#ym%)(GYC`^XM*{g zv3AM5$+TtDRs%`2TyR^$(hqE7Y1b&`Jd6dS6B#hDVbJlUXcG3y*439D8MrK!2D~6gn>UD4Imctb z+IvAt0iaW73Iq$K?4}H`7wq6YkTMm`tcktXgK0lKPmh=>h+l}Y+pDtvHnG>uqBA)l zAH6BV4F}v$(o$8Gfo*PB>IuaY1*^*`OTx4|hM8jZ?B6HY;F6p4{`OcZZ(us-RVwDx zUzJrCQlp@mz1ZFiSZ*$yX3c_#h9J;yBE$2g%xjmGF4ca z&yL`nGVs!Zxsh^j6i%$a*I3ZD2SoNT`{D%mU=LKaEwbN(_J5%i-6Va?@*>=3(dQy` zOv%$_9lcy9+(t>qohkuU4r_P=R^6ME+wFu&LA9tw9RA?azGhjrVJKy&8=*qZT5Dr8g--d+S8zAyJ$1HlW3Olryt`yE zFIph~Z6oF&o64rw{>lgZISC6p^CBer9C5G6yq%?8tC+)7*d+ib^?fU!JRFxynRLEZ zj;?PwtS}Ao#9whV@KEmwQgM0TVP{hs>dg(1*DiMUOKHdQGIqa0`yZnHk9mtbPfoLx zo;^V6pKUJ!5#n`w2D&381#5#_t}AlTGEgDz$^;u;-vxDN?^#5!zN9ngytY@oTv!nc zp1Xn8uR$1Z;7vY`-<*?DfPHB;x|GUi_fI9@I9SVRv1)qETbNU_8{5U|(>Du84qP#7 z*l9Y$SgA&wGbj>R1YeT9vYjZuC@|{rajTL0f%N@>3$DFU=`lSPl=Iv;EjuGjBa$Gw zHD-;%YOE@<-!7-Mn`0WuO3oWuL6tB2cpPw~Nvuj|KM@))ixuDK`9;jGMe2d)7gHin zS<>k@!x;!TJEc#HdL#RF(`|4W+H88d4V%zlh(7#{q2d0OQX9*FW^`^_<3r$kabWAB z$9BONo5}*(%kx zOXi-yM_cmB3>inPpI~)duvZykJ@^^aWzQ=eQ&STUa}2uT@lV&WoRzkUoE`rR0)`=l zFT%f|LA9fCw>`enm$p7W^E@U7RNBtsh{_-7vVz3DtB*y#*~(L9+x9*wn8VjWw|Q~q zKFsj1Yl>;}%MG3=PY`$g$_mnyhuV&~O~u~)968$0b2!Jkd;2MtAP#ZDYw9hmK_+M$ zb3pxyYC&|CuAbtiG8HZjj?MZJBFbt`ryf+c1dXFuC z0*ZQhBzNBd*}s6K_G}(|Z_9NDV162#y%WSNe|FTDDhx)K!c(mMJh@h87@8(^YdK$&d*^WQe8Z53 z(|@MRJ$Lk-&ii74MPIs80WsOFZ(NX23oR-?As+*aq6b?~62@fSVmM-_*cb1RzZ)`5$agEiL`-E9s7{GM2?(KNPgK1(+c*|-FKoy}X(D_b#etO|YR z(BGZ)0Ntfv-7R4GHoXp?l5g#*={S1{u-QzxCGng*oWr~@X-5f~RA14b8~B+pLKvr4 zfgL|7I>jlak9>D4=(i(cqYf7#318!OSR=^`xxvI!bBlS??`xxWeg?+|>MxaIdH1U~#1tHu zB{QMR?EGRmQ_l4p6YXJ{o(hh-7Tdm>TAX380TZZZyVkqHNzjUn*_|cb?T? zt;d2s-?B#Mc>T-gvBmQZx(y_cfkXZO~{N zT6rP7SD6g~n9QJ)8F*8uHxTLCAZ{l1Y&?6v)BOJZ)=R-pY=Y=&1}jE7fQ>USS}xP#exo57uND0i*rEk@$;nLvRB@u~s^dwRf?G?_enN@$t* zbL%JO=rV(3Ju8#GqUpeE3l_Wu1lN9Y{D4uaUe`g>zlj$1ER$6S6@{m1!~V|bYkhZA z%CvrDRTkHuajMU8;&RZ&itnC~iYLW4DVkP<$}>#&(`UO>!n)Po;Mt(SY8Yb`AS9lt znbX^i?Oe9r_o=?})IHKHoQGKXsps_SE{hwrg?6dMI|^+$CeC&z@*LuF+P`7LfZ*yr+KN8B4{Nzv<`A(wyR@!|gw{zB6Ha ziwPAYh)oJ(nlqSknu(8g9N&1hu0$vFK$W#mp%>X~AU1ay+EKWcFdif{% z#4!4aoVVJ;ULmkQf!ke2}3hqxLK>eq|-d7Ly7-J9zMpT`?dxo6HdfJA|t)?qPEVBDv z{y_b?4^|YA4%WW0VZd8C(ZgQzRI5(I^)=Ub`Y#MHc@nv0w-DaJAqsbEHDWG8Ia6ju zo-iyr*sq((gEwCC&^TYBWt4_@|81?=B-?#P6NMff(*^re zYqvDuO`K@`mjm_Jd;mW_tP`3$cS?R$jR1ZN09$YO%_iBqh5ftzSpMQQtxKFU=FYmP zeY^jph+g<4>YO;U^O>-NFLn~-RqlHvnZl2yd2A{Yc1G@Ga$d+Q&(f^tnPf+Z7serIU};17+2DU_f4Z z@GaPFut27d?!YiD+QP@)T=77cR9~MK@bd~pY%X(h%L={{OIb8IQmf-!xmZkm8A0Ga zQSWONI17_ru5wpHg3jI@i9D+_Y|pCqVuHJNdHUauTD=R$JcD2K_liQisqG$(sm=k9;L* z!L?*4B~ql7uioSX$zWJ?;q-SWXRFhz2Jt4%fOHA=Bwf|RzhwqdXGr78y$J)LR7&3T zE1WWz*>GPWKZ0%|@%6=fyx)5rzUpI;bCj>3RKzNG_1w$fIFCZ&UR0(7S?g}`&Pg$M zf`SLsz8wK82Vyj7;RyKmY{a8G{2BHG%w!^T|Njr!h9TO2LaP^_f22Q1=l$QiU84ao zHe_#{S6;qrC6w~7{y(hs-?-j?lbOfgH^E=XcSgnwW*eEz{_Z<_0QP(ER`J-yg@0 z|2%Q>&(o(23=GUtQXCfM99CA0EX)Kn|Gxj=LwE1Lckei?tvFqr85kJ;Jb3tN`phrO zR|u4ruqr9y)cpJYgLmbX>=x#H8J+(=eg1vz8Uq6ZcSsO#Qh&myS##c1R0(yqvnncJ z(ft4K-w!>#>=x$yx!Ip)&Hlb)7Xu_B7#TU;T==syKmPy!p{qw^@&rZ}7Ie)&j-UAV z_8nhWCrIb^ok(Hu|NG9}4F4JU(o$Y0r~Wv0oYT%0UGvWqCpfIF{(b%gvXg;u&w#7~Su?Yg)Sm|rxdZ(fZ~!(Fz~9@$RpnnCVoW#w{l<^tym1_lOBD=SPj fI5iUwDAEi7j1SYHJdg�NkvXXu0mjfIOio+ delta 279 zcmV+y0qFkU1g8R!8Gi!+006pI?LPnj0Blf9R7L;)|5U~J`u_j-{Qm)0oAmqtj@kOz z^8J|I`-|B6ht~R5kG+%I`zf~eztraM`u^bc{`dO)zUlmg)%x%C`E}6wSI77~z4s`y z^XT{f(eM4n?EUff`e@AgO~UxV*5*r_%Uhbj5N)LaQj!wdIe!-b004GLL_t&-)18pX z4udcZ1u-#g(~z+5JN*AY5?>Gw7hsN~k)CYt4dQDFxbs5*_&e@Hj)wtt(&JE<3Eq*D z;_gQLvqXoKv=I*gWqM9C(Tvu0>=?hTbOp9!6k6AF;>f6|S5%jGEE}TA9h)e`Yuiu8 d7)l?o1NFcJg%EAfM$P~L002ovPDHLkV1inPn!f-5 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 797d452e458972bab9d994556c8305db4c827017..b1bf42f9cfc6941681b3e2fda4352563b98466e8 100644 GIT binary patch delta 1479 zcmV;&1vvVa1I`PO8Gix*000A=FFF7K1(iueK~#90?U#FOQ&k+t&pEffy|<5bUCX1$ z9|VC70=NwmfsI6Yj9?fH5qT-7;Sq6+A&NtkZNv}}1VjWCP+R~d8Z;XN3Je3=cskq& z8yl=;Of#xu>-xIweI9dLg4%X%M@UEvzdvqnPJZ|M`JLbSoqyjwM}aX0kHQp>g!&l# z7#wC;l6b3)Z)_CW?qIhY004Dbh1sl3Nl^}Z5+d~Q!IIbOEj_|mEYjT$7|8(|jq1r+ z>g=h6PWy1c7-Qz-DbKzV>~hI~z#!^nLI#5zkfTey+YT|n9Ub0--!Y|S+6Awur%Z-0 zVt8?bC6;w=-GAn|&_s(5xO-+okhh- z>x+;|)nhQm*tzvn{#rc%K$S5@zcL?D@(e_W!(Ua+U4L(s+S}!vn@r@;6e=@=NJ=7; zlZ{(8JGXzvo~ab-8@e`cF}zpMUCz4&`zlWRE2|-tsfq8dh6rJfb03gb5%B!KJ=w}C z_t*Q>)3S9h&qFFz;;Og00A$ac<<4JVjvd!LKcxp?iDBH|d<$V9!z=S4LSmQGQB*86 zTO)@l2!G7spSZd@L(w|IV9@8~cC@sJw_80W`>Ao6giaSP*jrYPolXFNe#LS`QJCYR zQSZ~OHpjZ6q)i(UMd@>wb-q)8JsxjqS;G8zae*<$zT+0ThSSrODail;_kn{ksrT5o zT0ABD6P7F@Q&PzERPIWx&vHUHcTRY3i2&wpHh;0b9Rfg4ngAgb9S)}SNIcY_G37@! zFXRv=6P=aCU8$8i9sJE^GI>ZG;OkAnLR6)u0s#C~)gjeH^nZdJHZ1t=zi=_wSpG3l z^i@`AXXL2T(*T4JW3I6&F0jzncCR;S<>tpVG=w;iBS+|$y>ZXEwUrM61Hd<22QzXY zO@E_4eI&bG3<$;s2fM%A5d&LL`l~(6L#~4;O;HSNaR?z{NR;e$DIgdJIPko$8-677 z9k=i{o9UBH-GM{Ci5Or6Fw$t`sJprV#sEUXXcR(qF%ZRWsd76r26u<#4E$FDg0aDb z*&NKUJ~2G>aL2v{}Gc)^y{a4{Z)BKS%0nE zrOR?0lO{rfhzkq=&`ir_%E|%5IJfUGZrX@w+E85Rcz>PPb|)IuY&NVfL~1n_1lQ-g zt0*PU90Dtn&dtl=s-&3)1!h16>|7+M3Ql;_4w|DNRmoVqtesvkLc#i?vcU+ hf*+zi2LJ!Te*^OeS=OPi2qFLg002ovPDHLkV1j6C#w7p% delta 390 zcmV;10eSw;3zh?r8Gi!+006rnNM8T|0E$pdR7L;)|5U~J0au$Tw)XJ){%+3s=lA~6 z@BMVp`S<<*VaoaP`~U3u{%g(ou*=|m)B4`@{`33)?ezIj#Q6OF|6IuUF}e2O>+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$g1F_^i2wiq diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 6ed2d933e1120817fe9182483a228007b18ab6ae..76b737e04bc4dc78e170ebd733ff0865754b9be0 100644 GIT binary patch delta 2283 zcmVU2(w8VFx1wPLKi;1``WP5=dYX z0w&?8h$CPu$)H8rV`g`D=jhaIuVyi}R(qjT%6h-v^mO<8rhljBy*IB(2qE}?6Y_rz z5RLRg_muQP_muQP_mq6^p`j@9&COzSi`dZt+-|u^t0l~4BDo)xoQ#oivlWMlM3;-J zZ{QkF^A|2cj>Epy0Rn*0G&O7}ot>o_Glno3W3(6(G~fC)yRV$9tph$EYWX&Cpwa8) z&z|GYo?~`=K!1-LtIyA;Qj(*#8zr>FajvpGo~loPC`LAt7re)6yft;|r>7WyHV@b7 zqOcwfw72PsW8HeG_3QiEi2?mpBZgDy=|tZ|++YM4kX$bDP8)yYhVNe&#OwbFc9kUV zlf%Bo)28Jw)5C^7aA@|kYS-rXfgmU?nAM`4Iz=;a0)LT|gkj&gK>&nMwAnnhwVp#q zB%3Wj-e&7q^*jCZ3v|<`bu};!(5`*u%txic>1maIc7b;03|yrOJrKh%GBMGRpRdo$ zV-Fo>%Ju*cC*Kf7X4`g&WsHTh9|$yCU41VxnLfa@vWQB)|9gUxB(~p$4yVj&G!h9` z3@3v06n~}9o2ee1V_&;YXu1-Zxoj_PvFN8vjx)6H%2n6qtqQT~u~FvY6}VchbdWqA zPu+3uVg5L-`pT_68hYH39}kv_m&yh0%sT3hWUZwc3~cRLAm zyV>1)xD)l}l|@u)s{CjKVfxLo_BNaF?~F4(f>`0UuPN!XX(QU-+JEV}Y-JVfu*;FF?zp(%=Y+`=Jv7&F5_r8x z*G`?H_+$1!rEqVAi(JH8Uord24Rhznn}nvd)1GE`?~!i^g6BlNK6hI5(B97*6FA-MB>65}L^?5`KarG#bbn9X zamcW-Lj#WEYHD;dX2=}Y1Ty0XDBSQDFG+%ccb$KSf)-j@pxcdnu4=?^B|YFyp6Y4{ zJ@yIJJqeI_r_KG>1EH`RP9bQ3VX6_s12NL)6K>s7rKd*)-Q1!?32I7^{;_h&U%wt2nr~{7cpj%H8GmJ9kWy%Fi4t1s=umXLZ(pQ{HXGo)Ax1?eydd7b zji<fEx`xox|pWDPxdaG20hNGNDrqfvB;3B(c1@1eRBNkWSqK7Rq;IiZAp z;E|}P5JN&jn}cCVY-28Dtq9(o9NZVTbYP1J~y zBsF*t-|4?&6!PJLSZ9 z$Bkh={1d9kcn*K6o1Tjigg>z^;OZNs+jpWS#``1~<`g0w3WB@pV1Gczam~1~F+r0S zi|X;wz7zGb18He>A3ds@JQ;aI^U9+3;#EpPEHa@eQ_%_~nz)Z1Ri2;D&LR{0!~`ub z>a6^`^$nQc^)fqmsk5>OzdurCWSCd2w6A#+_#$+FBxx#MP7fV|u0)4}DJ?@f1VA_I zr`=D`Z4XuY0QICNy?;lK$&%3jZ~E0@GenSI`S$F-}} z^SA15ijg?3erl3o{&T@J214id9lkSX1J7eH7@l7c4o_Ingn!9o{Pj}D8^1^KnLF|s zhU3OxzJN+cxL$8s{34N%puFYp6kYyL4D;rK&O{1IlJkQP-BpKB0|dad^d-_7DiB5n zExV^tkMf1H**$xaP0!&Y;_W-8mzOEahEd&2g;A73EHR9I>@Z;> zsO1?73nZ75JAZfxUHblU*0y+wVg7TPCnusU9*#gs^3>KbJ3o@z1IaoBKszJXP*@N? zNd(XshM8Vih?~u9X&G8EXm>a_y~~zYXrIXwogwpVf6Q}NSF`&o#V>CKp8){f>;l8w z!UtID#W2iRFpEk{b8dQ9soaUpEw1-A!!FJ)6k#h5-hbagr!~E_L_6k*h!~$A!7TNN;nA6n^>m9KI+R}hI{#I(r?!^+yivSyvnzTC0Fjoa&dJhDm_Vha#$q%+ z=ZI8FGGsMxu5sR6(dp!`T^E|0@x(+)@~3Q8tA5c!GC7%icpw?FJQtC~^Td`g8i_|n zf=5OwEx6fCP0x*^2_)b9v+*92Ug(~ZUg(~ZUg(~Z{{j+Zdx?Jn%U1vZ002ovPDHLk FV1jy~V6p%J delta 435 zcmV;k0Zjhv5yAtI8Gi!+000dlDL?=K0EAFXR7L;)|5U~JDYo_jSDRPH_*uvJ?fL$s z;QQnD{*>GM-ShrilfUZt{^9lhT*&z4_x{-O{Rv#2V9EI}xb^~1iQe@7)8g(7UZ4B@ z|4zgB>+<*9=;^^)>d)H7pzGjuM>Jnezy3`@G2r z?{~a!Fj;`+8Gq^x2Jl;?IEV8)=fG217*|@)CCYgFze-x?IFODUIA>nWKpE+bn~n7; z-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGrXPIdeRE&b2Thd#{MtDK$ zpx*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{HY|nMnXd&JOovdH8X7|NJwPp?@&O;59Vrb)f%C7n^1- zGHgVn7$N9#k%fh{cL^lPS9gtMQtj+Qy?r>9n%oa%*|m0!5ZXYx-7oEG{r$>`7ObjJ zmbrC)y2wiif~l&xNMwBAuGV!0-3&{+ck=$VFX1W|FJ(@jAzUtNW<>zf^yE>T%V{^m znf8vr+@J$fvr^<2*m-NWfLlx3#G#|JBgsv!H` z^1r`r%$&bKE-09uwcRyRsr1Pf!sT)wY@$4i)UGQ^dk4tno)3@2^!pFAtKH(~wLN{`B(dEw@k-bZq+Kje7$<^0_yu++Oci&;hW;-hX2CJB)85F zXePa8N=cyvERi)@-Gnt&oTI=bN>+9GL%FvB)E)rpii)VI?XcPcIKP9q5LlgaU z@mur0Z+`{=q>dg#H^LMB*`a$D;kDxR=wnCMLXp?Pz!y0KoWs z`ol-yg^l+4toVo(Pc2&L=+a&8bRV6lz@qs}o3UpDC zqYFurTk|2h+Kqbq_&~X^xkf#E-iZ}zHqjoBcB|J+BwQZ_AvJ}v-wQERjl#E-wsvOu zyW-|gfoZD0Tmq&!HB%^T+9=j;(c^KYwGD8r5DM8GyG!QfNp*F~vE!o+jqc{}q}tDz zl7EuXZyF}YxSJZ;(o#JhA8lwf6-C~=hk7%A78d}(2i6-;o~WId6Z;QH^>xg$rS`S+ z^U>|w=~Jy{D$RfLF<)6R9ht#}5K23?kqZix*0%HyhoLOn0uo<+ZJln0k@xK4tAY^1 zIl0ehAy~=2zf!&UE9$>v8^zfy7bq8NHd0ar1v5^c19g^hIzrnIlY^ZVb~Jivv2mDw`Yx?tNUv0zvlh}X^e31Z1EBp00000NkvXX Hu0mjfK1%## delta 266 zcmV+l0rmdm2buzq8Gi!+003c4mpuRg09{Z_R7L;)|5U~JDYo_jSDX9(|7FYh`2GLd z^Zv2r{H^2sT*&w!Y^SB+`<>qVZqE6)=lqo0`vF#&*75!I`TIh@_d&k*HoEtQyV-iD z%Xz2D9EQRbeYh5Nr~y=#0ZD;^+vz0$004MNL_t(2&&|%+4u6C&2tZM$Wf&dzefR%A z(^3-?6X>hnCz2Ba@RH&`m!pgy?n@#@AuLYB&}Q)FGY`?vcft0!vht0Z@M&ZeNCWXh75gzRTXR8EE3oN&6 Q00000NkvXXt^-0~f=8c)-2eap diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index fe730945a01f64a61e2235dbe3f45b08f7729182..d3de94d24a99b5c27887f075a499fd1dea744478 100644 GIT binary patch delta 2153 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 delta 447 zcmV;w0YLui5Y7XT8Gi!+007oyx*7lg0G3cpR7L;)|5U~J0au$Tw)URh`@-w}Xw3Np zS)Ix4{k7)&ujKrh-TO(x_}20L&+q+}+xr1ilg8}*yXgGl_5RcF{f*iBEV%Z~-t4>5 ziGV;=={^- z?sLQGb)?A{hr$_!z8HbH7kH=vM0x-*R~t>;jsO4v^GQTOR7l6|(&r9>FcgO2dg?%> z;=sK?5%;?Pn^T7LL?Y$@5u?06NuIR*0?Yf$Hf5Afk+lM<^ch*jvO$sU*m9J?JI7eI zGFV6+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9R%3*Q+)t%S!MU_`id^@& zY{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&p6kME1_Z%?`+u)^el0!1<0sd p?Eyu!OMLDifi)An*I;?S-wj=m4RYIt!kPd8002ovPDHLkV1kMA^lShC diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index 321773cd857a8a0f0c9c7d3dc3f5ff4fb298dc10..f0559d2b5759df7bb275b366e7262acc92286388 100644 GIT binary patch literal 3427 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 FV1h+2geL$1 delta 691 zcmV;k0!;nm8o&jR8Gi!+002f7DP8~o0Jl&~R7L;)|5U~JDYo_jSDX9(|M~s@SH}2N z#rS{J`h3&+@cRDr`1>4br2|=<_Wb|z`~RBV`-<24{r>;E==`tb{CU#(0alua*7{P! z_>|iF0Z@&o;`@Zw`ed2Hv*!Fwin#$(m7w4Ij@kM+yZ0`*_J0?7s{u=e0YGxN=lnXn z_j;$xb)?A|hr(Z#!1DV3H@o+7qQ_N_ycmMI0acg)Gg|cf|J(EaqTu_A!rvTerUFQQ z05n|zFjFP9FmM0>0mMl}K~z}7?bK^if#bc3@hBPX@I$58-z}(ZZE!t-aOGpjNkbau@>yEzH(5Yj4kZ ziMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_stABAHe$v|ToifVv60B@podBTcIqVcr1w`hG7HeY|fvLid#^Ok4NAXIXSt1 Zxpx7IC@PekH?;r&002ovPDHLkV1kLZYmEQ^ diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 797d452e458972bab9d994556c8305db4c827017..b1bf42f9cfc6941681b3e2fda4352563b98466e8 100644 GIT binary patch delta 1479 zcmV;&1vvVa1I`PO8Gix*000A=FFF7K1(iueK~#90?U#FOQ&k+t&pEffy|<5bUCX1$ z9|VC70=NwmfsI6Yj9?fH5qT-7;Sq6+A&NtkZNv}}1VjWCP+R~d8Z;XN3Je3=cskq& z8yl=;Of#xu>-xIweI9dLg4%X%M@UEvzdvqnPJZ|M`JLbSoqyjwM}aX0kHQp>g!&l# z7#wC;l6b3)Z)_CW?qIhY004Dbh1sl3Nl^}Z5+d~Q!IIbOEj_|mEYjT$7|8(|jq1r+ z>g=h6PWy1c7-Qz-DbKzV>~hI~z#!^nLI#5zkfTey+YT|n9Ub0--!Y|S+6Awur%Z-0 zVt8?bC6;w=-GAn|&_s(5xO-+okhh- z>x+;|)nhQm*tzvn{#rc%K$S5@zcL?D@(e_W!(Ua+U4L(s+S}!vn@r@;6e=@=NJ=7; zlZ{(8JGXzvo~ab-8@e`cF}zpMUCz4&`zlWRE2|-tsfq8dh6rJfb03gb5%B!KJ=w}C z_t*Q>)3S9h&qFFz;;Og00A$ac<<4JVjvd!LKcxp?iDBH|d<$V9!z=S4LSmQGQB*86 zTO)@l2!G7spSZd@L(w|IV9@8~cC@sJw_80W`>Ao6giaSP*jrYPolXFNe#LS`QJCYR zQSZ~OHpjZ6q)i(UMd@>wb-q)8JsxjqS;G8zae*<$zT+0ThSSrODail;_kn{ksrT5o zT0ABD6P7F@Q&PzERPIWx&vHUHcTRY3i2&wpHh;0b9Rfg4ngAgb9S)}SNIcY_G37@! zFXRv=6P=aCU8$8i9sJE^GI>ZG;OkAnLR6)u0s#C~)gjeH^nZdJHZ1t=zi=_wSpG3l z^i@`AXXL2T(*T4JW3I6&F0jzncCR;S<>tpVG=w;iBS+|$y>ZXEwUrM61Hd<22QzXY zO@E_4eI&bG3<$;s2fM%A5d&LL`l~(6L#~4;O;HSNaR?z{NR;e$DIgdJIPko$8-677 z9k=i{o9UBH-GM{Ci5Or6Fw$t`sJprV#sEUXXcR(qF%ZRWsd76r26u<#4E$FDg0aDb z*&NKUJ~2G>aL2v{}Gc)^y{a4{Z)BKS%0nE zrOR?0lO{rfhzkq=&`ir_%E|%5IJfUGZrX@w+E85Rcz>PPb|)IuY&NVfL~1n_1lQ-g zt0*PU90Dtn&dtl=s-&3)1!h16>|7+M3Ql;_4w|DNRmoVqtesvkLc#i?vcU+ hf*+zi2LJ!Te*^OeS=OPi2qFLg002ovPDHLkV1j6C#w7p% delta 390 zcmV;10eSw;3zh?r8Gi!+006rnNM8T|0E$pdR7L;)|5U~J0au$Tw)XJ){%+3s=lA~6 z@BMVp`S<<*VaoaP`~U3u{%g(ou*=|m)B4`@{`33)?ezIj#Q6OF|6IuUF}e2O>+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$g1F_^i2wiq diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index 502f463a9bc882b461c96aadf492d1729e49e725..59124a76c4cd6057a0d2c3f2bf3e9acb1e02bf08 100644 GIT binary patch literal 3166 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 Ef(W1sdjJ3c delta 572 zcmV-C0>k~@7|H~Y8Gi!+006nq0-pc?0H{z*R7L;)|5U~JDYo_jSDXF*|5nEMy6F5^ z$M}8I`uzU?*Yf=uXr;5|{0m;6_Wb|A>ik^D_|)+I$?g3CSDK^3+eX0mD!2CP`2NN0 z{dLg!a?km&%iyTt`yiax0acdp`~T(l{$a`ZF1YpsRg(cvjDG_-U$Er-fz#Bw>2W$eUI#iU z)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G!hkE!s;%oku3;IwG3U^2k zw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn_j%}l|2+O?a>_7qq7W zmx(qtA2nV^tZlLpy_#$U%ZNx5;$`0L&dZ!@e7rFXPGAOup%q`|03hpdtXsPP0000< KMNUMnLSTZ3d^K|b diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index 0ec303439225b78712f49115768196d8d76f6790..dd146ada645a9f7a9103c1e02699035d64051c07 100644 GIT binary patch literal 4841 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 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..388750c5a5ab006ca50faa9c28323a5befa66173 GIT binary patch literal 1936 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 Db|Uh| literal 0 HcmV?d00001 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..9edc86220d53237d4937263d215d45da64fee66b GIT binary patch literal 2171 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 OkcNt`auviT^#1@pgAnQf literal 0 HcmV?d00001 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 0ec303439225b78712f49115768196d8d76f6790..dd146ada645a9f7a9103c1e02699035d64051c07 100644 GIT binary patch literal 4841 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 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index e9f5fea27c705180eb716271f41b582e76dcbd90..8e9431389b113b51e060f93e09dbf250eb3bac53 100644 GIT binary patch literal 7623 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
D1N`?@sT ztnDS%Bd?)X2h)5kVf1i;J{pWx5wC%=^>N+4cPbr$p~&StA;wrY2y;qLCCFPbTl$>H zGS{H$>(ipi3FnDaIzpoU7mfPwA@B5$b*@Q@c(8xd(QGT`hUX!BRiy6QPF$C3Q`{aP zl;M9(di+U)n;$q1t7vakk3%ILLL?*HrVp)qgHvrr?KvNK+xRs3-@KpBc84}bc_+hT zn%E*J)AA08M<=Y_5rLwAFc|DqD2UF`y9r_#U#zx02XHglx z2_=VM3T3w%as8x;0Y4P1#;qC)M$uu`D9pYwE;5A(f`K4v_o+rVd5g9C5x2@bf9BV< z+KA4qW|E`;$V%XIy`vW6CY!&UL(^ zGNPzLkM=%PfR)Db*IZ6}iKK@FuK!?E^&MJHn{da5RK5pqjrtg+i8O(J8b9>XEcnY? z0(xY+mR0qwCUgnhf%1R<30g4Dj#i?G6RT%wG@Ib~%RQSWG!=->wjMw$k^RES;PbS# zp);+9>MbO|l$e<7)FK@@B23o58c{H3rJG~FG}u1)i3`9{~2d{CZQ#S z3QC-RIJq#*wUibB6ZblzO8BfnaWR8{{)x#eW^Z$K__S__8M*yKzYdRcMj>c3 zM;cdNU2}z;rvhr7t#NxjNka#+6v5;p{}WB}|B0W^IQRY8uA@W!4F3dLB)N}@QgDco G|Nj9*EVQKn delta 1668 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 literal 0 HcmV?d00001 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..be7bd5a1fd7025b46774927d61bd7f52b2cd6f36 GIT binary patch literal 6127 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 literal 0 HcmV?d00001 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 84ac32ae7d989f82d5e46a60405adcc8279e8001..96ba43c285d76182e5a93ba1e83e5d4ca57e2ac2 100644 GIT binary patch literal 3107 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 diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 8953cba09064923c5daf2d37e7c3c836ccdd794b..9dd61861e64bb6213048f4391c125ffa951668b1 100644 GIT binary patch literal 6710 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 M07*qoM6N<$f*Gm$7ytkO delta 1217 zcmV;y1U~z=G|CB(8Gi!+001u>&=UXv0SHh`R7L;)|5U~JDYo_jSDRDC`1<|-SjPDL z{{Q{{{{H{}09Kk-#rR9Y_viNgVafPO!S|ls`uzR=MZfp^{QU=8od8La1X`Tr_Wmff z_5e$ivgQ1@=KMy$_g9a+`TPAle6cOJ_Fc#L7qIpvwDkd1mw$fK`6IOUD75rX!}mad zv(fMTE4=(Nx%L54lL1hVF1YpqNrC`FddBPg#_Ietx%Lrkq5wX00X1L{S%Cm9QY*av z#_Rh5PKy9KYTWbvz3BX9%J>0Hi1+#X{rLA{m%$Kamk?i!03AC38#Yrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`?TG`AHia671e^vgmp!llK zp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?tc*y?iZ$PR7_ceEIapF3KB14K0Pog?7wtd+^xgUCa_GVmlD z<^nU>AU_Yn-JU?NFdu|wf^bTCNf-wSBYVZltDdvGBln-YrbeGvJ!|s{#`gjN@yAMb zM6cjFz0eFECCsc|_8hTa3*9-JQGehksdoVP^K4m?&wpA~+|b%{EP5D-+7h)6CE; z*{>BP=GRR3Ea}xyV*bqry{l^J=0#DaC4ej;1qs8_by?H6Tr@7hl>UKNZt)^B&yl;)&oqzLg zcfZxpE?3k%_iTOVywh%`XVN-E#COl+($9{v(pqSQcrz=)>G!!3HeNxbXGM@})1|9g zG4*@(OBaMvY0P0_TfMFPh fVHk#CZX3S=^^2mI>Ux-D00000NkvXXu0mjffTn}g diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 0467bf12aa4d28f374bb26596605a46dcbb3e7c8..2947572c7bf997d02e53df64937a56bb5031bb38 100644 GIT binary patch literal 7352 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 delta 1410 zcmV-|1%3LsIf@IA8Gi!+002YCyxsr+0P|2xR7L;)|5U~JDYo_jSDRDB`2GI>{Qds= z{r_0T`1}6fwc-8!#-TGX}_?g)CZq4{k!uZ_g@DrQdoW0kI zu+W69&uN^)W`CK&06mMNcYMVF00dG=L_t(|+U?wHQxh>12H+Dm+1+fh+IF>G0SjJM zkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJTkdTm&kdTm&kdTm&kdP`e zsgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>VI$fQI%^ugM`#6By?GeadWcu z0gy9!D`m!H>Bd!JW(@avE8`|5XX(0PN}!8K>`dkavs;rHL+wy96QGNT=S@#7%xtlm zIW!++@*2zm-Py#Zr`DzqsLm!b{iskFNULSqE9A>SqHem>o31A%XL>S_5?=;V_i_y+ z(xxXhnt#r-l1Y8_*h`r?8Tr|)(RAiO)4jQR`13X0mx07C&p@KBP_2s``KEhv^|*8c z$$_T(v6^1Ig=#R}sE{vjA?ErGDZGUsyoJuWdJMc7Nb1^KF)-u<7q zPy$=;)0>vuWuK2hQhswLf!9yg`88u&eBbR8uhod?Nw09AXH}-#qOLLxeT2%C;R)QQ$Za#qp~cM&YVmS4i-*Fpd!cC zBXc?(4wcg>sHmXGd^VdE<5QX{Kyz$;$sCPl(_*-P2Iw?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF34$0Z;QO!J zOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUCUoZo%k(yku QW&i*H07*qoM6N<$f({MMC;$Ke From e860563aa6b17a28d315c314095805df4e82b239 Mon Sep 17 00:00:00 2001 From: Fadi George Date: Wed, 1 Apr 2026 11:00:31 -0700 Subject: [PATCH 12/17] fix(demo): handle missing dotenv gracefully --- examples/demo/lib/main.dart | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/examples/demo/lib/main.dart b/examples/demo/lib/main.dart index f6dfc800..1e5544ec 100644 --- a/examples/demo/lib/main.dart +++ b/examples/demo/lib/main.dart @@ -78,7 +78,12 @@ Future main() async { }); // Set up API service - final apiKey = dotenv.env['ONESIGNAL_API_KEY'] ?? ''; + String apiKey = ''; + try { + apiKey = dotenv.env['ONESIGNAL_API_KEY'] ?? ''; + } catch (_) { + LogManager().w('App', 'API key not found, continuing without it'); + } final apiService = OneSignalApiService() ..setAppId(appId) ..setApiKey(apiKey); From c0b631d863d910104194ab29424bfcb9663a4a7a Mon Sep 17 00:00:00 2001 From: Fadi George Date: Wed, 1 Apr 2026 11:10:07 -0700 Subject: [PATCH 13/17] feat(demo_spm): add iOS widget extension with Live Activities --- .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 35 +++ .../Assets.xcassets/Contents.json | 6 + .../WidgetBackground.colorset/Contents.json | 11 + .../demo_spm/ios/OneSignalWidget/Info.plist | 11 + .../OneSignalWidgetBundle.swift | 16 ++ .../OneSignalWidgetLiveActivity.swift | 142 +++++++++++ .../ios/Runner.xcodeproj/project.pbxproj | 228 ++++++++++++++++++ examples/demo_spm/ios/Runner/Info.plist | 6 + 9 files changed, 466 insertions(+) create mode 100644 examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/Contents.json create mode 100644 examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json create mode 100644 examples/demo_spm/ios/OneSignalWidget/Info.plist create mode 100644 examples/demo_spm/ios/OneSignalWidget/OneSignalWidgetBundle.swift create mode 100644 examples/demo_spm/ios/OneSignalWidget/OneSignalWidgetLiveActivity.swift diff --git a/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/AccentColor.colorset/Contents.json b/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 00000000..eb878970 --- /dev/null +++ b/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..23058801 --- /dev/null +++ b/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,35 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/Contents.json b/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json b/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json new file mode 100644 index 00000000..eb878970 --- /dev/null +++ b/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/examples/demo_spm/ios/OneSignalWidget/Info.plist b/examples/demo_spm/ios/OneSignalWidget/Info.plist new file mode 100644 index 00000000..0f118fb7 --- /dev/null +++ b/examples/demo_spm/ios/OneSignalWidget/Info.plist @@ -0,0 +1,11 @@ + + + + + NSExtension + + NSExtensionPointIdentifier + com.apple.widgetkit-extension + + + diff --git a/examples/demo_spm/ios/OneSignalWidget/OneSignalWidgetBundle.swift b/examples/demo_spm/ios/OneSignalWidget/OneSignalWidgetBundle.swift new file mode 100644 index 00000000..1940bb22 --- /dev/null +++ b/examples/demo_spm/ios/OneSignalWidget/OneSignalWidgetBundle.swift @@ -0,0 +1,16 @@ +// +// OneSignalWidgetBundle.swift +// OneSignalWidgetExtension +// +// Created by Fadi George on 4/1/26. +// + +import WidgetKit +import SwiftUI + +@main +struct OneSignalWidgetBundle: WidgetBundle { + var body: some Widget { + OneSignalWidgetLiveActivity() + } +} diff --git a/examples/demo_spm/ios/OneSignalWidget/OneSignalWidgetLiveActivity.swift b/examples/demo_spm/ios/OneSignalWidget/OneSignalWidgetLiveActivity.swift new file mode 100644 index 00000000..f4a95f75 --- /dev/null +++ b/examples/demo_spm/ios/OneSignalWidget/OneSignalWidgetLiveActivity.swift @@ -0,0 +1,142 @@ +import ActivityKit +import WidgetKit +import SwiftUI +import OneSignalLiveActivities + +@available(iOS 16.2, *) +struct OneSignalWidgetLiveActivity: Widget { + + private func statusIcon(for status: String) -> String { + switch status { + case "on_the_way": return "box.truck.fill" + case "delivered": return "checkmark.circle.fill" + default: return "bag.fill" + } + } + + private func statusColor(for status: String) -> Color { + switch status { + case "on_the_way": return .blue + case "delivered": return .green + default: return .orange + } + } + + private func statusLabel(for status: String) -> String { + switch status { + case "on_the_way": return "On the Way" + case "delivered": return "Delivered" + default: return "Preparing" + } + } + + var body: some WidgetConfiguration { + ActivityConfiguration(for: DefaultLiveActivityAttributes.self) { context in + let orderNumber = context.attributes.data["orderNumber"]?.asString() ?? "Order" + let status = context.state.data["status"]?.asString() ?? "preparing" + let message = context.state.data["message"]?.asString() ?? "Your order is being prepared" + let eta = context.state.data["estimatedTime"]?.asString() ?? "" + + VStack(spacing: 10) { + HStack { + Text(orderNumber) + .font(.caption) + .foregroundColor(.gray) + Spacer() + if !eta.isEmpty { + Text(eta) + .font(.caption) + .foregroundColor(.white.opacity(0.7)) + } + } + + HStack(spacing: 12) { + Image(systemName: statusIcon(for: status)) + .font(.title2) + .foregroundColor(statusColor(for: status)) + + VStack(alignment: .leading, spacing: 2) { + Text(statusLabel(for: status)) + .font(.headline) + .foregroundColor(.white) + Text(message) + .font(.subheadline) + .foregroundColor(.white.opacity(0.8)) + .lineLimit(1) + } + Spacer() + } + + DeliveryProgressBar(status: status) + } + .padding() + .activityBackgroundTint(Color(red: 0.11, green: 0.13, blue: 0.19)) + .activitySystemActionForegroundColor(.white) + + } dynamicIsland: { context in + let status = context.state.data["status"]?.asString() ?? "preparing" + let message = context.state.data["message"]?.asString() ?? "Preparing" + let eta = context.state.data["estimatedTime"]?.asString() ?? "" + + return DynamicIsland { + DynamicIslandExpandedRegion(.leading) { + Image(systemName: statusIcon(for: status)) + .font(.title2) + .foregroundColor(statusColor(for: status)) + } + DynamicIslandExpandedRegion(.center) { + Text(statusLabel(for: status)) + .font(.headline) + } + DynamicIslandExpandedRegion(.trailing) { + if !eta.isEmpty { + Text(eta) + .font(.caption) + .foregroundColor(.secondary) + } + } + DynamicIslandExpandedRegion(.bottom) { + Text(message) + .font(.caption) + .foregroundColor(.secondary) + } + } compactLeading: { + Image(systemName: statusIcon(for: status)) + .foregroundColor(statusColor(for: status)) + } compactTrailing: { + Text(statusLabel(for: status)) + .font(.caption) + } minimal: { + Image(systemName: statusIcon(for: status)) + .foregroundColor(statusColor(for: status)) + } + } + } +} + +@available(iOS 16.2, *) +struct DeliveryProgressBar: View { + let status: String + + private var progress: CGFloat { + switch status { + case "on_the_way": return 0.6 + case "delivered": return 1.0 + default: return 0.25 + } + } + + var body: some View { + GeometryReader { geo in + ZStack(alignment: .leading) { + RoundedRectangle(cornerRadius: 3) + .fill(Color.white.opacity(0.2)) + .frame(height: 6) + RoundedRectangle(cornerRadius: 3) + .fill(progress >= 1.0 ? Color.green : Color.blue) + .frame(width: geo.size.width * progress, height: 6) + } + } + .frame(height: 6) + } +} diff --git a/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj b/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj index 8c3c14f3..a29f0e53 100644 --- a/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj +++ b/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj @@ -16,6 +16,9 @@ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; E8C8D1902F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = E8C8D1892F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + E8C8D1B32F7D9550006581CB /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8C8D1B22F7D9550006581CB /* WidgetKit.framework */; }; + E8C8D1B52F7D9550006581CB /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8C8D1B42F7D9550006581CB /* SwiftUI.framework */; }; + E8C8D1C22F7D9551006581CB /* OneSignalWidgetExtensionExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = E8C8D1B02F7D9550006581CB /* OneSignalWidgetExtensionExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -33,6 +36,13 @@ remoteGlobalIDString = E8C8D1882F7B0DB7006581CB; remoteInfo = OneSignalNotificationServiceExtension; }; + E8C8D1C02F7D9551006581CB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = E8C8D1AF2F7D9550006581CB; + remoteInfo = OneSignalWidgetExtensionExtension; + }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -53,6 +63,7 @@ dstSubfolderSpec = 13; files = ( E8C8D1902F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex in Embed Foundation Extensions */, + E8C8D1C22F7D9551006581CB /* OneSignalWidgetExtensionExtension.appex in Embed Foundation Extensions */, ); name = "Embed Foundation Extensions"; runOnlyForDeploymentPostprocessing = 0; @@ -77,6 +88,9 @@ 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; E8C8D1892F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = OneSignalNotificationServiceExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + E8C8D1B02F7D9550006581CB /* OneSignalWidgetExtensionExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = OneSignalWidgetExtensionExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + E8C8D1B22F7D9550006581CB /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; + E8C8D1B42F7D9550006581CB /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ @@ -87,10 +101,18 @@ ); target = E8C8D1882F7B0DB7006581CB /* OneSignalNotificationServiceExtension */; }; + E8C8D1C62F7D9551006581CB /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Info.plist, + ); + target = E8C8D1AF2F7D9550006581CB /* OneSignalWidget */; + }; /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ E8C8D18A2F7B0DB7006581CB /* OneSignalNotificationServiceExtension */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (E8C8D1912F7B0DB7006581CB /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = OneSignalNotificationServiceExtension; sourceTree = ""; }; + E8C8D1B62F7D9550006581CB /* OneSignalWidget */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (E8C8D1C62F7D9551006581CB /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = OneSignalWidget; sourceTree = ""; }; /* End PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFrameworksBuildPhase section */ @@ -109,6 +131,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + E8C8D1AD2F7D9550006581CB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E8C8D1B52F7D9550006581CB /* SwiftUI.framework in Frameworks */, + E8C8D1B32F7D9550006581CB /* WidgetKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -138,6 +169,8 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, E8C8D18A2F7B0DB7006581CB /* OneSignalNotificationServiceExtension */, + E8C8D1B62F7D9550006581CB /* OneSignalWidget */, + E8C8D1B12F7D9550006581CB /* Frameworks */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, ); @@ -149,6 +182,7 @@ 97C146EE1CF9000F007C117D /* Runner.app */, 331C8081294A63A400263BE5 /* RunnerTests.xctest */, E8C8D1892F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex */, + E8C8D1B02F7D9550006581CB /* OneSignalWidgetExtensionExtension.appex */, ); name = Products; sourceTree = ""; @@ -168,6 +202,15 @@ path = Runner; sourceTree = ""; }; + E8C8D1B12F7D9550006581CB /* Frameworks */ = { + isa = PBXGroup; + children = ( + E8C8D1B22F7D9550006581CB /* WidgetKit.framework */, + E8C8D1B42F7D9550006581CB /* SwiftUI.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -204,6 +247,7 @@ ); dependencies = ( E8C8D18F2F7B0DB7006581CB /* PBXTargetDependency */, + E8C8D1C12F7D9551006581CB /* PBXTargetDependency */, ); name = Runner; packageProductDependencies = ( @@ -235,6 +279,28 @@ productReference = E8C8D1892F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex */; productType = "com.apple.product-type.app-extension"; }; + E8C8D1AF2F7D9550006581CB /* OneSignalWidgetExtensionExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = E8C8D1C72F7D9551006581CB /* Build configuration list for PBXNativeTarget "OneSignalWidgetExtensionExtension" */; + buildPhases = ( + E8C8D1AC2F7D9550006581CB /* Sources */, + E8C8D1AD2F7D9550006581CB /* Frameworks */, + E8C8D1AE2F7D9550006581CB /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + E8C8D1B62F7D9550006581CB /* OneSignalWidget */, + ); + name = OneSignalWidgetExtensionExtension; + packageProductDependencies = ( + ); + productName = OneSignalWidgetExtensionExtension; + productReference = E8C8D1B02F7D9550006581CB /* OneSignalWidgetExtensionExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -257,6 +323,9 @@ E8C8D1882F7B0DB7006581CB = { CreatedOnToolsVersion = 26.2; }; + E8C8D1AF2F7D9550006581CB = { + CreatedOnToolsVersion = 26.2; + }; }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; @@ -278,6 +347,7 @@ 97C146ED1CF9000F007C117D /* Runner */, 331C8080294A63A400263BE5 /* RunnerTests */, E8C8D1882F7B0DB7006581CB /* OneSignalNotificationServiceExtension */, + E8C8D1AF2F7D9550006581CB /* OneSignalWidgetExtensionExtension */, ); }; /* End PBXProject section */ @@ -308,6 +378,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + E8C8D1AE2F7D9550006581CB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -369,6 +446,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + E8C8D1AC2F7D9550006581CB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -382,6 +466,11 @@ target = E8C8D1882F7B0DB7006581CB /* OneSignalNotificationServiceExtension */; targetProxy = E8C8D18E2F7B0DB7006581CB /* PBXContainerItemProxy */; }; + E8C8D1C12F7D9551006581CB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = E8C8D1AF2F7D9550006581CB /* OneSignalWidgetExtensionExtension */; + targetProxy = E8C8D1C02F7D9551006581CB /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ @@ -807,6 +896,135 @@ }; name = Profile; }; + E8C8D1C32F7D9551006581CB /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 99SW8E36CT; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = OneSignalWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = OneSignalWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 26.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.OneSignalWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + E8C8D1C42F7D9551006581CB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 99SW8E36CT; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = OneSignalWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = OneSignalWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 26.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.OneSignalWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + E8C8D1C52F7D9551006581CB /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 99SW8E36CT; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = OneSignalWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = OneSignalWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 26.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.OneSignalWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Profile; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -850,6 +1068,16 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + E8C8D1C72F7D9551006581CB /* Build configuration list for PBXNativeTarget "OneSignalWidgetExtensionExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E8C8D1C32F7D9551006581CB /* Debug */, + E8C8D1C42F7D9551006581CB /* Release */, + E8C8D1C52F7D9551006581CB /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ diff --git a/examples/demo_spm/ios/Runner/Info.plist b/examples/demo_spm/ios/Runner/Info.plist index 83e431e3..4bd33cf5 100644 --- a/examples/demo_spm/ios/Runner/Info.plist +++ b/examples/demo_spm/ios/Runner/Info.plist @@ -26,6 +26,12 @@ $(FLUTTER_BUILD_NUMBER) LSRequiresIPhoneOS + NSSupportsLiveActivities + + NSLocationWhenInUseUsageDescription + This app uses your location to personalize notifications and content. + NSLocationAlwaysAndWhenInUseUsageDescription + This app uses your location to personalize notifications and content, even in the background. UIApplicationSupportsIndirectInputEvents UIBackgroundModes From cb98e0ff35784ac02b7ebde27ca2b001b9ff4d10 Mon Sep 17 00:00:00 2001 From: Fadi George Date: Wed, 1 Apr 2026 11:35:00 -0700 Subject: [PATCH 14/17] style(demo_spm): add missing newline to colors.xml --- examples/demo_spm/android/app/src/main/res/values/colors.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/demo_spm/android/app/src/main/res/values/colors.xml b/examples/demo_spm/android/app/src/main/res/values/colors.xml index c5d5899f..f42ada65 100644 --- a/examples/demo_spm/android/app/src/main/res/values/colors.xml +++ b/examples/demo_spm/android/app/src/main/res/values/colors.xml @@ -1,4 +1,4 @@ #FFFFFF - \ No newline at end of file + From ec9c8e38eea551f64f0db59104236c28f9b19d8a Mon Sep 17 00:00:00 2001 From: Fadi George Date: Wed, 1 Apr 2026 12:13:20 -0700 Subject: [PATCH 15/17] ci: remove Asana GitHub integration workflows --- .github/workflows/asana-add-comment.yml | 47 ------- .github/workflows/asana-create-task.yml | 119 ---------------- .github/workflows/asana-update-issue.yml | 172 ----------------------- 3 files changed, 338 deletions(-) delete mode 100644 .github/workflows/asana-add-comment.yml delete mode 100644 .github/workflows/asana-create-task.yml delete mode 100644 .github/workflows/asana-update-issue.yml diff --git a/.github/workflows/asana-add-comment.yml b/.github/workflows/asana-add-comment.yml deleted file mode 100644 index 1235c8f1..00000000 --- a/.github/workflows/asana-add-comment.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: Github --> Asana Add Comment Workflow - -on: - issue_comment: - types: [created] - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - permissions: - issues: read - steps: - - name: Get Asana Task Corresponding to Issue - env: - ISSUE_ID: ${{ github.event.issue.id }} - REPO_FULL_NAME: ${{ github.event.repository.full_name }} - WORKSPACE_ID: "780103692902078" - run: | - REPO_SCOPED_ISSUE_ID="$REPO_FULL_NAME#$ISSUE_ID" - - curl --request GET \ - --url "https://app.asana.com/api/1.0/workspaces/$WORKSPACE_ID/tasks/search?opt_fields=notes&text=$REPO_SCOPED_ISSUE_ID&sort_by=modified_at&sort_ascending=false" \ - --header 'accept: application/json' \ - --header 'authorization: Bearer ${{ secrets.ASANA_PAT }}' \ - --output response.json - TASK_GID=$(jq -r '.data[0].gid' response.json) - echo "TASK_GID=$TASK_GID" >> $GITHUB_ENV - - name: Comment on Asana Task - env: - ISSUE_COMMENT: ${{ github.event.comment.body }} - COMMENTER_NAME: ${{ github.event.comment.user.login }} - run: | - BODY_DATA=$(jq -n \ - --arg text "$ISSUE_COMMENT" \ - --arg commenter_name "$COMMENTER_NAME" \ - '{ - "data": { - "text": "\($commenter_name) left a comment:\n\n\($text)", - } - }') - curl --request POST \ - --url https://app.asana.com/api/1.0/tasks/$TASK_GID/stories \ - --header 'accept: application/json' \ - --header 'authorization: Bearer ${{ secrets.ASANA_PAT }}' \ - --header 'content-type: application/json' \ - --data "$BODY_DATA" \ No newline at end of file diff --git a/.github/workflows/asana-create-task.yml b/.github/workflows/asana-create-task.yml deleted file mode 100644 index e6a444ec..00000000 --- a/.github/workflows/asana-create-task.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Github --> Asana Create Task Workflow - -on: - issues: - types: [opened] - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - permissions: - issues: read - steps: - - name: Create Asana task - env: - ISSUE_TITLE: ${{ github.event.issue.title }} - ISSUE_BODY: ${{ github.event.issue.body }} - ISSUE_HTML_URL: ${{ github.event.issue.html_url }} - ISSUE_ID: ${{ github.event.issue.id }} - ISSUE_NUMBER: ${{ github.event.issue.number }} - REPO_FULL_NAME: ${{ github.event.repository.full_name }} - SDK_PLATFORM_GROUP: "1208961704779581" - SDK_PLATFORM_GROUP_CROSS_PLATFORM: "1208961704779584" - SDK_PLATFORM: "1208961704779592" - SDK_PLATFORM_FLUTTER: "1208961704779607" - DSA_PRIORITY: "1208779519954980" - DSA_PRIORITY_NO_PRIORITY: "1208779521616959" - DSA_STATUS: "1210103546117753" - DSA_STATUS_TRIAGE: "1210103546117756" - DSA_REPO_TICKET_URL: "1210347857768758" - WORKSPACE_ID: "780103692902078" - PROJECT_ID_GITHUB_AND_IMPORTANT_SDK_ISSUES: "1208970714650308" - PROJECT_ID_SDK_BACKLOG: "1208777198342772" - run: | - DATA_BODY=$(jq -n \ - --arg title "$ISSUE_TITLE" \ - --arg body "$ISSUE_BODY" \ - --arg url "$ISSUE_HTML_URL" \ - --arg id "$ISSUE_ID" \ - --arg number "$ISSUE_NUMBER" \ - --arg repo_full_name "$REPO_FULL_NAME" \ - --arg sdk_platform_group "$SDK_PLATFORM_GROUP" \ - --arg sdk_platform_group_cross_platform "$SDK_PLATFORM_GROUP_CROSS_PLATFORM" \ - --arg sdk_platform "$SDK_PLATFORM" \ - --arg sdk_platform_flutter "$SDK_PLATFORM_FLUTTER" \ - --arg dsa_priority "$DSA_PRIORITY" \ - --arg dsa_priority_no_priority "$DSA_PRIORITY_NO_PRIORITY" \ - --arg dsa_status "$DSA_STATUS" \ - --arg dsa_status_triage "$DSA_STATUS_TRIAGE" \ - --arg dsa_repo_ticket_url "$DSA_REPO_TICKET_URL" \ - --arg workspace_id "$WORKSPACE_ID" \ - --arg project_id_github_and_important_sdk_issues "$PROJECT_ID_GITHUB_AND_IMPORTANT_SDK_ISSUES" \ - --arg project_id_sdk_backlog "$PROJECT_ID_SDK_BACKLOG" \ - '{ - "data": { - "custom_fields": { - $sdk_platform_group: $sdk_platform_group_cross_platform, - $sdk_platform: $sdk_platform_flutter, - $dsa_priority: $dsa_priority_no_priority, - $dsa_status: $dsa_status_triage, - $dsa_repo_ticket_url: $url - }, - "name": $title, - "workspace": $workspace_id, - "projects": [$project_id_github_and_important_sdk_issues, $project_id_sdk_backlog], - "notes": "Issue ID: \($repo_full_name)#\($id)\nIssue number: \($number)\nCreated via GitHub Actions\n----\n\n\($body)" - } - }') - - curl --request POST \ - --url https://app.asana.com/api/1.0/tasks?opt_pretty=true \ - --header 'accept: application/json' \ - --header 'authorization: Bearer ${{ secrets.ASANA_PAT }}' \ - --header 'content-type: application/json' \ - --data "$DATA_BODY" \ - --output response.json - - TASK_GID=$(jq -r '.data.gid' response.json) - echo "TASK_GID=$TASK_GID" >> $GITHUB_ENV - - name: Move to "0 Unclassified" section in "Github & Important SDK Issues" project - env: - SECTION_ID_GITHUB_AND_IMPORTANT_SDK_ISSUES: "1208970755434051" - run: | - DATA_BODY=$(jq -n \ - --arg task_gid "$TASK_GID" \ - --arg section_id "$SECTION_ID_GITHUB_AND_IMPORTANT_SDK_ISSUES" \ - '{ - "data": { - "task": $task_gid, - "insert_after": "null" - } - }') - - curl --request POST \ - --url https://app.asana.com/api/1.0/sections/$section_id/addTask \ - --header 'accept: application/json' \ - --header 'authorization: Bearer ${{ secrets.ASANA_PAT }}' \ - --header 'content-type: application/json' \ - --data "$DATA_BODY" - - name: Move to "Untriaged" section in "SDK / Backlog" project - env: - SECTION_ID_SDK_BACKLOG: "1208899729378982" - run: | - DATA_BODY=$(jq -n \ - --arg task_gid "$TASK_GID" \ - --arg section_id "$SECTION_ID_SDK_BACKLOG" \ - '{ - "data": { - "task": $task_gid, - "insert_after": "null" - } - }') - - curl --request POST \ - --url https://app.asana.com/api/1.0/sections/$section_id/addTask \ - --header 'accept: application/json' \ - --header 'authorization: Bearer ${{ secrets.ASANA_PAT }}' \ - --header 'content-type: application/json' \ - --data "$DATA_BODY" \ No newline at end of file diff --git a/.github/workflows/asana-update-issue.yml b/.github/workflows/asana-update-issue.yml deleted file mode 100644 index d9dcebe9..00000000 --- a/.github/workflows/asana-update-issue.yml +++ /dev/null @@ -1,172 +0,0 @@ -name: Github --> Asana Issue Updates Workflow - -on: - issues: - types: [edited, deleted, closed, reopened, assigned, unassigned, labeled, unlabeled, milestoned, demilestoned, pinned, unpinned, locked, unlocked, transferred] - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - permissions: - issues: read - steps: - - name: Get Asana Task Corresponding to Issue - env: - ISSUE_ID: ${{ github.event.issue.id }} - REPO_FULL_NAME: ${{ github.event.repository.full_name }} - WORKSPACE_ID: "780103692902078" - run: | - REPO_SCOPED_ISSUE_ID="$REPO_FULL_NAME#$ISSUE_ID" - - curl --request GET \ - --url "https://app.asana.com/api/1.0/workspaces/$WORKSPACE_ID/tasks/search?opt_fields=notes&text=$REPO_SCOPED_ISSUE_ID&sort_by=modified_at&sort_ascending=false" \ - --header 'accept: application/json' \ - --header 'authorization: Bearer ${{ secrets.ASANA_PAT }}' \ - --output response.json - TASK_GID=$(jq -r '.data[0].gid' response.json) - echo "TASK_GID=$TASK_GID" >> $GITHUB_ENV - - name: Determine Action and Post to Asana - env: - ACTION_TYPE: ${{ github.event.action }} - ACTOR_NAME: ${{ github.event.sender.login }} - ISSUE_TITLE: ${{ github.event.issue.title }} - ISSUE_NUMBER: ${{ github.event.issue.number }} - ISSUE_STATE: ${{ github.event.issue.state }} - run: | - # Map GitHub action types to human-readable descriptions - case "$ACTION_TYPE" in - "edited") - ACTION_DESC="edited the issue" - ;; - "deleted") - ACTION_DESC="deleted the issue" - ;; - "closed") - ACTION_DESC="closed the issue" - ;; - "reopened") - ACTION_DESC="reopened the issue" - ;; - "assigned") - ACTION_DESC="assigned the issue" - ;; - "unassigned") - ACTION_DESC="unassigned the issue" - ;; - "labeled") - ACTION_DESC="added labels to the issue" - ;; - "unlabeled") - ACTION_DESC="removed labels from the issue" - ;; - "milestoned") - ACTION_DESC="added the issue to a milestone" - ;; - "demilestoned") - ACTION_DESC="removed the issue from a milestone" - ;; - "pinned") - ACTION_DESC="pinned the issue" - ;; - "unpinned") - ACTION_DESC="unpinned the issue" - ;; - "locked") - ACTION_DESC="locked the issue" - ;; - "unlocked") - ACTION_DESC="unlocked the issue" - ;; - "transferred") - ACTION_DESC="transferred the issue" - ;; - *) - ACTION_DESC="performed an action on the issue" - ;; - esac - - # Add additional context for specific actions based on webhook payload - if [ "$ACTION_TYPE" = "assigned" ] && [ -n "${{ github.event.assignee.login }}" ]; then - ACTION_DESC="assigned the issue to ${{ github.event.assignee.login }}" - fi - - if [ "$ACTION_TYPE" = "unassigned" ] && [ -n "${{ github.event.assignee.login }}" ]; then - ACTION_DESC="unassigned the issue from ${{ github.event.assignee.login }}" - fi - - if [ "$ACTION_TYPE" = "labeled" ] && [ -n "${{ github.event.label.name }}" ]; then - LABEL_COLOR="${{ github.event.label.color }}" - ACTION_DESC="added label '${{ github.event.label.name }}' to the issue" - if [ -n "$LABEL_COLOR" ]; then - ACTION_DESC="$ACTION_DESC (color: #$LABEL_COLOR)" - fi - fi - - if [ "$ACTION_TYPE" = "unlabeled" ] && [ -n "${{ github.event.label.name }}" ]; then - LABEL_COLOR="${{ github.event.label.color }}" - ACTION_DESC="removed label '${{ github.event.label.name }}' from the issue" - if [ -n "$LABEL_COLOR" ]; then - ACTION_DESC="$ACTION_DESC (color: #$LABEL_COLOR)" - fi - fi - - if [ "$ACTION_TYPE" = "milestoned" ] && [ -n "${{ github.event.milestone.title }}" ]; then - MILESTONE_DUE_DATE="${{ github.event.milestone.due_on }}" - ACTION_DESC="added the issue to milestone '${{ github.event.milestone.title }}'" - if [ -n "$MILESTONE_DUE_DATE" ] && [ "$MILESTONE_DUE_DATE" != "null" ]; then - ACTION_DESC="$ACTION_DESC (due: $MILESTONE_DUE_DATE)" - fi - fi - - if [ "$ACTION_TYPE" = "demilestoned" ] && [ -n "${{ github.event.milestone.title }}" ]; then - ACTION_DESC="removed the issue from milestone '${{ github.event.milestone.title }}'" - fi - - if [ "$ACTION_TYPE" = "transferred" ] && [ -n "${{ github.event.changes.new_repository.full_name }}" ]; then - ACTION_DESC="transferred the issue to repository ${{ github.event.changes.new_repository.full_name }}" - fi - - if [ "$ACTION_TYPE" = "edited" ] && [ -n "${{ github.event.changes.title.from }}" ]; then - OLD_TITLE="${{ github.event.changes.title.from }}" - NEW_TITLE="${{ github.event.issue.title }}" - ACTION_DESC="edited the issue title from '$OLD_TITLE' to '$NEW_TITLE'" - fi - - echo "ACTION_DESC=$ACTION_DESC" >> $GITHUB_ENV - - # Only proceed if we found a task - if [ "$TASK_GID" != "null" ] && [ -n "$TASK_GID" ]; then - # Create a more detailed message with additional context - MESSAGE_TEXT="$ACTOR_NAME performed an action: $ACTION_DESC" - - # Add issue state information for state changes - if [ "$ACTION_TYPE" = "closed" ] || [ "$ACTION_TYPE" = "reopened" ]; then - MESSAGE_TEXT=$(printf "%s\nIssue state: %s" "$MESSAGE_TEXT" "$ISSUE_STATE") - fi - - # Add repository information for transferred issues - if [ "$ACTION_TYPE" = "transferred" ]; then - REPO_NAME="${{ github.event.repository.full_name }}" - MESSAGE_TEXT=$(printf "%s\nFrom repository: %s" "$MESSAGE_TEXT" "$REPO_NAME") - fi - - MESSAGE_TEXT=$(printf "%s\n\nIssue: #%s - %s" "$MESSAGE_TEXT" "$ISSUE_NUMBER" "$ISSUE_TITLE") - - BODY_DATA=$(jq -n \ - --arg text "$MESSAGE_TEXT" \ - '{ - "data": { - "text": $text - } - }') - - curl --request POST \ - --url https://app.asana.com/api/1.0/tasks/$TASK_GID/stories \ - --header 'accept: application/json' \ - --header 'authorization: Bearer ${{ secrets.ASANA_PAT }}' \ - --header 'content-type: application/json' \ - --data "$BODY_DATA" - else - echo "No corresponding Asana task found for issue ID: $ISSUE_ID" - fi \ No newline at end of file From 3ee0bf323f4da79b7f1b7133f589e1b8c1208b8b Mon Sep 17 00:00:00 2001 From: Fadi George Date: Wed, 1 Apr 2026 13:26:33 -0700 Subject: [PATCH 16/17] ci: update iOS SDK to use XCFramework package --- .github/workflows/create-release-pr.yml | 6 +++++- ios/onesignal_flutter/Package.swift | 10 +++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/create-release-pr.yml b/.github/workflows/create-release-pr.yml index b91965e0..dcd36495 100644 --- a/.github/workflows/create-release-pr.yml +++ b/.github/workflows/create-release-pr.yml @@ -136,6 +136,10 @@ jobs: sed -i '' "s|s.dependency 'OneSignalXCFramework', '[^']*'|s.dependency 'OneSignalXCFramework', '${VERSION}'|" ios/onesignal_flutter.podspec echo "✓ Updated ios/onesignal_flutter.podspec with iOS SDK ${VERSION}" + # Update Package.swift with new version + sed -i '' "s|\.package(url: \"https://github.com/OneSignal/OneSignal-XCFramework\", exact: \"[^\"]*\")|.package(url: \"https://github.com/OneSignal/OneSignal-XCFramework\", exact: \"${VERSION}\")|" ios/onesignal_flutter/Package.swift + echo "✓ Updated ios/onesignal_flutter/Package.swift with iOS SDK ${VERSION}" + # Only commit if there are changes git add -A git diff --staged --quiet && exit 0 @@ -158,7 +162,7 @@ jobs: sed -i '' "s/OneSignalWrapper\.setSdkVersion(\"[^\"]*\")/OneSignalWrapper.setSdkVersion(\"$WRAPPER_VERSION\")/g" android/src/main/java/com/onesignal/flutter/OneSignalPlugin.java # Update OneSignalPlugin.m wrapper version - sed -i '' "s/OneSignalWrapper\.sdkVersion = @\"[^\"]*\"/OneSignalWrapper.sdkVersion = @\"$WRAPPER_VERSION\"/g" ios/Classes/OneSignalPlugin.m + sed -i '' "s/OneSignalWrapper\.sdkVersion = @\"[^\"]*\"/OneSignalWrapper.sdkVersion = @\"$WRAPPER_VERSION\"/g" ios/onesignal_flutter/Sources/onesignal_flutter/OneSignalPlugin.m # Only commit if there are changes git add -A diff --git a/ios/onesignal_flutter/Package.swift b/ios/onesignal_flutter/Package.swift index f62b9b6b..4a75bdc8 100644 --- a/ios/onesignal_flutter/Package.swift +++ b/ios/onesignal_flutter/Package.swift @@ -12,16 +12,16 @@ let package = Package( .library(name: "onesignal-flutter", targets: ["onesignal_flutter"]) ], dependencies: [ - .package(url: "https://github.com/OneSignal/OneSignal-iOS-SDK", exact: "5.5.0"), + .package(url: "https://github.com/OneSignal/OneSignal-XCFramework", exact: "5.5.0"), ], targets: [ .target( name: "onesignal_flutter", dependencies: [ - .product(name: "OneSignalFramework", package: "OneSignal-iOS-SDK"), - .product(name: "OneSignalInAppMessages", package: "OneSignal-iOS-SDK"), - .product(name: "OneSignalLocation", package: "OneSignal-iOS-SDK"), - .product(name: "OneSignalExtension", package: "OneSignal-iOS-SDK"), + .product(name: "OneSignalFramework", package: "OneSignal-XCFramework"), + .product(name: "OneSignalInAppMessages", package: "OneSignal-XCFramework"), + .product(name: "OneSignalLocation", package: "OneSignal-XCFramework"), + .product(name: "OneSignalExtension", package: "OneSignal-XCFramework"), ], cSettings: [ .headerSearchPath("include/onesignal_flutter") From d22af3c092037ba54ccfaf670419430f6ee8ff86 Mon Sep 17 00:00:00 2001 From: Fadi George Date: Wed, 1 Apr 2026 13:39:18 -0700 Subject: [PATCH 17/17] refactor(demo): create AppTextField wrapper component --- examples/demo/lib/widgets/app_text_field.dart | 15 +++++++++++ examples/demo/lib/widgets/dialogs.dart | 25 ++++++++++--------- .../sections/live_activities_section.dart | 4 +-- 3 files changed, 30 insertions(+), 14 deletions(-) create mode 100644 examples/demo/lib/widgets/app_text_field.dart diff --git a/examples/demo/lib/widgets/app_text_field.dart b/examples/demo/lib/widgets/app_text_field.dart new file mode 100644 index 00000000..eae5a866 --- /dev/null +++ b/examples/demo/lib/widgets/app_text_field.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class AppTextField extends TextField { + const AppTextField({ + super.key, + super.controller, + super.decoration, + super.keyboardType, + super.onChanged, + super.textAlign, + super.style, + super.maxLines, + super.autocorrect = false, + }); +} diff --git a/examples/demo/lib/widgets/dialogs.dart b/examples/demo/lib/widgets/dialogs.dart index 935695c1..9f6e3655 100644 --- a/examples/demo/lib/widgets/dialogs.dart +++ b/examples/demo/lib/widgets/dialogs.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import '../services/tooltip_helper.dart'; import '../theme.dart'; +import 'app_text_field.dart'; // Single input dialog (login, email, sms) class SingleInputDialog extends StatefulWidget { @@ -42,7 +43,7 @@ class _SingleInputDialogState extends State { width: double.maxFinite, child: Semantics( label: '${widget.fieldLabel}_input', - child: TextField( + child: AppTextField( controller: _controller, decoration: InputDecoration(labelText: widget.fieldLabel), keyboardType: widget.keyboardType, @@ -109,7 +110,7 @@ class _PairInputDialogState extends State { Expanded( child: Semantics( label: '${widget.keyLabel}_input', - child: TextField( + child: AppTextField( controller: _keyController, decoration: InputDecoration(labelText: widget.keyLabel), onChanged: (_) => setState(() {}), @@ -120,7 +121,7 @@ class _PairInputDialogState extends State { Expanded( child: Semantics( label: '${widget.valueLabel}_input', - child: TextField( + child: AppTextField( controller: _valueController, decoration: InputDecoration(labelText: widget.valueLabel), onChanged: (_) => setState(() {}), @@ -231,7 +232,7 @@ class _MultiPairInputDialogState extends State { Row( children: [ Expanded( - child: TextField( + child: AppTextField( controller: _keyControllers[i], decoration: InputDecoration( labelText: widget.keyLabel, @@ -241,7 +242,7 @@ class _MultiPairInputDialogState extends State { ), const SizedBox(width: 8), Expanded( - child: TextField( + child: AppTextField( controller: _valueControllers[i], decoration: InputDecoration( labelText: widget.valueLabel, @@ -380,7 +381,7 @@ class _LoginDialogState extends State { width: double.maxFinite, child: Semantics( label: 'external_user_id_input', - child: TextField( + child: AppTextField( controller: _controller, decoration: const InputDecoration(labelText: 'External User Id'), onChanged: (_) => setState(() {}), @@ -468,14 +469,14 @@ class _OutcomeDialogState extends State { ), ), const SizedBox(height: 8), - TextField( + AppTextField( controller: _nameController, decoration: const InputDecoration(labelText: 'Outcome Name'), onChanged: (_) => setState(() {}), ), if (_type == OutcomeType.withValue) ...[ const SizedBox(height: 12), - TextField( + AppTextField( controller: _valueController, decoration: const InputDecoration(labelText: 'Value'), keyboardType: @@ -563,13 +564,13 @@ class _TrackEventDialogState extends State { child: Column( mainAxisSize: MainAxisSize.min, children: [ - TextField( + AppTextField( controller: _nameController, decoration: const InputDecoration(labelText: 'Event Name'), onChanged: (_) => setState(() {}), ), const SizedBox(height: 12), - TextField( + AppTextField( controller: _propsController, decoration: InputDecoration( labelText: 'Properties (optional, JSON)', @@ -642,13 +643,13 @@ class _CustomNotificationDialogState extends State { child: Column( mainAxisSize: MainAxisSize.min, children: [ - TextField( + AppTextField( controller: _titleController, decoration: const InputDecoration(labelText: 'Title'), onChanged: (_) => setState(() {}), ), const SizedBox(height: 12), - TextField( + AppTextField( controller: _bodyController, decoration: const InputDecoration(labelText: 'Body'), onChanged: (_) => setState(() {}), diff --git a/examples/demo/lib/widgets/sections/live_activities_section.dart b/examples/demo/lib/widgets/sections/live_activities_section.dart index 22474eb9..dbe82125 100644 --- a/examples/demo/lib/widgets/sections/live_activities_section.dart +++ b/examples/demo/lib/widgets/sections/live_activities_section.dart @@ -3,6 +3,7 @@ import 'package:provider/provider.dart'; import '../../theme.dart'; import '../../viewmodels/app_viewmodel.dart'; +import '../app_text_field.dart'; import '../action_button.dart'; import '../section_card.dart'; @@ -138,7 +139,7 @@ class _InputRow extends StatelessWidget { ), ), Expanded( - child: TextField( + child: AppTextField( controller: controller, textAlign: TextAlign.right, style: const TextStyle(fontSize: 14, color: Color(0xFF212121)), @@ -149,7 +150,6 @@ class _InputRow extends StatelessWidget { contentPadding: EdgeInsets.symmetric(vertical: 4), isDense: true, ), - autocorrect: false, onChanged: onChanged, ), ),