diff --git a/examples/example/.metadata b/examples/example/.metadata index bcef94eb7..7dbc69ae5 100644 --- a/examples/example/.metadata +++ b/examples/example/.metadata @@ -4,7 +4,36 @@ # This file should be version controlled and should not be manually edited. version: - revision: bbfbf1770cca2da7c82e887e4e4af910034800b6 - channel: stable + 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: macos + create_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407 + base_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407 + - platform: web + 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/example/android/.gitignore b/examples/example/android/.gitignore new file mode 100644 index 000000000..82677b89f --- /dev/null +++ b/examples/example/android/.gitignore @@ -0,0 +1,15 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java +.cxx/ +.kotlin/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/examples/example/android/app/build.gradle b/examples/example/android/app/build.gradle deleted file mode 100644 index 7b024e079..000000000 --- a/examples/example/android/app/build.gradle +++ /dev/null @@ -1,63 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -// START: FlutterFire Configuration -apply plugin: 'com.google.gms.google-services' -apply plugin: 'com.google.firebase.firebase-perf' -// END: FlutterFire Configuration -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 33 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.example" - minSdkVersion 22 - targetSdkVersion 33 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - } - - 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.debug - } - } -} - -flutter { - source '../..' -} diff --git a/examples/example/android/app/build.gradle.kts b/examples/example/android/app/build.gradle.kts new file mode 100644 index 000000000..1e8f4d997 --- /dev/null +++ b/examples/example/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.flutter_gen.example" + 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.flutter_gen.example" + // 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/example/android/app/google-services.json b/examples/example/android/app/google-services.json deleted file mode 100644 index f54fb315e..000000000 --- a/examples/example/android/app/google-services.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "project_info": { - "project_number": "223276840801", - "project_id": "flutter-gen-5b267", - "storage_bucket": "flutter-gen-5b267.appspot.com" - }, - "client": [ - { - "client_info": { - "mobilesdk_app_id": "1:223276840801:android:8c43b96e396a1781b77720", - "android_client_info": { - "package_name": "com.example.example" - } - }, - "oauth_client": [ - { - "client_id": "223276840801-vd883eedtkum45svga4m9dqpppacohpi.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyBqCLgp5h6_dHlMJzKSsCfnSFawfFjCK1c" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "223276840801-vd883eedtkum45svga4m9dqpppacohpi.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - } - ], - "configuration_version": "1" -} diff --git a/examples/example/android/app/src/debug/AndroidManifest.xml b/examples/example/android/app/src/debug/AndroidManifest.xml index c208884f3..399f6981d 100644 --- a/examples/example/android/app/src/debug/AndroidManifest.xml +++ b/examples/example/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/examples/example/android/app/src/main/AndroidManifest.xml b/examples/example/android/app/src/main/AndroidManifest.xml index 1138bd4ef..6da68eb19 100644 --- a/examples/example/android/app/src/main/AndroidManifest.xml +++ b/examples/example/android/app/src/main/AndroidManifest.xml @@ -1,18 +1,13 @@ - - + - - @@ -45,4 +31,15 @@ android:name="flutterEmbedding" android:value="2" /> + + + + + + + diff --git a/examples/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt b/examples/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt deleted file mode 100644 index e793a000d..000000000 --- a/examples/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.example.example - -import io.flutter.embedding.android.FlutterActivity - -class MainActivity: FlutterActivity() { -} diff --git a/examples/example/android/app/src/main/kotlin/com/flutter_gen/example/MainActivity.kt b/examples/example/android/app/src/main/kotlin/com/flutter_gen/example/MainActivity.kt new file mode 100644 index 000000000..8df5ba423 --- /dev/null +++ b/examples/example/android/app/src/main/kotlin/com/flutter_gen/example/MainActivity.kt @@ -0,0 +1,5 @@ +package com.flutter_gen.example + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/examples/example/android/app/src/main/res/values/styles.xml b/examples/example/android/app/src/main/res/values/styles.xml index 1f83a33fd..cb1ef8805 100644 --- a/examples/example/android/app/src/main/res/values/styles.xml +++ b/examples/example/android/app/src/main/res/values/styles.xml @@ -1,18 +1,18 @@ - - - diff --git a/examples/example/android/app/src/profile/AndroidManifest.xml b/examples/example/android/app/src/profile/AndroidManifest.xml index c208884f3..399f6981d 100644 --- a/examples/example/android/app/src/profile/AndroidManifest.xml +++ b/examples/example/android/app/src/profile/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/examples/example/android/build.gradle b/examples/example/android/build.gradle deleted file mode 100644 index 91429c295..000000000 --- a/examples/example/android/build.gradle +++ /dev/null @@ -1,35 +0,0 @@ -buildscript { - ext.kotlin_version = '1.8.10' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.2.2' - // START: FlutterFire Configuration - classpath 'com.google.gms:google-services:4.3.15' - classpath 'com.google.firebase:perf-plugin:1.4.2' - // END: FlutterFire Configuration - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/examples/example/android/build.gradle.kts b/examples/example/android/build.gradle.kts new file mode 100644 index 000000000..dbee657bb --- /dev/null +++ b/examples/example/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/example/android/example_android.iml b/examples/example/android/example_android.iml new file mode 100644 index 000000000..3bc4b3b34 --- /dev/null +++ b/examples/example/android/example_android.iml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/example/android/gradle.properties b/examples/example/android/gradle.properties index 3dbac086c..fbee1d8cd 100644 --- a/examples/example/android/gradle.properties +++ b/examples/example/android/gradle.properties @@ -1,4 +1,2 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true -android.enableJetifier=false diff --git a/examples/example/android/gradle/wrapper/gradle-wrapper.properties b/examples/example/android/gradle/wrapper/gradle-wrapper.properties index 070cb702f..20014ed36 100644 --- a/examples/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/examples/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip diff --git a/examples/example/android/settings.gradle b/examples/example/android/settings.gradle deleted file mode 100644 index 44e62bcf0..000000000 --- a/examples/example/android/settings.gradle +++ /dev/null @@ -1,11 +0,0 @@ -include ':app' - -def localPropertiesFile = new File(rootProject.projectDir, "local.properties") -def properties = new Properties() - -assert localPropertiesFile.exists() -localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } - -def flutterSdkPath = properties.getProperty("flutter.sdk") -assert flutterSdkPath != null, "flutter.sdk not set in local.properties" -apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/examples/example/android/settings.gradle.kts b/examples/example/android/settings.gradle.kts new file mode 100644 index 000000000..ca7fe065c --- /dev/null +++ b/examples/example/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/example/ios/Flutter/AppFrameworkInfo.plist b/examples/example/ios/Flutter/AppFrameworkInfo.plist index 8c6e56146..1dc6cf765 100644 --- a/examples/example/ios/Flutter/AppFrameworkInfo.plist +++ b/examples/example/ios/Flutter/AppFrameworkInfo.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) + en CFBundleExecutable App CFBundleIdentifier @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 12.0 + 13.0 diff --git a/examples/example/ios/Podfile b/examples/example/ios/Podfile index 10f3c9b47..620e46eba 100644 --- a/examples/example/ios/Podfile +++ b/examples/example/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -platform :ios, '13.0' +# platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -29,9 +29,11 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end end post_install do |installer| diff --git a/examples/example/ios/Podfile.lock b/examples/example/ios/Podfile.lock index 85af28f4b..a2e03c9d0 100644 --- a/examples/example/ios/Podfile.lock +++ b/examples/example/ios/Podfile.lock @@ -1,318 +1,22 @@ PODS: - - Adjust (4.29.7): - - Adjust/Core (= 4.29.7) - - Adjust/Core (4.29.7) - - adjust_sdk (4.29.2): - - Adjust (= 4.29.7) - - Flutter - - AppAuth (1.6.0): - - AppAuth/Core (= 1.6.0) - - AppAuth/ExternalUserAgent (= 1.6.0) - - AppAuth/Core (1.6.0) - - AppAuth/ExternalUserAgent (1.6.0): - - AppAuth/Core - - camera (0.0.1): - - Flutter - - connectivity_plus (0.0.1): - - Flutter - - ReachabilitySwift - - device_info_plus (0.0.1): - - Flutter - - FBAEMKit (13.2.0): - - FBSDKCoreKit_Basics (= 13.2.0) - - FBSDKCoreKit (13.2.0): - - FBAEMKit (= 13.2.0) - - FBSDKCoreKit_Basics (= 13.2.0) - - FBSDKCoreKit_Basics (13.2.0) - - FBSDKLoginKit (13.2.0): - - FBSDKCoreKit (= 13.2.0) - Flutter (1.0.0) - - flutter_facebook_auth (4.3.0): - - FBSDKCoreKit (~> 13) - - FBSDKLoginKit (~> 13) - - Flutter - - flutter_image_compress (0.0.1): - - Flutter - - Mantle - - SDWebImage - - SDWebImageWebPCoder - - flutter_inappwebview (0.0.1): - - Flutter - - flutter_inappwebview/Core (= 0.0.1) - - OrderedSet (~> 5.0) - - flutter_inappwebview/Core (0.0.1): - - Flutter - - OrderedSet (~> 5.0) - - flutter_local_notifications (0.0.1): - - Flutter - - flutter_secure_storage (3.3.1): - - Flutter - - FMDB (2.7.5): - - FMDB/standard (= 2.7.5) - - FMDB/standard (2.7.5) - - geocoding (1.0.5): - - Flutter - - geolocator_apple (1.2.0): - - Flutter - - google_sign_in_ios (0.0.1): - - Flutter - - GoogleSignIn (~> 6.2) - - GoogleSignIn (6.2.3): - - AppAuth (~> 1.5) - - GTMAppAuth (~> 1.3) - - GTMSessionFetcher/Core (~> 1.1) - - GTMAppAuth (1.3.0): - - AppAuth/Core (~> 1.4) - - GTMSessionFetcher/Core (~> 1.5) - - GTMSessionFetcher/Core (1.7.2) - - image_editor (0.0.1): - - Flutter - - image_picker_ios (0.0.1): - - Flutter - - in_app_review (0.2.0): - - Flutter - - integration_test (0.0.1): - - Flutter - - libwebp (1.2.3): - - libwebp/demux (= 1.2.3) - - libwebp/mux (= 1.2.3) - - libwebp/webp (= 1.2.3) - - libwebp/demux (1.2.3): - - libwebp/webp - - libwebp/mux (1.2.3): - - libwebp/demux - - libwebp/webp (1.2.3) - - local_auth_ios (0.0.1): - - Flutter - - Mantle (2.2.0): - - Mantle/extobjc (= 2.2.0) - - Mantle/extobjc (2.2.0) - - native_device_orientation (0.0.1): - - Flutter - - OrderedSet (5.0.0) - - package_info_plus (0.4.5): - - Flutter - - path_provider_ios (0.0.1): - - Flutter - - permission_handler_apple (9.0.4): - - Flutter - - ReachabilitySwift (5.0.0) - - SDWebImage (5.13.2): - - SDWebImage/Core (= 5.13.2) - - SDWebImage/Core (5.13.2) - - SDWebImageWebPCoder (0.9.1): - - libwebp (~> 1.0) - - SDWebImage/Core (~> 5.13) - - Sentry (7.11.0): - - Sentry/Core (= 7.11.0) - - Sentry/Core (7.11.0) - - sentry_flutter (0.0.1): - - Flutter - - FlutterMacOS - - Sentry (~> 7.11.0) - - share_plus (0.0.1): - - Flutter - - shared_preferences_ios (0.0.1): - - Flutter - - sign_in_with_apple (0.0.1): - - Flutter - - sqflite (0.0.2): - - Flutter - - FMDB (>= 2.7.5) - - twitter_login (0.0.1): - - Flutter - - ua_client_hints (1.1.0): - - Flutter - - uni_links (0.0.1): - - Flutter - - url_launcher_ios (0.0.1): - - Flutter - - video_player_avfoundation (0.0.1): - - Flutter - - wakelock (0.0.1): - - Flutter - - webview_flutter_wkwebview (0.0.1): + - rive_native (0.0.1): - Flutter DEPENDENCIES: - - adjust_sdk (from `.symlinks/plugins/adjust_sdk/ios`) - - camera (from `.symlinks/plugins/camera/ios`) - - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) - - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) - Flutter (from `Flutter`) - - flutter_facebook_auth (from `.symlinks/plugins/flutter_facebook_auth/ios`) - - flutter_image_compress (from `.symlinks/plugins/flutter_image_compress/ios`) - - flutter_inappwebview (from `.symlinks/plugins/flutter_inappwebview/ios`) - - flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`) - - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) - - geocoding (from `.symlinks/plugins/geocoding/ios`) - - geolocator_apple (from `.symlinks/plugins/geolocator_apple/ios`) - - google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/ios`) - - image_editor (from `.symlinks/plugins/image_editor/ios`) - - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - - in_app_review (from `.symlinks/plugins/in_app_review/ios`) - - integration_test (from `.symlinks/plugins/integration_test/ios`) - - local_auth_ios (from `.symlinks/plugins/local_auth_ios/ios`) - - native_device_orientation (from `.symlinks/plugins/native_device_orientation/ios`) - - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - - path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`) - - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - - sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`) - - share_plus (from `.symlinks/plugins/share_plus/ios`) - - shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`) - - sign_in_with_apple (from `.symlinks/plugins/sign_in_with_apple/ios`) - - sqflite (from `.symlinks/plugins/sqflite/ios`) - - twitter_login (from `.symlinks/plugins/twitter_login/ios`) - - ua_client_hints (from `.symlinks/plugins/ua_client_hints/ios`) - - uni_links (from `.symlinks/plugins/uni_links/ios`) - - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - - video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/ios`) - - wakelock (from `.symlinks/plugins/wakelock/ios`) - - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`) - -SPEC REPOS: - trunk: - - Adjust - - AppAuth - - FBAEMKit - - FBSDKCoreKit - - FBSDKCoreKit_Basics - - FBSDKLoginKit - - FMDB - - GoogleSignIn - - GTMAppAuth - - GTMSessionFetcher - - libwebp - - Mantle - - OrderedSet - - ReachabilitySwift - - SDWebImage - - SDWebImageWebPCoder - - Sentry + - rive_native (from `.symlinks/plugins/rive_native/ios`) EXTERNAL SOURCES: - adjust_sdk: - :path: ".symlinks/plugins/adjust_sdk/ios" - camera: - :path: ".symlinks/plugins/camera/ios" - connectivity_plus: - :path: ".symlinks/plugins/connectivity_plus/ios" - device_info_plus: - :path: ".symlinks/plugins/device_info_plus/ios" Flutter: :path: Flutter - flutter_facebook_auth: - :path: ".symlinks/plugins/flutter_facebook_auth/ios" - flutter_image_compress: - :path: ".symlinks/plugins/flutter_image_compress/ios" - flutter_inappwebview: - :path: ".symlinks/plugins/flutter_inappwebview/ios" - flutter_local_notifications: - :path: ".symlinks/plugins/flutter_local_notifications/ios" - flutter_secure_storage: - :path: ".symlinks/plugins/flutter_secure_storage/ios" - geocoding: - :path: ".symlinks/plugins/geocoding/ios" - geolocator_apple: - :path: ".symlinks/plugins/geolocator_apple/ios" - google_sign_in_ios: - :path: ".symlinks/plugins/google_sign_in_ios/ios" - image_editor: - :path: ".symlinks/plugins/image_editor/ios" - image_picker_ios: - :path: ".symlinks/plugins/image_picker_ios/ios" - in_app_review: - :path: ".symlinks/plugins/in_app_review/ios" - integration_test: - :path: ".symlinks/plugins/integration_test/ios" - local_auth_ios: - :path: ".symlinks/plugins/local_auth_ios/ios" - native_device_orientation: - :path: ".symlinks/plugins/native_device_orientation/ios" - package_info_plus: - :path: ".symlinks/plugins/package_info_plus/ios" - path_provider_ios: - :path: ".symlinks/plugins/path_provider_ios/ios" - permission_handler_apple: - :path: ".symlinks/plugins/permission_handler_apple/ios" - sentry_flutter: - :path: ".symlinks/plugins/sentry_flutter/ios" - share_plus: - :path: ".symlinks/plugins/share_plus/ios" - shared_preferences_ios: - :path: ".symlinks/plugins/shared_preferences_ios/ios" - sign_in_with_apple: - :path: ".symlinks/plugins/sign_in_with_apple/ios" - sqflite: - :path: ".symlinks/plugins/sqflite/ios" - twitter_login: - :path: ".symlinks/plugins/twitter_login/ios" - ua_client_hints: - :path: ".symlinks/plugins/ua_client_hints/ios" - uni_links: - :path: ".symlinks/plugins/uni_links/ios" - url_launcher_ios: - :path: ".symlinks/plugins/url_launcher_ios/ios" - video_player_avfoundation: - :path: ".symlinks/plugins/video_player_avfoundation/ios" - wakelock: - :path: ".symlinks/plugins/wakelock/ios" - webview_flutter_wkwebview: - :path: ".symlinks/plugins/webview_flutter_wkwebview/ios" + rive_native: + :path: ".symlinks/plugins/rive_native/ios" SPEC CHECKSUMS: - Adjust: 91a06a01e4bb35b432e26b5d5bb8995b95fc381c - adjust_sdk: 35d9da526160bfea774bd44536b2223697c0b86b - AppAuth: 8fca6b5563a5baef2c04bee27538025e4ceb2add - camera: 9993f92f2c793e87b65e35f3a23c70582afb05b1 - connectivity_plus: 413a8857dd5d9f1c399a39130850d02fe0feaf7e - device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed - FBAEMKit: c2b2895363b7e57192013d1dc49fdf498b28624c - FBSDKCoreKit: 58139803d861e72c7661dc875611a759352a55ac - FBSDKCoreKit_Basics: 1ffc68326a5ece051d85574f02a0adcf27c2a5f2 - FBSDKLoginKit: 19e2a878556c2ee4f20486dc406e582783cd7578 - Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 - flutter_facebook_auth: a030aef1c2552fdc7cb090acc716ac836e3bb63c - flutter_image_compress: fd2b476345226e1a10ea352fa306af95704642c1 - flutter_inappwebview: bfd58618f49dc62f2676de690fc6dcda1d6c3721 - flutter_local_notifications: 0c0b1ae97e741e1521e4c1629a459d04b9aec743 - flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec - FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a - geocoding: 32cfcdb16d38d907caaba65e2e42ad10d38bee58 - geolocator_apple: cc556e6844d508c95df1e87e3ea6fa4e58c50401 - google_sign_in_ios: 4f85eb9f937450765c8573bb85fd8cd6a5af675c - GoogleSignIn: f4d3939cc0d9264d7509c4b9a924a6c987e30b54 - GTMAppAuth: 4d8f864896f3646f0c33baf38a28362f4c601e15 - GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba - image_editor: c1d038630eedea60d2dee9c14f36aa66c7f9cfab - image_picker_ios: b786a5dcf033a8336a657191401bfdf12017dabb - in_app_review: 4a97249f7a2f539a0f294c2d9196b7fe35e49541 - integration_test: a1e7d09bd98eca2fc37aefd79d4f41ad37bdbbe5 - libwebp: 60305b2e989864154bd9be3d772730f08fc6a59c - local_auth_ios: 0d333dde7780f669e66f19d2ff6005f3ea84008d - Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d - native_device_orientation: 3b4cfc9565a7b879cc4fde282b3e27745e852d0d - OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c - package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e - path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02 - permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce - ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 - SDWebImage: 72f86271a6f3139cc7e4a89220946489d4b9a866 - SDWebImageWebPCoder: 18503de6621dd2c420d680e33d46bf8e1d5169b0 - Sentry: 0c5cd63d714187b4a39c331c1f0eb04ba7868341 - sentry_flutter: efb3df2c203cd03aad255892a8d628a458656d14 - share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68 - shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad - sign_in_with_apple: f3bf75217ea4c2c8b91823f225d70230119b8440 - sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904 - twitter_login: 2794db69b7640681171b17b3c2c84ad9dfb4a57f - ua_client_hints: 314de6b4221bf713b1a6a5fb8bc68917ad3eaaec - uni_links: d97da20c7701486ba192624d99bffaaffcfc298a - url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de - video_player_avfoundation: e489aac24ef5cf7af82702979ed16f2a5ef84cff - wakelock: d0fc7c864128eac40eba1617cb5264d9c940b46f - webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f + Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 + rive_native: fcea2a63d25e1a6417716ac1380e9667cf52ad74 -PODFILE CHECKSUM: cc1f88378b4bfcf93a6ce00d2c587857c6008d3b +PODFILE CHECKSUM: 3c63482e143d1b91d2d2560aee9fb04ecc74ac7e -COCOAPODS: 1.11.3 +COCOAPODS: 1.16.2 diff --git a/examples/example/ios/Runner.xcodeproj/project.pbxproj b/examples/example/ios/Runner.xcodeproj/project.pbxproj index 8a7d67dc3..ec9fc52b9 100644 --- a/examples/example/ios/Runner.xcodeproj/project.pbxproj +++ b/examples/example/ios/Runner.xcodeproj/project.pbxproj @@ -3,19 +3,31 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + 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 */; }; + 52F97D1ED6E8E615E18EC2DB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A975023B7B0803E6CB47204 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 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 */; }; - C19B0B15A3A13A90F1DB5A29 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03031B3B32E3728A67E12169 /* Pods_Runner.framework */; }; + F74FA30BB0D926F3F1416A46 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 712A21EC1B8AA70AA43722FB /* Pods_Runner.framework */; }; /* 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; @@ -30,14 +42,21 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 03031B3B32E3728A67E12169 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 12237FD2B22116C33435FBC9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 02DFB2CCAFEA717001B1671A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 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 = ""; }; + 2A9320BEA3D81A5BC549AE81 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; 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 = ""; }; + 3D0F13CD1BFD859F694D04D9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6B48EDF19862084C4B347653 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6F22CFA4D129E53B072C4D51 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 712A21EC1B8AA70AA43722FB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 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 = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 89DA60006D88F29EAE4CCD69 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.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; }; @@ -45,39 +64,49 @@ 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 = ""; }; - E195F633F9612F68AF0629CF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - E1AC3AFEE62F224123B5A650 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 9A975023B7B0803E6CB47204 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 4E6E855D0C2C5AEB509C8855 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 52F97D1ED6E8E615E18EC2DB /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C19B0B15A3A13A90F1DB5A29 /* Pods_Runner.framework in Frameworks */, + F74FA30BB0D926F3F1416A46 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 33CE792F2C2857D43FEAC38D /* Pods */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - E195F633F9612F68AF0629CF /* Pods-Runner.debug.xcconfig */, - E1AC3AFEE62F224123B5A650 /* Pods-Runner.release.xcconfig */, - 12237FD2B22116C33435FBC9 /* Pods-Runner.profile.xcconfig */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Pods; - path = Pods; + path = RunnerTests; sourceTree = ""; }; - 472A1F9430BC1890EC52B0C6 /* Frameworks */ = { + 90F85A8626A2E2513731EFEF /* Pods */ = { isa = PBXGroup; children = ( - 03031B3B32E3728A67E12169 /* Pods_Runner.framework */, + 3D0F13CD1BFD859F694D04D9 /* Pods-Runner.debug.xcconfig */, + 02DFB2CCAFEA717001B1671A /* Pods-Runner.release.xcconfig */, + 89DA60006D88F29EAE4CCD69 /* Pods-Runner.profile.xcconfig */, + 2A9320BEA3D81A5BC549AE81 /* Pods-RunnerTests.debug.xcconfig */, + 6F22CFA4D129E53B072C4D51 /* Pods-RunnerTests.release.xcconfig */, + 6B48EDF19862084C4B347653 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -97,8 +126,9 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 33CE792F2C2857D43FEAC38D /* Pods */, - 472A1F9430BC1890EC52B0C6 /* Frameworks */, + 331C8082294A63A400263BE5 /* RunnerTests */, + 90F85A8626A2E2513731EFEF /* Pods */, + EC6FA52DE3611088C42B1E09 /* Frameworks */, ); sourceTree = ""; }; @@ -106,6 +136,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -125,21 +156,49 @@ path = Runner; sourceTree = ""; }; + EC6FA52DE3611088C42B1E09 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 712A21EC1B8AA70AA43722FB /* Pods_Runner.framework */, + 9A975023B7B0803E6CB47204 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 489B4AB7D270205B2977C2F3 /* [CP] Check Pods Manifest.lock */, + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + 4E6E855D0C2C5AEB509C8855 /* Frameworks */, + ); + 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 = ( - 7C58F34F76B699C70B39E2A7 /* [CP] Check Pods Manifest.lock */, + EE6597D04AC1D2747DBF420B /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 60E10C59C84A494DF8F9CDE2 /* [CP] Embed Pods Frameworks */, + 2495E60B4C76B853972A25EC /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -156,9 +215,14 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1300; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -179,11 +243,19 @@ 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; @@ -198,38 +270,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2495E60B4C76B853972A25EC /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 60E10C59C84A494DF8F9CDE2 /* [CP] Embed Pods Frameworks */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Thin Binary"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 7C58F34F76B699C70B39E2A7 /* [CP] Check Pods Manifest.lock */ = { + 489B4AB7D270205B2977C2F3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -244,7 +318,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -253,6 +327,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -265,9 +340,39 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + EE6597D04AC1D2747DBF420B /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* 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; @@ -279,6 +384,14 @@ }; /* 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; @@ -303,6 +416,7 @@ 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++"; @@ -332,6 +446,7 @@ 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; @@ -340,7 +455,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -357,20 +472,12 @@ CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.example; + PRODUCT_BUNDLE_IDENTIFIER = com.flutter_gen.example; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -378,10 +485,61 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2A9320BEA3D81A5BC549AE81 /* Pods-RunnerTests.debug.xcconfig */; + 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.flutter_gen.example.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; + baseConfigurationReference = 6F22CFA4D129E53B072C4D51 /* Pods-RunnerTests.release.xcconfig */; + 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.flutter_gen.example.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; + baseConfigurationReference = 6B48EDF19862084C4B347653 /* Pods-RunnerTests.profile.xcconfig */; + 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.flutter_gen.example.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++"; @@ -411,6 +569,7 @@ 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; @@ -425,7 +584,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -437,6 +596,7 @@ 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++"; @@ -466,6 +626,7 @@ 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; @@ -474,11 +635,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -492,20 +654,12 @@ CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.example; + PRODUCT_BUNDLE_IDENTIFIER = com.flutter_gen.example; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -522,20 +676,12 @@ CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.example; + PRODUCT_BUNDLE_IDENTIFIER = com.flutter_gen.example; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -546,6 +692,16 @@ /* 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 = ( diff --git a/examples/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/examples/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 3db53b6e1..e3773d42e 100644 --- a/examples/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/examples/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ - - - - + + + + + + @@ -61,8 +73,6 @@ ReferencedContainer = "container:Runner.xcodeproj"> - - CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + flutter_gen CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -11,7 +13,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - example + flutter_gen CFBundlePackageType APPL CFBundleShortVersionString @@ -39,9 +41,9 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - UIViewControllerBasedStatusBarAppearance - CADisableMinimumFrameDurationOnPhone + UIApplicationSupportsIndirectInputEvents + diff --git a/examples/example/ios/RunnerTests/RunnerTests.swift b/examples/example/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..86a7c3b1b --- /dev/null +++ b/examples/example/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/examples/example/ios/firebase_app_id_file.json b/examples/example/ios/firebase_app_id_file.json deleted file mode 100644 index 94a841fca..000000000 --- a/examples/example/ios/firebase_app_id_file.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "file_generated_by": "FlutterFire CLI", - "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", - "GOOGLE_APP_ID": "1:223276840801:ios:b5be85aa3c64059db77720", - "FIREBASE_PROJECT_ID": "flutter-gen-5b267", - "GCM_SENDER_ID": "223276840801" -} diff --git a/examples/example/lib/gen/assets.gen.dart b/examples/example/lib/gen/assets.gen.dart index e463d1346..a355bebe5 100644 --- a/examples/example/lib/gen/assets.gen.dart +++ b/examples/example/lib/gen/assets.gen.dart @@ -420,30 +420,12 @@ class RiveGenImage { final String _assetName; final Set flavors; - _rive.RiveAnimation rive({ - String? artboard, - List animations = const [], - List stateMachines = const [], - BoxFit? fit, - Alignment? alignment, - Widget? placeHolder, - bool antialiasing = true, - bool useArtboardSize = false, - List<_rive.RiveAnimationController> controllers = const [], - _rive.OnInitCallback? onInit, + _rive.FileLoader riveFileLoader({ + _rive.Factory? factory, }) { - return _rive.RiveAnimation.asset( + return _rive.FileLoader.fromAsset( _assetName, - artboard: artboard, - animations: animations, - stateMachines: stateMachines, - fit: fit, - alignment: alignment, - placeHolder: placeHolder, - antialiasing: antialiasing, - useArtboardSize: useArtboardSize, - controllers: controllers, - onInit: onInit, + riveFactory: factory ?? _rive.Factory.rive, ); } diff --git a/examples/example/lib/main.dart b/examples/example/lib/main.dart index efcaced0d..813f382fc 100644 --- a/examples/example/lib/main.dart +++ b/examples/example/lib/main.dart @@ -1,12 +1,12 @@ -import 'package:example/gen/assets.gen.dart'; +import 'package:example/gen/assets.gen.dart' hide RiveGenImage; import 'package:example/gen/colors.gen.dart'; import 'package:example/gen/fonts.gen.dart'; -import 'package:example_resources/gen/assets.gen.dart'; +import 'package:example_resources/gen/assets.gen.dart' hide RiveGenImage; import 'package:flutter/material.dart'; import 'package:lottie/lottie.dart'; +import 'package:rive/rive.dart' as rive; void main() { - print(MyAssets.images.chip4.chip4.flavors); runApp(const MyApp()); } @@ -35,9 +35,7 @@ class MyApp extends StatelessWidget { SizedBox( width: 200, height: 200, - child: MyAssets.rive.vehicles.rive( - fit: BoxFit.contain, - ), + child: _RiveWidget(MyAssets.rive.vehicles.riveFileLoader()), ), SizedBox( width: 200, @@ -101,9 +99,7 @@ class MyApp extends StatelessWidget { SizedBox( width: 200, height: 200, - child: ResAssets.images.skills.rive( - fit: BoxFit.contain, - ), + child: _RiveWidget(ResAssets.images.skills.riveFileLoader()), ), SizedBox( width: 200, @@ -131,3 +127,41 @@ class MyApp extends StatelessWidget { ); } } + +final class _RiveWidget extends StatefulWidget { + const _RiveWidget(this.riveFileLoader); + + final rive.FileLoader riveFileLoader; + + @override + State<_RiveWidget> createState() => _RiveWidgetState(); +} + +class _RiveWidgetState extends State<_RiveWidget> { + @override + void didUpdateWidget(covariant _RiveWidget oldWidget) { + super.didUpdateWidget(oldWidget); + oldWidget.riveFileLoader.dispose(); + } + + @override + void dispose() { + widget.riveFileLoader.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return rive.RiveWidgetBuilder( + fileLoader: widget.riveFileLoader, + builder: (context, state) => switch (state) { + rive.RiveLoading() => const CircularProgressIndicator(), + rive.RiveFailed() => Text('Failed to load: ${state.error}'), + rive.RiveLoaded() => rive.RiveWidget( + controller: state.controller, + fit: rive.Fit.cover, + ), + }, + ); + } +} diff --git a/examples/example/macos/.gitignore b/examples/example/macos/.gitignore index 7a7f9873a..87587fb7b 100644 --- a/examples/example/macos/.gitignore +++ b/examples/example/macos/.gitignore @@ -1,34 +1,8 @@ -**/dgph -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? +# Flutter-related +**/Flutter/ephemeral/ **/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 +# Xcode-related +**/dgph +**/xcuserdata/ +**/DerivedData/ diff --git a/examples/example/macos/Flutter/GeneratedPluginRegistrant.swift b/examples/example/macos/Flutter/GeneratedPluginRegistrant.swift index 93cc9c159..6f0875426 100644 --- a/examples/example/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/examples/example/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,8 +5,8 @@ import FlutterMacOS import Foundation -import rive_common +import rive_native func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { - RivePlugin.register(with: registry.registrar(forPlugin: "RivePlugin")) + RiveNativePlugin.register(with: registry.registrar(forPlugin: "RiveNativePlugin")) } diff --git a/examples/example/macos/Podfile b/examples/example/macos/Podfile index dade8dfad..ff5ddb3b8 100644 --- a/examples/example/macos/Podfile +++ b/examples/example/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.11' +platform :osx, '10.15' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -28,9 +28,11 @@ flutter_macos_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end end post_install do |installer| diff --git a/examples/example/macos/Podfile.lock b/examples/example/macos/Podfile.lock index 1a2fe0df9..eedc4033f 100644 --- a/examples/example/macos/Podfile.lock +++ b/examples/example/macos/Podfile.lock @@ -1,126 +1,22 @@ PODS: - - connectivity_plus_macos (0.0.1): - - FlutterMacOS - - ReachabilitySwift - - device_info_plus_macos (0.0.1): - - FlutterMacOS - - flutter_local_notifications (0.0.1): - - FlutterMacOS - - flutter_secure_storage_macos (3.3.1): - - FlutterMacOS - FlutterMacOS (1.0.0) - - FMDB (2.7.5): - - FMDB/standard (= 2.7.5) - - FMDB/standard (2.7.5) - - geolocator_apple (1.2.0): - - FlutterMacOS - - in_app_review (0.2.0): - - FlutterMacOS - - package_info_plus_macos (0.0.1): - - FlutterMacOS - - path_provider_macos (0.0.1): - - FlutterMacOS - - ReachabilitySwift (5.0.0) - - Sentry (7.11.0): - - Sentry/Core (= 7.11.0) - - Sentry/Core (7.11.0) - - sentry_flutter (0.0.1): - - Flutter - - FlutterMacOS - - Sentry (~> 7.11.0) - - share_plus_macos (0.0.1): - - FlutterMacOS - - shared_preferences_macos (0.0.1): - - FlutterMacOS - - sign_in_with_apple (0.0.1): - - FlutterMacOS - - sqflite (0.0.2): - - FlutterMacOS - - FMDB (>= 2.7.5) - - url_launcher_macos (0.0.1): - - FlutterMacOS - - wakelock_macos (0.0.1): + - rive_native (0.0.1): - FlutterMacOS DEPENDENCIES: - - connectivity_plus_macos (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus_macos/macos`) - - device_info_plus_macos (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus_macos/macos`) - - flutter_local_notifications (from `Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos`) - - flutter_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`) - FlutterMacOS (from `Flutter/ephemeral`) - - geolocator_apple (from `Flutter/ephemeral/.symlinks/plugins/geolocator_apple/macos`) - - in_app_review (from `Flutter/ephemeral/.symlinks/plugins/in_app_review/macos`) - - package_info_plus_macos (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus_macos/macos`) - - path_provider_macos (from `Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos`) - - sentry_flutter (from `Flutter/ephemeral/.symlinks/plugins/sentry_flutter/macos`) - - share_plus_macos (from `Flutter/ephemeral/.symlinks/plugins/share_plus_macos/macos`) - - shared_preferences_macos (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos`) - - sign_in_with_apple (from `Flutter/ephemeral/.symlinks/plugins/sign_in_with_apple/macos`) - - sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/macos`) - - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) - - wakelock_macos (from `Flutter/ephemeral/.symlinks/plugins/wakelock_macos/macos`) - -SPEC REPOS: - trunk: - - FMDB - - ReachabilitySwift - - Sentry + - rive_native (from `Flutter/ephemeral/.symlinks/plugins/rive_native/macos`) EXTERNAL SOURCES: - connectivity_plus_macos: - :path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus_macos/macos - device_info_plus_macos: - :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus_macos/macos - flutter_local_notifications: - :path: Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos - flutter_secure_storage_macos: - :path: Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos FlutterMacOS: :path: Flutter/ephemeral - geolocator_apple: - :path: Flutter/ephemeral/.symlinks/plugins/geolocator_apple/macos - in_app_review: - :path: Flutter/ephemeral/.symlinks/plugins/in_app_review/macos - package_info_plus_macos: - :path: Flutter/ephemeral/.symlinks/plugins/package_info_plus_macos/macos - path_provider_macos: - :path: Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos - sentry_flutter: - :path: Flutter/ephemeral/.symlinks/plugins/sentry_flutter/macos - share_plus_macos: - :path: Flutter/ephemeral/.symlinks/plugins/share_plus_macos/macos - shared_preferences_macos: - :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos - sign_in_with_apple: - :path: Flutter/ephemeral/.symlinks/plugins/sign_in_with_apple/macos - sqflite: - :path: Flutter/ephemeral/.symlinks/plugins/sqflite/macos - url_launcher_macos: - :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos - wakelock_macos: - :path: Flutter/ephemeral/.symlinks/plugins/wakelock_macos/macos + rive_native: + :path: Flutter/ephemeral/.symlinks/plugins/rive_native/macos SPEC CHECKSUMS: - connectivity_plus_macos: f6e86fd000e971d361e54b5afcadc8c8fa773308 - device_info_plus_macos: 1ad388a1ef433505c4038e7dd9605aadd1e2e9c7 - flutter_local_notifications: 3805ca215b2fb7f397d78b66db91f6a747af52e4 - flutter_secure_storage_macos: 6ceee8fbc7f484553ad17f79361b556259df89aa - FlutterMacOS: ae6af50a8ea7d6103d888583d46bd8328a7e9811 - FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a - geolocator_apple: 72a78ae3f3e4ec0db62117bd93e34523f5011d58 - in_app_review: a850789fad746e89bce03d4aeee8078b45a53fd0 - package_info_plus_macos: f010621b07802a241d96d01876d6705f15e77c1c - path_provider_macos: 3c0c3b4b0d4a76d2bf989a913c2de869c5641a19 - ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 - Sentry: 0c5cd63d714187b4a39c331c1f0eb04ba7868341 - sentry_flutter: efb3df2c203cd03aad255892a8d628a458656d14 - share_plus_macos: 853ee48e7dce06b633998ca0735d482dd671ade4 - shared_preferences_macos: a64dc611287ed6cbe28fd1297898db1336975727 - sign_in_with_apple: a9e97e744e8edc36aefc2723111f652102a7a727 - sqflite: a5789cceda41d54d23f31d6de539d65bb14100ea - url_launcher_macos: 597e05b8e514239626bcf4a850fcf9ef5c856ec3 - wakelock_macos: bc3f2a9bd8d2e6c89fee1e1822e7ddac3bd004a9 + FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 + rive_native: ca6867a346588838584c59edfa4d02bc63ca0965 -PODFILE CHECKSUM: 6eac6b3292e5142cfc23bdeb71848a40ec51c14c +PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009 -COCOAPODS: 1.11.3 +COCOAPODS: 1.16.2 diff --git a/examples/example/macos/Runner.xcodeproj/project.pbxproj b/examples/example/macos/Runner.xcodeproj/project.pbxproj index 32e566841..2b7f1cc12 100644 --- a/examples/example/macos/Runner.xcodeproj/project.pbxproj +++ b/examples/example/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -21,15 +21,24 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 098E836D7E15D191ACBA8F94 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D895E3AC115142064194AEB2 /* Pods_Runner.framework */; }; + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 4BA5C7AFD3E0DCC190461E7F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67FE47FA69E3AF2CC4330410 /* Pods_RunnerTests.framework */; }; + F9F74AAEF78CD174AB0F5DE6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C4455CADA6EB2002818A2DA /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 33CC10E52044A3C60003C045 /* Project object */; @@ -53,6 +62,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 03D7DA47D180DBF71911A21C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2EBB479E760D936FA161E82C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -67,26 +80,44 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 3AF1E2CFC44432ED75E5EA58 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 3C4455CADA6EB2002818A2DA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 583AEB53D0F2FA8BFFDA6A89 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 67FE47FA69E3AF2CC4330410 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FD2C3CAAFD4003A990EF39F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 8A009A2F90C35F99C15D95AF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8D4C265A44A0AA6FDDA00226 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - D895E3AC115142064194AEB2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E3E6BDBC477808055AF45C18 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C0FB3843075B8D7B2CFBA533 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4BA5C7AFD3E0DCC190461E7F /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EA2044A3C60003C045 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 098E836D7E15D191ACBA8F94 /* Pods_Runner.framework in Frameworks */, + F9F74AAEF78CD174AB0F5DE6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 33BA886A226E78AF003329D5 /* Configs */ = { isa = PBXGroup; children = ( @@ -103,9 +134,10 @@ children = ( 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - D760EF89B36A0A1EF711D5EC /* Pods */, + 91095D8E5ABAD98DB7BA7BEE /* Pods */, ); sourceTree = ""; }; @@ -113,6 +145,7 @@ isa = PBXGroup; children = ( 33CC10ED2044A3C60003C045 /* example.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -152,39 +185,62 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 91095D8E5ABAD98DB7BA7BEE /* Pods */ = { isa = PBXGroup; children = ( - D895E3AC115142064194AEB2 /* Pods_Runner.framework */, + 2EBB479E760D936FA161E82C /* Pods-Runner.debug.xcconfig */, + 583AEB53D0F2FA8BFFDA6A89 /* Pods-Runner.release.xcconfig */, + 03D7DA47D180DBF71911A21C /* Pods-Runner.profile.xcconfig */, + C0FB3843075B8D7B2CFBA533 /* Pods-RunnerTests.debug.xcconfig */, + 3AF1E2CFC44432ED75E5EA58 /* Pods-RunnerTests.release.xcconfig */, + 8D4C265A44A0AA6FDDA00226 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - D760EF89B36A0A1EF711D5EC /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 8A009A2F90C35F99C15D95AF /* Pods-Runner.debug.xcconfig */, - 7FD2C3CAAFD4003A990EF39F /* Pods-Runner.release.xcconfig */, - E3E6BDBC477808055AF45C18 /* Pods-Runner.profile.xcconfig */, + 3C4455CADA6EB2002818A2DA /* Pods_Runner.framework */, + 67FE47FA69E3AF2CC4330410 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 6B0488EC4DD9C9B7BDA3F6B3 /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 33CC10EC2044A3C60003C045 /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 7C943D9EB7AD1168807904E0 /* [CP] Check Pods Manifest.lock */, + 7D9C4989C9AD081D9D59C2C7 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - AEF66D8856D439E7CF07CC70 /* [CP] Embed Pods Frameworks */, + DE6F416ABB4EE9597A8AB3FF /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -202,10 +258,15 @@ 33CC10E52044A3C60003C045 /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; 33CC10EC2044A3C60003C045 = { CreatedOnToolsVersion = 9.2; LastSwiftMigration = 1100; @@ -236,12 +297,20 @@ projectRoot = ""; targets = ( 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, 33CC111A2044C6BA0003C045 /* Flutter Assemble */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EB2044A3C60003C045 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -256,6 +325,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -291,7 +361,29 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 7C943D9EB7AD1168807904E0 /* [CP] Check Pods Manifest.lock */ = { + 6B0488EC4DD9C9B7BDA3F6B3 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 7D9C4989C9AD081D9D59C2C7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -313,7 +405,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - AEF66D8856D439E7CF07CC70 /* [CP] Embed Pods Frameworks */ = { + DE6F416ABB4EE9597A8AB3FF /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -333,6 +425,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10E92044A3C60003C045 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -346,6 +446,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; @@ -366,11 +471,57 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C0FB3843075B8D7B2CFBA533 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.flutter_gen.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/example"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3AF1E2CFC44432ED75E5EA58 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.flutter_gen.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/example"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8D4C265A44A0AA6FDDA00226 /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.flutter_gen.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/example"; + }; + name = Profile; + }; 338D0CE9231458BD00FA5F75 /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -394,9 +545,11 @@ CLANG_WARN_SUSPICIOUS_MOVE = YES; CODE_SIGN_IDENTITY = "-"; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -404,7 +557,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -444,6 +597,7 @@ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -467,9 +621,11 @@ CLANG_WARN_SUSPICIOUS_MOVE = YES; CODE_SIGN_IDENTITY = "-"; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -483,7 +639,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -497,6 +653,7 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -520,9 +677,11 @@ CLANG_WARN_SUSPICIOUS_MOVE = YES; CODE_SIGN_IDENTITY = "-"; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -530,7 +689,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -596,6 +755,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/examples/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/examples/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index fb7259e17..ac78810cd 100644 --- a/examples/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/examples/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ + + + + diff --git a/examples/example/macos/Runner/AppDelegate.swift b/examples/example/macos/Runner/AppDelegate.swift index d53ef6437..b3c176141 100644 --- a/examples/example/macos/Runner/AppDelegate.swift +++ b/examples/example/macos/Runner/AppDelegate.swift @@ -1,9 +1,13 @@ import Cocoa import FlutterMacOS -@NSApplicationMain +@main class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/examples/example/macos/Runner/Configs/AppInfo.xcconfig b/examples/example/macos/Runner/Configs/AppInfo.xcconfig index 8b42559e8..2f339ae76 100644 --- a/examples/example/macos/Runner/Configs/AppInfo.xcconfig +++ b/examples/example/macos/Runner/Configs/AppInfo.xcconfig @@ -5,10 +5,10 @@ // 'flutter create' template. // The application's name. By default this is also the title of the Flutter window. -PRODUCT_NAME = example +PRODUCT_NAME = flutter_gen // The application's bundle identifier -PRODUCT_BUNDLE_IDENTIFIER = com.example.example +PRODUCT_BUNDLE_IDENTIFIER = com.flutter_gen.example // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2022 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2022 FlutterGen. All rights reserved. diff --git a/examples/example/macos/Runner/MainFlutterWindow.swift b/examples/example/macos/Runner/MainFlutterWindow.swift index 2722837ec..3cc05eb23 100644 --- a/examples/example/macos/Runner/MainFlutterWindow.swift +++ b/examples/example/macos/Runner/MainFlutterWindow.swift @@ -3,7 +3,7 @@ import FlutterMacOS class MainFlutterWindow: NSWindow { override func awakeFromNib() { - let flutterViewController = FlutterViewController.init() + let flutterViewController = FlutterViewController() let windowFrame = self.frame self.contentViewController = flutterViewController self.setFrame(windowFrame, display: true) diff --git a/examples/example/macos/RunnerTests/RunnerTests.swift b/examples/example/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..61f3bd1fc --- /dev/null +++ b/examples/example/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +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/examples/example/pubspec.yaml b/examples/example/pubspec.yaml index 9d18323b3..40330496c 100644 --- a/examples/example/pubspec.yaml +++ b/examples/example/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: flutter_svg: ^2.0.0 lottie: ^3.0.0 - rive: ^0.13.20 + rive: ^0.14.0 dev_dependencies: lints: any diff --git a/examples/example/web/index.html b/examples/example/web/index.html index 4a225a3ef..376f505ab 100644 --- a/examples/example/web/index.html +++ b/examples/example/web/index.html @@ -21,7 +21,7 @@ - + @@ -31,28 +31,8 @@ flutter_gen - - - - - + diff --git a/examples/example_resources/lib/gen/assets.gen.dart b/examples/example_resources/lib/gen/assets.gen.dart index bc83feb14..11033d91d 100644 --- a/examples/example_resources/lib/gen/assets.gen.dart +++ b/examples/example_resources/lib/gen/assets.gen.dart @@ -257,30 +257,12 @@ class RiveGenImage { static const String package = 'example_resources'; - _rive.RiveAnimation rive({ - String? artboard, - List animations = const [], - List stateMachines = const [], - BoxFit? fit, - Alignment? alignment, - Widget? placeHolder, - bool antialiasing = true, - bool useArtboardSize = false, - List<_rive.RiveAnimationController> controllers = const [], - _rive.OnInitCallback? onInit, + _rive.FileLoader riveFileLoader({ + _rive.Factory? factory, }) { - return _rive.RiveAnimation.asset( + return _rive.FileLoader.fromAsset( 'packages/example_resources/$_assetName', - artboard: artboard, - animations: animations, - stateMachines: stateMachines, - fit: fit, - alignment: alignment, - placeHolder: placeHolder, - antialiasing: antialiasing, - useArtboardSize: useArtboardSize, - controllers: controllers, - onInit: onInit, + riveFactory: factory ?? _rive.Factory.rive, ); } diff --git a/examples/example_resources/pubspec.yaml b/examples/example_resources/pubspec.yaml index a66bc4b4a..fc3535dfc 100644 --- a/examples/example_resources/pubspec.yaml +++ b/examples/example_resources/pubspec.yaml @@ -11,7 +11,7 @@ dependencies: flutter_svg: ^2.0.0 lottie: ^3.0.0 - rive: ^0.13.20 + rive: ^0.14.0 dev_dependencies: flutter_gen_runner: diff --git a/packages/core/lib/generators/assets_generator.dart b/packages/core/lib/generators/assets_generator.dart index 4a3c23406..c5b0d01a0 100644 --- a/packages/core/lib/generators/assets_generator.dart +++ b/packages/core/lib/generators/assets_generator.dart @@ -17,6 +17,7 @@ import 'package:flutter_gen_core/utils/error.dart'; import 'package:flutter_gen_core/utils/string.dart'; import 'package:glob/glob.dart'; import 'package:path/path.dart'; +import 'package:pub_semver/pub_semver.dart' show Version, VersionConstraint; import 'package:yaml/yaml.dart'; class AssetsGenConfig { @@ -26,6 +27,8 @@ class AssetsGenConfig { this.flutterGen, this.assets, this.exclude, + this.integrationResolvedVersions, + this.integrationResolvedVersionConstraints, ); factory AssetsGenConfig.fromConfig(File pubspecFile, Config config) { @@ -35,6 +38,8 @@ class AssetsGenConfig { config.pubspec.flutterGen, _buildFlutterAssetsList(config.pubspec.flutter), config.pubspec.flutterGen.assets.exclude.map(Glob.new).toList(), + config.integrationResolvedVersions, + config.integrationVersionConstraints, ); } @@ -43,6 +48,8 @@ class AssetsGenConfig { final FlutterGen flutterGen; final List assets; final List exclude; + final Map integrationResolvedVersions; + final Map integrationResolvedVersionConstraints; String get packageParameterLiteral => flutterGen.assets.outputs.packageParameterEnabled ? _packageName : ''; @@ -86,6 +93,9 @@ Future generateAssets( if (config.flutterGen.integrations.rive) RiveIntegration( config.packageParameterLiteral, + resolvedVersion: config.integrationResolvedVersions[RiveIntegration], + resolvedVersionConstraint: + config.integrationResolvedVersionConstraints[RiveIntegration], ), if (config.flutterGen.integrations.lottie) LottieIntegration( diff --git a/packages/core/lib/generators/integrations/rive_integration.dart b/packages/core/lib/generators/integrations/rive_integration.dart index 84cfc63ea..9a8ff6af0 100644 --- a/packages/core/lib/generators/integrations/rive_integration.dart +++ b/packages/core/lib/generators/integrations/rive_integration.dart @@ -1,7 +1,43 @@ import 'package:flutter_gen_core/generators/integrations/integration.dart'; +import 'package:pub_semver/pub_semver.dart' show Version, VersionConstraint; -class RiveIntegration extends Integration { - RiveIntegration(String packageName) : super(packageName); +typedef RiveIntegrationLatest = RiveIntegration0140; + +/// Create Rive integration based on the resolved version. +abstract final class RiveIntegration extends Integration { + factory RiveIntegration( + String packageName, { + Version? resolvedVersion, + VersionConstraint? resolvedVersionConstraint, + }) { + // Resolve integration by version. + RiveIntegration? integration = switch (resolvedVersion) { + final v? when v < Version(0, 14, 0) => + RiveIntegrationClassic(packageName), + Version() => RiveIntegrationLatest(packageName), + null => null, + }; + + // Resolve integration by version constraint. + integration ??= switch (resolvedVersionConstraint) { + final c? when c.allows(Version(0, 14, 0)) => + RiveIntegrationLatest(packageName), + VersionConstraint() => RiveIntegrationClassic(packageName), + null => null, + }; + + // Use the latest integration as the fallback. + integration ??= RiveIntegrationLatest(packageName); + + return integration; + } + + RiveIntegration._(String packageName) : super(packageName); +} + +/// Rive integration for versions before 0.14.0. +final class RiveIntegrationClassic extends RiveIntegration { + RiveIntegrationClassic(String packageName) : super._(packageName); String? get packageExpression => isPackage ? 'packages/$packageName/' : null; @@ -66,3 +102,34 @@ ${isPackage ? "\n static const String package = '$packageName';" : ''} @override bool get isConstConstructor => true; } + +/// Rive integration for versions equal to or above 0.14.0. +final class RiveIntegration0140 extends RiveIntegrationClassic { + RiveIntegration0140(String packageName) : super(packageName); + + @override + String get _classDefinition => '''class RiveGenImage { + const RiveGenImage( + this._assetName, { + this.flavors = const {}, + }); + + final String _assetName; + final Set flavors; + +${isPackage ? "\n static const String package = '$packageName';" : ''} + + _rive.FileLoader riveFileLoader({ + _rive.Factory? factory, + }) { + return _rive.FileLoader.fromAsset( + ${isPackage ? '\'$packageExpression\$_assetName\'' : '_assetName'}, + riveFactory: factory ?? _rive.Factory.rive, + ); + } + + String get path => _assetName; + + String get keyName => ${isPackage ? '\'$packageExpression\$_assetName\'' : '_assetName'}; +}'''; +} diff --git a/packages/core/lib/generators/registry.dart b/packages/core/lib/generators/registry.dart new file mode 100644 index 000000000..286e04e7a --- /dev/null +++ b/packages/core/lib/generators/registry.dart @@ -0,0 +1,9 @@ +import 'integrations/lottie_integration.dart'; +import 'integrations/rive_integration.dart'; +import 'integrations/svg_integration.dart'; + +const integrationPackages = { + LottieIntegration: 'lottie', + RiveIntegration: 'rive', + SvgIntegration: 'flutter_svg', +}; diff --git a/packages/core/lib/settings/config.dart b/packages/core/lib/settings/config.dart index 89b4a6d30..68cacd180 100644 --- a/packages/core/lib/settings/config.dart +++ b/packages/core/lib/settings/config.dart @@ -2,6 +2,7 @@ import 'dart:io'; // import 'package:collection/collection.dart'; // import 'package:dart_style/dart_style.dart' show TrailingCommas; +import 'package:flutter_gen_core/generators/registry.dart'; import 'package:flutter_gen_core/settings/config_default.dart'; import 'package:flutter_gen_core/settings/pubspec.dart'; import 'package:flutter_gen_core/utils/cast.dart' show safeCast; @@ -10,7 +11,7 @@ import 'package:flutter_gen_core/utils/log.dart'; import 'package:flutter_gen_core/utils/map.dart'; import 'package:flutter_gen_core/version.gen.dart'; import 'package:path/path.dart'; -import 'package:pub_semver/pub_semver.dart' show VersionConstraint; +import 'package:pub_semver/pub_semver.dart' show VersionConstraint, Version; import 'package:yaml/yaml.dart'; class Config { @@ -18,6 +19,8 @@ class Config { required this.pubspec, required this.pubspecFile, required this.sdkConstraint, + required this.integrationResolvedVersions, + required this.integrationVersionConstraints, // required this.formatterTrailingCommas, required this.formatterPageWidth, }); @@ -25,6 +28,8 @@ class Config { final Pubspec pubspec; final File pubspecFile; final VersionConstraint? sdkConstraint; + final Map integrationResolvedVersions; + final Map integrationVersionConstraints; // TODO(ANYONE): Allow passing the trailing commas option after the SDK constraint was bumped to ^3.7. // final TrailingCommas? formatterTrailingCommas; @@ -111,6 +116,19 @@ Config loadPubspecConfig(File pubspecFile, {File? buildFile}) { sdkConstraint ??= VersionConstraint.parse(sdk); } + final pubspecLockPackages = safeCast(pubspecLockMap?['packages']); + final integrationVersionConstraints = {}; + final integrationResolvedVersions = {}; + for (final entry in integrationPackages.entries) { + if (pubspec.dependenciesVersionConstraint[entry.value] case final c?) { + integrationVersionConstraints[entry.key] = c; + } + if (pubspecLockPackages?[entry.value]?['version'] case final String v) { + final version = Version.parse(v); + integrationResolvedVersions[entry.key] = version; + } + } + final analysisOptionsFile = File( normalize(join(basename(pubspecFile.parent.path), 'analysis_options.yaml')), ); @@ -133,6 +151,8 @@ Config loadPubspecConfig(File pubspecFile, {File? buildFile}) { pubspec: pubspec, pubspecFile: pubspecFile, sdkConstraint: sdkConstraint, + integrationResolvedVersions: integrationResolvedVersions, + integrationVersionConstraints: integrationVersionConstraints, // formatterTrailingCommas: formatterTrailingCommas, formatterPageWidth: formatterPageWidth, ); diff --git a/packages/core/lib/settings/pubspec.dart b/packages/core/lib/settings/pubspec.dart index bbe8d600a..fc5c0ab22 100644 --- a/packages/core/lib/settings/pubspec.dart +++ b/packages/core/lib/settings/pubspec.dart @@ -10,6 +10,7 @@ class Pubspec { const Pubspec({ required this.packageName, required this.environment, + required this.dependenciesVersionConstraint, required this.flutterGen, required this.flutter, }); @@ -22,6 +23,9 @@ class Pubspec { @JsonKey(name: 'environment', fromJson: _environmentFromJson) final Map environment; + @JsonKey(name: 'dependencies', fromJson: _dependenciesFromJson) + final Map dependenciesVersionConstraint; + @JsonKey(name: 'flutter_gen', required: true) final FlutterGen flutterGen; @@ -71,6 +75,29 @@ Map _environmentFromJson(Map? source) { }); } +Map _dependenciesFromJson(Map? source) { + if (source == null) { + return {}; + } + return source.map((k, value) { + final key = k as String; + VersionConstraint? constraint; + if (value case final String version) { + try { + constraint = VersionConstraint.parse(version); + } catch (_) {} + } + if (constraint == null) { + if (value case {'version': final String version}) { + try { + constraint = VersionConstraint.parse(version); + } catch (_) {} + } + } + return MapEntry(key, constraint); + }); +} + @JsonSerializable(disallowUnrecognizedKeys: false) class Flutter { const Flutter({ diff --git a/packages/core/lib/settings/pubspec.g.dart b/packages/core/lib/settings/pubspec.g.dart index e5751e2b9..3629adef8 100644 --- a/packages/core/lib/settings/pubspec.g.dart +++ b/packages/core/lib/settings/pubspec.g.dart @@ -18,6 +18,8 @@ Pubspec _$PubspecFromJson(Map json) => $checkedCreate( packageName: $checkedConvert('name', (v) => v as String), environment: $checkedConvert( 'environment', (v) => _environmentFromJson(v as Map?)), + dependenciesVersionConstraint: $checkedConvert( + 'dependencies', (v) => _dependenciesFromJson(v as Map?)), flutterGen: $checkedConvert( 'flutter_gen', (v) => FlutterGen.fromJson(v as Map)), flutter: @@ -25,7 +27,11 @@ Pubspec _$PubspecFromJson(Map json) => $checkedCreate( ); return val; }, - fieldKeyMap: const {'packageName': 'name', 'flutterGen': 'flutter_gen'}, + fieldKeyMap: const { + 'packageName': 'name', + 'dependenciesVersionConstraint': 'dependencies', + 'flutterGen': 'flutter_gen' + }, ); Flutter _$FlutterFromJson(Map json) => $checkedCreate( diff --git a/packages/core/test/assets_gen_integrations_test.dart b/packages/core/test/assets_gen_integrations_test.dart index 50deec8c0..dd397d7e0 100644 --- a/packages/core/test/assets_gen_integrations_test.dart +++ b/packages/core/test/assets_gen_integrations_test.dart @@ -3,6 +3,7 @@ import 'package:flutter_gen_core/generators/integrations/lottie_integration.dart import 'package:flutter_gen_core/generators/integrations/rive_integration.dart'; import 'package:flutter_gen_core/generators/integrations/svg_integration.dart'; import 'package:path/path.dart' as p; +import 'package:pub_semver/pub_semver.dart'; import 'package:test/test.dart'; import 'gen_test_helper.dart'; @@ -241,6 +242,167 @@ void main() { ); }); + test('RiveIntegration version resolution with resolvedVersion', () { + // Test with version < 0.14.0 (should return RiveIntegrationClassic) + final classicIntegration = RiveIntegration( + '', + resolvedVersion: Version(0, 13, 0), + ); + expect(classicIntegration, isA()); + final classicOutput = classicIntegration.classOutput; + expect(classicOutput.contains('rive({'), isTrue); + expect(classicOutput.contains('RiveAnimation.asset'), isTrue); + expect(classicOutput.contains('riveFileLoader'), isFalse); + + // Test with version >= 0.14.0 (should return RiveIntegration0140) + final latestIntegration = RiveIntegration( + '', + resolvedVersion: Version(0, 14, 0), + ); + expect(latestIntegration, isA()); + final latestOutput = latestIntegration.classOutput; + expect(latestOutput.contains('riveFileLoader({'), isTrue); + expect(latestOutput.contains('FileLoader.fromAsset'), isTrue); + expect(latestOutput.contains('rive({'), isFalse); + + // Test with version > 0.14.0 + final newerIntegration = RiveIntegration( + '', + resolvedVersion: Version(0, 15, 0), + ); + expect(newerIntegration, isA()); + final newerOutput = newerIntegration.classOutput; + expect(newerOutput.contains('riveFileLoader({'), isTrue); + }); + + test('RiveIntegration version constraint resolution', () { + // Test with constraint that allows 0.14.0 (should return RiveIntegration0140) + final allowsLatest = RiveIntegration( + '', + resolvedVersionConstraint: VersionConstraint.parse('^0.14.0'), + ); + expect(allowsLatest, isA()); + expect(allowsLatest.classOutput.contains('riveFileLoader({'), isTrue); + + // Test with constraint that doesn't allow 0.14.0 (should return RiveIntegrationClassic) + final classicOnly = RiveIntegration( + '', + resolvedVersionConstraint: VersionConstraint.parse('>=0.13.0 <0.14.0'), + ); + expect(classicOnly, isA()); + expect(classicOnly.classOutput.contains('rive({'), isTrue); + + // Test with constraint like ^0.12.0 (doesn't allow 0.14.0) + final olderConstraint = RiveIntegration( + '', + resolvedVersionConstraint: VersionConstraint.parse('^0.12.0'), + ); + expect(olderConstraint, isA()); + expect(olderConstraint.classOutput.contains('rive({'), isTrue); + }); + + test('RiveIntegration version resolution priority', () { + // resolvedVersion should take priority over resolvedVersionConstraint + final integration = RiveIntegration( + '', + resolvedVersion: Version(0, 13, 0), + resolvedVersionConstraint: VersionConstraint.parse('^0.14.0'), + ); + expect(integration, isA()); + expect(integration.classOutput.contains('rive({'), isTrue); + + // When resolvedVersion is null, fall back to resolvedVersionConstraint + final fallbackIntegration = RiveIntegration( + '', + resolvedVersionConstraint: VersionConstraint.parse('^0.14.0'), + ); + expect(fallbackIntegration, isA()); + expect(fallbackIntegration.classOutput.contains('riveFileLoader({'), isTrue); + }); + + test('RiveIntegration fallback behavior', () { + // Test with no version information (should return RiveIntegration0140 as fallback) + final fallbackIntegration = RiveIntegration(''); + expect(fallbackIntegration, isA()); + expect(fallbackIntegration.classOutput.contains('riveFileLoader({'), isTrue); + }); + + test('RiveIntegrationClassic classOutput structure', () { + final integration = RiveIntegrationClassic(''); + final output = integration.classOutput; + + // Check for Classic-specific content + expect(output.contains('class RiveGenImage {'), isTrue); + expect(output.contains('final String _assetName;'), isTrue); + expect(output.contains('final Set flavors;'), isTrue); + expect(output.contains('rive({'), isTrue); + expect(output.contains('_rive.RiveAnimation rive({'), isTrue); + expect(output.contains('_rive.RiveAnimation.asset'), isTrue); + expect(output.contains('artboard:'), isTrue); + expect(output.contains('animations:'), isTrue); + expect(output.contains('stateMachines:'), isTrue); + expect(output.contains('String get path =>'), isTrue); + expect(output.contains('String get keyName =>'), isTrue); + + // Ensure it doesn't have 0.14.0+ specific content + expect(output.contains('riveFileLoader'), isFalse); + expect(output.contains('FileLoader.fromAsset'), isFalse); + }); + + test('RiveIntegrationClassic classOutput with package', () { + final integration = RiveIntegrationClassic('test_package'); + final output = integration.classOutput; + + // Check for package-specific content + expect( + output.contains("static const String package = 'test_package';"), + isTrue, + ); + expect( + output.contains("'packages/test_package/\$_assetName'"), + isTrue, + ); + }); + + test('RiveIntegration0140 classOutput structure', () { + final integration = RiveIntegration0140(''); + final output = integration.classOutput; + + // Check for 0.14.0+ specific content + expect(output.contains('class RiveGenImage {'), isTrue); + expect(output.contains('final String _assetName;'), isTrue); + expect(output.contains('final Set flavors;'), isTrue); + expect(output.contains('riveFileLoader({'), isTrue); + expect(output.contains('_rive.FileLoader riveFileLoader({'), isTrue); + expect(output.contains('_rive.FileLoader.fromAsset'), isTrue); + expect(output.contains('_rive.Factory? factory,'), isTrue); + expect(output.contains('riveFactory: factory ?? _rive.Factory.rive'), isTrue); + expect(output.contains('String get path =>'), isTrue); + expect(output.contains('String get keyName =>'), isTrue); + + // Ensure it doesn't have Classic-specific content + expect(output.contains('rive({'), isFalse); + expect(output.contains('RiveAnimation.asset'), isFalse); + expect(output.contains('artboard:'), isFalse); + expect(output.contains('animations:'), isFalse); + expect(output.contains('stateMachines:'), isFalse); + }); + + test('RiveIntegration0140 classOutput with package', () { + final integration = RiveIntegration0140('test_package'); + final output = integration.classOutput; + + // Check for package-specific content + expect( + output.contains("static const String package = 'test_package';"), + isTrue, + ); + expect( + output.contains("'packages/test_package/\$_assetName'"), + isTrue, + ); + }); + test('Assets with Lottie integrations on pubspec.yaml', () async { const pubspec = 'test_resources/pubspec_assets_lottie_integrations.yaml'; await expectedAssetsGen(pubspec); diff --git a/packages/core/test_resources/actual_data/assets_assets_rive_integrations.gen.dart b/packages/core/test_resources/actual_data/assets_assets_rive_integrations.gen.dart index b78e23eea..9dc47c58e 100644 --- a/packages/core/test_resources/actual_data/assets_assets_rive_integrations.gen.dart +++ b/packages/core/test_resources/actual_data/assets_assets_rive_integrations.gen.dart @@ -34,30 +34,10 @@ class RiveGenImage { final String _assetName; final Set flavors; - _rive.RiveAnimation rive({ - String? artboard, - List animations = const [], - List stateMachines = const [], - BoxFit? fit, - Alignment? alignment, - Widget? placeHolder, - bool antialiasing = true, - bool useArtboardSize = false, - List<_rive.RiveAnimationController> controllers = const [], - _rive.OnInitCallback? onInit, - }) { - return _rive.RiveAnimation.asset( + _rive.FileLoader riveFileLoader({_rive.Factory? factory}) { + return _rive.FileLoader.fromAsset( _assetName, - artboard: artboard, - animations: animations, - stateMachines: stateMachines, - fit: fit, - alignment: alignment, - placeHolder: placeHolder, - antialiasing: antialiasing, - useArtboardSize: useArtboardSize, - controllers: controllers, - onInit: onInit, + riveFactory: factory ?? _rive.Factory.rive, ); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d3b1dc5e9..29d189b21 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,7 +5,6 @@ settings: excludeLinksFromLockfile: false importers: - .: devDependencies: husky: @@ -22,62 +21,106 @@ importers: version: 2.5.18(prettier@3.6.2) packages: - '@pkgr/core@0.2.7': - resolution: {integrity: sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + resolution: + { + integrity: sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==, + } + engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } ansi-escapes@7.1.1: - resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==, + } + engines: { node: '>=18' } ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==, + } + engines: { node: '>=12' } ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==, + } + engines: { node: '>=12' } braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, + } + engines: { node: '>=8' } cli-cursor@5.0.0: - resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==, + } + engines: { node: '>=18' } cli-truncate@5.1.0: - resolution: {integrity: sha512-7JDGG+4Zp0CsknDCedl0DYdaeOhc46QNpXi3NLQblkZpXXgA6LncLDUUyvrjSvZeF3VRQa+KiMGomazQrC1V8g==} - engines: {node: '>=20'} + resolution: + { + integrity: sha512-7JDGG+4Zp0CsknDCedl0DYdaeOhc46QNpXi3NLQblkZpXXgA6LncLDUUyvrjSvZeF3VRQa+KiMGomazQrC1V8g==, + } + engines: { node: '>=20' } colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + resolution: + { + integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, + } commander@14.0.1: - resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} - engines: {node: '>=20'} + resolution: + { + integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==, + } + engines: { node: '>=20' } detect-indent@7.0.1: - resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} - engines: {node: '>=12.20'} + resolution: + { + integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==, + } + engines: { node: '>=12.20' } detect-newline@4.0.1: - resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } emoji-regex@10.5.0: - resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} + resolution: + { + integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==, + } environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==, + } + engines: { node: '>=18' } eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + resolution: + { + integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==, + } fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + resolution: + { + integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==, + } peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -85,77 +128,131 @@ packages: optional: true fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, + } + engines: { node: '>=8' } get-east-asian-width@1.4.0: - resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==, + } + engines: { node: '>=18' } git-hooks-list@4.1.1: - resolution: {integrity: sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==} + resolution: + { + integrity: sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==, + } husky@8.0.3: - resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==, + } + engines: { node: '>=14' } hasBin: true is-fullwidth-code-point@5.1.0: - resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==, + } + engines: { node: '>=18' } is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, + } + engines: { node: '>=0.12.0' } is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==, + } + engines: { node: '>=12' } lint-staged@16.2.0: - resolution: {integrity: sha512-spdYSOCQ2MdZ9CM1/bu/kDmaYGsrpNOeu1InFFV8uhv14x6YIubGxbCpSmGILFoxkiheNQPDXSg5Sbb5ZuVnug==} - engines: {node: '>=20.17'} + resolution: + { + integrity: sha512-spdYSOCQ2MdZ9CM1/bu/kDmaYGsrpNOeu1InFFV8uhv14x6YIubGxbCpSmGILFoxkiheNQPDXSg5Sbb5ZuVnug==, + } + engines: { node: '>=20.17' } hasBin: true listr2@9.0.4: - resolution: {integrity: sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ==} - engines: {node: '>=20.0.0'} + resolution: + { + integrity: sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ==, + } + engines: { node: '>=20.0.0' } log-update@6.1.0: - resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==, + } + engines: { node: '>=18' } micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, + } + engines: { node: '>=8.6' } mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==, + } + engines: { node: '>=18' } nano-spawn@1.0.3: - resolution: {integrity: sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==} - engines: {node: '>=20.17'} + resolution: + { + integrity: sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==, + } + engines: { node: '>=20.17' } onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==, + } + engines: { node: '>=18' } picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, + } + engines: { node: '>=8.6' } picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==, + } + engines: { node: '>=12' } pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} + resolution: + { + integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==, + } + engines: { node: '>=0.10' } hasBin: true prettier-plugin-packagejson@2.5.18: - resolution: {integrity: sha512-NKznPGcGrcj4NPGxnh+w78JXPyfB6I4RQSCM0v+CAXwpDG7OEpJQ5zMyfC5NBgKH1k7Skwcj5ak5by2mrHvC5g==} + resolution: + { + integrity: sha512-NKznPGcGrcj4NPGxnh+w78JXPyfB6I4RQSCM0v+CAXwpDG7OEpJQ5zMyfC5NBgKH1k7Skwcj5ak5by2mrHvC5g==, + } peerDependencies: prettier: '>= 1.16.0' peerDependenciesMeta: @@ -163,77 +260,127 @@ packages: optional: true prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==, + } + engines: { node: '>=14' } hasBin: true restore-cursor@5.1.0: - resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==, + } + engines: { node: '>=18' } rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + resolution: + { + integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==, + } semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==, + } + engines: { node: '>=10' } hasBin: true signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, + } + engines: { node: '>=14' } slice-ansi@7.1.2: - resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==, + } + engines: { node: '>=18' } sort-object-keys@1.1.3: - resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + resolution: + { + integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==, + } sort-package-json@3.4.0: - resolution: {integrity: sha512-97oFRRMM2/Js4oEA9LJhjyMlde+2ewpZQf53pgue27UkbEXfHJnDzHlUxQ/DWUkzqmp7DFwJp8D+wi/TYeQhpA==} - engines: {node: '>=20'} + resolution: + { + integrity: sha512-97oFRRMM2/Js4oEA9LJhjyMlde+2ewpZQf53pgue27UkbEXfHJnDzHlUxQ/DWUkzqmp7DFwJp8D+wi/TYeQhpA==, + } + engines: { node: '>=20' } hasBin: true string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} + resolution: + { + integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==, + } + engines: { node: '>=0.6.19' } string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==, + } + engines: { node: '>=18' } string-width@8.1.0: - resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==} - engines: {node: '>=20'} + resolution: + { + integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==, + } + engines: { node: '>=20' } strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==, + } + engines: { node: '>=12' } synckit@0.11.8: - resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==} - engines: {node: ^14.18.0 || >=16.0.0} + resolution: + { + integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==, + } + engines: { node: ^14.18.0 || >=16.0.0 } tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==, + } + engines: { node: '>=12.0.0' } to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, + } + engines: { node: '>=8.0' } wrap-ansi@9.0.2: - resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==, + } + engines: { node: '>=18' } yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} - engines: {node: '>= 14.6'} + resolution: + { + integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==, + } + engines: { node: '>= 14.6' } hasBin: true snapshots: - '@pkgr/core@0.2.7': {} ansi-escapes@7.1.1: