From 8b94d304958dfde73ba2ea118953691aee5f9d31 Mon Sep 17 00:00:00 2001 From: cogwheel Date: Wed, 26 Aug 2026 22:33:33 +0530 Subject: [PATCH] chore(dependencies): replace sharing intent plugin (#669) --- android/app/build.gradle.kts | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- android/settings.gradle.kts | 2 +- ios/Podfile.lock | 224 ------------------ ios/Runner.xcodeproj/project.pbxproj | 56 ++--- .../xcshareddata/swiftpm/Package.resolved | 67 +++--- .../xcshareddata/xcschemes/Runner.xcscheme | 18 ++ ios/Runner/ConduitSceneDelegate.swift | 36 +-- lib/core/services/share_receiver_service.dart | 47 ++-- pubspec.lock | 16 +- pubspec.yaml | 4 +- .../services/share_receiver_service_test.dart | 68 +++--- 12 files changed, 153 insertions(+), 389 deletions(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index b61785d9b..f8c378694 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -15,7 +15,7 @@ if (keystorePropertiesFile.exists()) { android { namespace = "app.cogwheel.conduit" - compileSdk = flutter.compileSdkVersion + compileSdk = 37 ndkVersion = "29.0.14206865" defaultConfig { diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index a20f2c46d..da80f8d18 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-all.zip diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts index 9d5a6fef1..9e2fee219 100644 --- a/android/settings.gradle.kts +++ b/android/settings.gradle.kts @@ -18,7 +18,7 @@ pluginManagement { plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "9.1.0" apply false + id("com.android.application") version "9.2.1" apply false id("org.jetbrains.kotlin.android") version "2.4.0" apply false } diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 1e099442e..e487b98ac 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,258 +1,34 @@ PODS: - - audio_session (0.0.1): - - Flutter - - CocoaLumberjack (3.9.1): - - CocoaLumberjack/Core (= 3.9.1) - - CocoaLumberjack/Core (3.9.1) - - connectivity_plus (0.0.1): - - Flutter - - CryptoSwift (1.8.4) - - cupertino_native_better (0.0.1): - - Flutter - - SVGKit (~> 3.0) - - file_picker (0.0.1): - - Flutter - - FlutterMacOS - Flutter (1.0.0) - - flutter_callkit_incoming (0.0.1): - - CryptoSwift - - Flutter - - flutter_image_compress_common (1.0.0): - - Flutter - - SDWebImage - - SDWebImageWebPCoder - - flutter_inappwebview_ios (0.0.1): - - Flutter - - flutter_inappwebview_ios/Core (= 0.0.1) - - swift-collections (~> 1.1.1) - - flutter_inappwebview_ios/Core (0.0.1): - - Flutter - - swift-collections (~> 1.1.1) - - flutter_local_notifications (0.0.1): - - Flutter - - flutter_secure_storage_darwin (10.0.0): - - Flutter - - FlutterMacOS - - flutter_sharing_intent (1.0.1): - - Flutter - - geolocator_apple (1.2.0): - - Flutter - - FlutterMacOS - - home_widget (0.0.1): - - Flutter - - image_picker_ios (0.0.1): - - Flutter - - InternalCollectionsUtilities (1.1.1) - - just_audio (0.0.1): - - Flutter - - FlutterMacOS - - libwebp (1.5.0): - - libwebp/demux (= 1.5.0) - - libwebp/mux (= 1.5.0) - - libwebp/sharpyuv (= 1.5.0) - - libwebp/webp (= 1.5.0) - - libwebp/demux (1.5.0): - - libwebp/webp - - libwebp/mux (1.5.0): - - libwebp/demux - - libwebp/sharpyuv (1.5.0) - - libwebp/webp (1.5.0): - - libwebp/sharpyuv - onnxruntime-c (1.22.0) - onnxruntime-objc (1.22.0): - onnxruntime-objc/Core (= 1.22.0) - onnxruntime-objc/Core (1.22.0): - onnxruntime-c (= 1.22.0) - - package_info_plus (0.4.5): - - Flutter - - pdfium_flutter (0.1.5): - - Flutter - - FlutterMacOS - - permission_handler_apple (9.4.8): - - Flutter - - quick_actions_ios (0.0.1): - - Flutter - - record_ios (2.0.0): - - Flutter - - SDWebImage (5.21.5): - - SDWebImage/Core (= 5.21.5) - - SDWebImage/Core (5.21.5) - - SDWebImageWebPCoder (0.15.0): - - libwebp (~> 1.0) - - SDWebImage/Core (~> 5.17) - - share_plus (0.0.1): - - Flutter - - shared_preferences_foundation (0.0.1): - - Flutter - - FlutterMacOS - - sqflite_darwin (0.0.4): - - Flutter - - FlutterMacOS - - SVGKit (3.0.0): - - CocoaLumberjack (~> 3.0) - - swift-collections (1.1.1): - - swift-collections/BitCollections (= 1.1.1) - - swift-collections/DequeModule (= 1.1.1) - - swift-collections/HashTreeCollections (= 1.1.1) - - swift-collections/HeapModule (= 1.1.1) - - swift-collections/OrderedCollections (= 1.1.1) - - swift-collections/BitCollections (1.1.1): - - InternalCollectionsUtilities (= 1.1.1) - - swift-collections/DequeModule (1.1.1): - - InternalCollectionsUtilities (= 1.1.1) - - swift-collections/HashTreeCollections (1.1.1): - - InternalCollectionsUtilities (= 1.1.1) - - swift-collections/HeapModule (1.1.1): - - InternalCollectionsUtilities (= 1.1.1) - - swift-collections/OrderedCollections (1.1.1): - - InternalCollectionsUtilities (= 1.1.1) - - url_launcher_ios (0.0.1): - - Flutter - vad (0.0.6): - Flutter - onnxruntime-objc (= 1.22.0) - - wakelock_plus (0.0.1): - - Flutter - - webview_flutter_wkwebview (0.0.1): - - Flutter - - FlutterMacOS DEPENDENCIES: - - audio_session (from `.symlinks/plugins/audio_session/ios`) - - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) - - cupertino_native_better (from `.symlinks/plugins/cupertino_native_better/ios`) - - file_picker (from `.symlinks/plugins/file_picker/darwin`) - Flutter (from `Flutter`) - - flutter_callkit_incoming (from `.symlinks/plugins/flutter_callkit_incoming/ios`) - - flutter_image_compress_common (from `.symlinks/plugins/flutter_image_compress_common/ios`) - - flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`) - - flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`) - - flutter_secure_storage_darwin (from `.symlinks/plugins/flutter_secure_storage_darwin/darwin`) - - flutter_sharing_intent (from `.symlinks/plugins/flutter_sharing_intent/ios`) - - geolocator_apple (from `.symlinks/plugins/geolocator_apple/darwin`) - - home_widget (from `.symlinks/plugins/home_widget/ios`) - - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - - just_audio (from `.symlinks/plugins/just_audio/darwin`) - - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - - pdfium_flutter (from `.symlinks/plugins/pdfium_flutter/darwin`) - - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - - quick_actions_ios (from `.symlinks/plugins/quick_actions_ios/ios`) - - record_ios (from `.symlinks/plugins/record_ios/ios`) - - share_plus (from `.symlinks/plugins/share_plus/ios`) - - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - - sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`) - - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - vad (from `.symlinks/plugins/vad/ios`) - - wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`) - - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/darwin`) SPEC REPOS: trunk: - - CocoaLumberjack - - CryptoSwift - - InternalCollectionsUtilities - - libwebp - onnxruntime-c - onnxruntime-objc - - SDWebImage - - SDWebImageWebPCoder - - SVGKit - - swift-collections EXTERNAL SOURCES: - audio_session: - :path: ".symlinks/plugins/audio_session/ios" - connectivity_plus: - :path: ".symlinks/plugins/connectivity_plus/ios" - cupertino_native_better: - :path: ".symlinks/plugins/cupertino_native_better/ios" - file_picker: - :path: ".symlinks/plugins/file_picker/darwin" Flutter: :path: Flutter - flutter_callkit_incoming: - :path: ".symlinks/plugins/flutter_callkit_incoming/ios" - flutter_image_compress_common: - :path: ".symlinks/plugins/flutter_image_compress_common/ios" - flutter_inappwebview_ios: - :path: ".symlinks/plugins/flutter_inappwebview_ios/ios" - flutter_local_notifications: - :path: ".symlinks/plugins/flutter_local_notifications/ios" - flutter_secure_storage_darwin: - :path: ".symlinks/plugins/flutter_secure_storage_darwin/darwin" - flutter_sharing_intent: - :path: ".symlinks/plugins/flutter_sharing_intent/ios" - geolocator_apple: - :path: ".symlinks/plugins/geolocator_apple/darwin" - home_widget: - :path: ".symlinks/plugins/home_widget/ios" - image_picker_ios: - :path: ".symlinks/plugins/image_picker_ios/ios" - just_audio: - :path: ".symlinks/plugins/just_audio/darwin" - package_info_plus: - :path: ".symlinks/plugins/package_info_plus/ios" - pdfium_flutter: - :path: ".symlinks/plugins/pdfium_flutter/darwin" - permission_handler_apple: - :path: ".symlinks/plugins/permission_handler_apple/ios" - quick_actions_ios: - :path: ".symlinks/plugins/quick_actions_ios/ios" - record_ios: - :path: ".symlinks/plugins/record_ios/ios" - share_plus: - :path: ".symlinks/plugins/share_plus/ios" - shared_preferences_foundation: - :path: ".symlinks/plugins/shared_preferences_foundation/darwin" - sqflite_darwin: - :path: ".symlinks/plugins/sqflite_darwin/darwin" - url_launcher_ios: - :path: ".symlinks/plugins/url_launcher_ios/ios" vad: :path: ".symlinks/plugins/vad/ios" - wakelock_plus: - :path: ".symlinks/plugins/wakelock_plus/ios" - webview_flutter_wkwebview: - :path: ".symlinks/plugins/webview_flutter_wkwebview/darwin" SPEC CHECKSUMS: - audio_session: 9bb7f6c970f21241b19f5a3658097ae459681ba0 - CocoaLumberjack: e4ba3b414dfca8c1916c6303d37f63b3a95134c6 - connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd - CryptoSwift: e64e11850ede528a02a0f3e768cec8e9d92ecb90 - cupertino_native_better: 48a6a9cd45efc9ea9e1eec30755b5a8ebe92f1f2 - file_picker: 70164d9778c42c47218d6cd79ce435de0856b11a Flutter: 71a624a5bc0c04062bf19101d501e466baf2fb47 - flutter_callkit_incoming: a143995975818a3717524decd3566d5ca7a8c608 - flutter_image_compress_common: 11d5dcfb36f4ded92320bfa896261813a073240e - flutter_inappwebview_ios: 9cde7869829d54b4110df350f3eedd192c5a4aea - flutter_local_notifications: 643a3eda1ce1c0599413ca31672536d423dee214 - flutter_secure_storage_darwin: acdb3f316ed05a3e68f856e0353b133eec373a23 - flutter_sharing_intent: 0c1e53949f09fa8df8ac2268505687bde8ff264c - geolocator_apple: ab36aa0e8b7d7a2d7639b3b4e48308394e8cef5e - home_widget: 54b4f6b36ed8d64cfee594a476225c35c3e45091 - image_picker_ios: e0ece4aa2a75771a7de3fa735d26d90817041326 - InternalCollectionsUtilities: af3f471602c4a67cbcb0bee0a80f6f55a33ae453 - just_audio: 4e391f57b79cad2b0674030a00453ca5ce817eed - libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 onnxruntime-c: 7f778680e96145956c0a31945f260321eed2611a onnxruntime-objc: 83d28b87525bd971259a66e153ea32b5d023de19 - package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499 - pdfium_flutter: e5a6e881af0b182d5b0465ebad23a8a20caa28d4 - permission_handler_apple: 92d754bbaa7361d436db2d6c3c1c2a0fdcec462e - quick_actions_ios: 500fcc11711d9f646739093395c4ae8eec25f779 - record_ios: 390a30c7caaf8b5d0fb1cb1d2fd5064b48b4520c - SDWebImage: e9c98383c7572d713c1a0d7dd2783b10599b9838 - SDWebImageWebPCoder: 0e06e365080397465cc73a7a9b472d8a3bd0f377 - share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a - shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb - sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 - SVGKit: 1ad7513f8c74d9652f94ed64ddecda1a23864dea - swift-collections: ba248ecaf44ef500b27d5cf94d304218c89892ff - url_launcher_ios: 7a95fa5b60cc718a708b8f2966718e93db0cef1b vad: 7934867589afe53567f492df66fb1615f2185822 - wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556 - webview_flutter_wkwebview: 8ebf4fded22593026f7dbff1fbff31ea98573c8d PODFILE CHECKSUM: 1bed8b2262b594f89f58bee2826557447173bc56 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index bf2379a19..88b7c89fb 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -10,6 +10,7 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -100,6 +101,7 @@ 6DEBCC1D4A97BA7E06B4F749 /* 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 = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -221,6 +223,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, D2A0B2262F5E4D6C7B8A9012 /* CarPlay.framework in Frameworks */, CA4A256DAFB6E4374BC67B91 /* Pods_Runner.framework in Frameworks */, ); @@ -281,6 +284,7 @@ 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, @@ -384,8 +388,6 @@ F1DBCF1E2E601A39004C2540 /* Embed Foundation Extensions */, 9740EEB61CF901F6004384FC /* Run Script */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 24812099A551BA4570C59A8E /* [CP] Embed Pods Frameworks */, - C10E41C5BC1B71D016E9688D /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -394,6 +396,9 @@ F15AFED02EE5499E00A1FABB /* PBXTargetDependency */, ); name = Runner; + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); productName = Runner; productReference = 97C146EE1CF9000F007C117D /* Runner.app */; productType = "com.apple.product-type.application"; @@ -485,6 +490,9 @@ Base, ); mainGroup = 97C146E51CF9000F007C117D; + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, + ); productRefGroup = 97C146EF1CF9000F007C117D /* Products */; projectDirPath = ""; projectRoot = ""; @@ -534,21 +542,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 24812099A551BA4570C59A8E /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -602,21 +595,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - C10E41C5BC1B71D016E9688D /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; DE631DFCBC56A5A8B5E0A4FD /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1430,6 +1408,20 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { + isa = XCSwiftPackageProductDependency; + productName = FlutterGeneratedPluginSwiftPackage; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 97C146E61CF9000F007C117D /* Project object */; } diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 9b933f688..cc928b92f 100644 --- a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,39 +1,30 @@ { "pins" : [ { - "identity" : "cwlcatchexception", + "identity" : "cocoalumberjack", "kind" : "remoteSourceControl", - "location" : "https://github.com/mattgallagher/CwlCatchException.git", + "location" : "https://github.com/CocoaLumberjack/CocoaLumberjack.git", "state" : { - "revision" : "07b2ba21d361c223e25e3c1e924288742923f08c", - "version" : "2.2.1" + "revision" : "c5f2ed4d219866117e135cf648180dc7b66739d3", + "version" : "3.9.1" } }, { - "identity" : "dkcamera", + "identity" : "cryptoswift", "kind" : "remoteSourceControl", - "location" : "https://github.com/zhangao0086/DKCamera", + "location" : "https://github.com/krzyzanowskim/CryptoSwift.git", "state" : { - "branch" : "master", - "revision" : "5c691d11014b910aff69f960475d70e65d9dcc96" + "revision" : "f2a627b84c1ff96f21ac2fcb623ab36142dd5512", + "version" : "1.10.0" } }, { - "identity" : "dkimagepickercontroller", + "identity" : "libwebp-xcode", "kind" : "remoteSourceControl", - "location" : "https://github.com/zhangao0086/DKImagePickerController", + "location" : "https://github.com/SDWebImage/libwebp-Xcode.git", "state" : { - "branch" : "4.3.9", - "revision" : "0bdfeacefa308545adde07bef86e349186335915" - } - }, - { - "identity" : "dkphotogallery", - "kind" : "remoteSourceControl", - "location" : "https://github.com/zhangao0086/DKPhotoGallery", - "state" : { - "branch" : "master", - "revision" : "311c1bc7a94f1538f82773a79c84374b12a2ef3d" + "revision" : "2b5256c29ff4e20f2a0d5ee863b62b1a22144434", + "version" : "1.6.0" } }, { @@ -46,21 +37,39 @@ } }, { - "identity" : "swiftygif", + "identity" : "sdwebimagewebpcoder", "kind" : "remoteSourceControl", - "location" : "https://github.com/kirualex/SwiftyGif.git", + "location" : "https://github.com/SDWebImage/SDWebImageWebPCoder.git", "state" : { - "revision" : "4430cbc148baa3907651d40562d96325426f409a", - "version" : "5.4.5" + "revision" : "12d83edbcc795fb7b5c0c3cb74d739108d3357d2", + "version" : "0.15.0" } }, { - "identity" : "tocropviewcontroller", + "identity" : "svgkit", "kind" : "remoteSourceControl", - "location" : "https://github.com/TimOliver/TOCropViewController", + "location" : "https://github.com/SVGKit/SVGKit.git", "state" : { - "revision" : "d4a6d8100f4b886fdbc8ae399bf144ff3e9afb7e", - "version" : "2.8.0" + "revision" : "58152b9f7c85eab239160b36ffdfd364aa43d666", + "version" : "3.0.0" + } + }, + { + "identity" : "swift-collections", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-collections.git", + "state" : { + "revision" : "a0cb0954ecb21e4e31b0070e6ed5674e8556685a", + "version" : "1.6.0" + } + }, + { + "identity" : "swift-log", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-log", + "state" : { + "revision" : "3ffafb9722d5d918c614feb496c8789a3b59d222", + "version" : "1.15.0" } } ], diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index e3773d42e..c3fedb29c 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -5,6 +5,24 @@ + + + + + + + + + + ) { let unhandledContexts = Set(URLContexts.filter { context in - !handleShareUrl(context.url, setInitialData: false) + !handleShareUrl(context.url) }) if !unhandledContexts.isEmpty { @@ -79,35 +78,16 @@ import UIKit private func handleInitialShareUrlContexts( _ urlContexts: Set ) { - for context in urlContexts where handleShareUrl( - context.url, - setInitialData: true - ) { + for context in urlContexts where handleShareUrl(context.url) { return } } - private func handleShareUrl(_ url: URL, setInitialData: Bool) -> Bool { - let plugin = SwiftFlutterSharingIntentPlugin.instance - guard plugin.hasSameSchemePrefix(url: url) else { return false } - defer { - (UIApplication.shared.delegate as? AppDelegate)?.notifyShareImportEvent() - } - - if setInitialData { - let launchOptions: [AnyHashable: Any] = [ - UIApplication.LaunchOptionsKey.url: url, - ] - return plugin.application( - UIApplication.shared, - didFinishLaunchingWithOptions: launchOptions - ) - } - - return plugin.application( - UIApplication.shared, - open: url, - options: [:] - ) + private func handleShareUrl(_ url: URL) -> Bool { + guard let bundleIdentifier = Bundle.main.bundleIdentifier, + url.absoluteString.hasPrefix("SharingMedia-\(bundleIdentifier)") + else { return false } + (UIApplication.shared.delegate as? AppDelegate)?.notifyShareImportEvent() + return true } } diff --git a/lib/core/services/share_receiver_service.dart b/lib/core/services/share_receiver_service.dart index b8e0eec0f..5ca3fa8b5 100644 --- a/lib/core/services/share_receiver_service.dart +++ b/lib/core/services/share_receiver_service.dart @@ -6,8 +6,7 @@ import 'package:flutter/foundation.dart'; import 'package:material_ui/material_ui.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_sharing_intent/flutter_sharing_intent.dart'; -import 'package:flutter_sharing_intent/model/sharing_file.dart'; +import 'package:receive_sharing_intent/receive_sharing_intent.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import '../../features/auth/providers/unified_auth_providers.dart'; @@ -33,7 +32,6 @@ const int _nativeShareImportMaxPollAttempts = 240; const String _nativeShareImportTimedOutMessage = 'Could not finish importing shared attachments. Please try sharing again.'; const _androidShareTextChannel = MethodChannel('conduit/share_receiver_text'); -const _sharingIntentChannel = MethodChannel('flutter_sharing_intent'); enum SharedPayloadProcessResult { processed, consumed, retry } @@ -244,7 +242,7 @@ class SharedPayload { } factory SharedPayload.fromSharedFiles( - List files, { + List files, { String? extraText, }) { final textParts = []; @@ -279,14 +277,14 @@ class SharedPayload { addText(extraText); for (final file in files) { addText(file.message); - final mainPath = _normalizeSharedFilePath(file.value); + final mainPath = _normalizeSharedFilePath(file.path); deleteIgnoredSidecar(file.thumbnail, mainPath); switch (_sharedFileKind(file)) { case _SharedFileKind.text: - addText(file.value); + addText(file.path); break; case _SharedFileKind.file: - addFilePath(file.value); + addFilePath(file.path); break; } } @@ -589,7 +587,7 @@ final shareReceiverInitializerProvider = Provider((ref) { Future resetSharedIntent() async { try { - await _sharingIntentChannel.invokeMethod('reset'); + await ReceiveSharingIntent.instance.reset(); } catch (error) { DebugLogger.log( 'ShareReceiver: failed to reset shared intent', @@ -946,7 +944,7 @@ final shareReceiverInitializerProvider = Provider((ref) { } }; - Future setPendingFromSharedMedia(List media) async { + Future setPendingFromSharedMedia(List media) async { final extraText = await takePendingAndroidMultipleShareText(); final payload = SharedPayload.fromSharedFiles(media, extraText: extraText); if (!payload.hasAnything) { @@ -1114,7 +1112,7 @@ final shareReceiverInitializerProvider = Provider((ref) { try { await maybeStartNativeShareImportPolling(); if (Platform.isAndroid) { - final media = await FlutterSharingIntent.instance.getInitialSharing(); + final media = await ReceiveSharingIntent.instance.getInitialMedia(); await setPendingFromSharedMedia(media); } } catch (error) { @@ -1127,8 +1125,9 @@ final shareReceiverInitializerProvider = Provider((ref) { }); // Handle subsequent shares while app is alive - final StreamSubscription>? streamSub = Platform.isAndroid - ? FlutterSharingIntent.instance.getMediaStream().listen((media) { + final StreamSubscription>? streamSub = + Platform.isAndroid + ? ReceiveSharingIntent.instance.getMediaStream().listen((media) { unawaited( (() async { try { @@ -1155,24 +1154,14 @@ final shareReceiverInitializerProvider = Provider((ref) { enum _SharedFileKind { text, file } -_SharedFileKind _sharedFileKind(SharedFile file) { +_SharedFileKind _sharedFileKind(SharedMediaFile file) { switch (file.type) { - case SharedMediaType.TEXT: - case SharedMediaType.URL: - case SharedMediaType.WEB_SEARCH: + case SharedMediaType.text: + case SharedMediaType.url: return _SharedFileKind.text; - case SharedMediaType.IMAGE: - case SharedMediaType.VIDEO: - case SharedMediaType.FILE: - return _SharedFileKind.file; - case SharedMediaType.OTHER: - final mimeType = file.mimeType?.toLowerCase(); - final value = file.value?.trim(); - if (mimeType?.startsWith('text/') == true || - value?.startsWith('http://') == true || - value?.startsWith('https://') == true) { - return _SharedFileKind.text; - } + case SharedMediaType.image: + case SharedMediaType.video: + case SharedMediaType.file: return _SharedFileKind.file; } } @@ -1413,7 +1402,7 @@ Future _resolveLegacyPluginSourceRoot({ NativeShareStagingRootResolver? nativeStagingRootResolver, }) async { if (Platform.isAndroid) { - // flutter_sharing_intent materializes Android content URIs into the app's + // receive_sharing_intent materializes Android content URIs into the app's // cache directory, exposed to Dart as Directory.systemTemp. return Directory.systemTemp; } diff --git a/pubspec.lock b/pubspec.lock index 3b6653ac5..d7ddf936a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -783,14 +783,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.1.3" - flutter_sharing_intent: - dependency: "direct main" - description: - name: flutter_sharing_intent - sha256: "16663db343f444236c15cc8223f4e9e4df2823e5a91f901fda0d46ae78d89287" - url: "https://pub.dev" - source: hosted - version: "2.0.4" flutter_svg: dependency: "direct main" description: @@ -1683,6 +1675,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" + receive_sharing_intent: + dependency: "direct main" + description: + name: receive_sharing_intent + sha256: "72f229a38f2910029c11d840770c173b27072e348ef3376130b37514bc4556f6" + url: "https://pub.dev" + source: hosted + version: "1.9.0" record: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 2b3086931..0b5612f3b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -68,7 +68,7 @@ dependencies: image_picker: ^1.2.3 # Retained on beta: latest stable 11.0.2 conflicts with share_plus via win32 as of 2026-06-10. file_picker: ^12.0.0-beta.5 - flutter_sharing_intent: ^2.0.4 + receive_sharing_intent: ^1.9.0 flutter_image_compress: ^2.5.1 path_provider: ^2.1.4 @@ -146,7 +146,7 @@ dev_dependencies: flutter: config: - enable-swift-package-manager: false + enable-swift-package-manager: true uses-material-design: true generate: true # Localization diff --git a/test/core/services/share_receiver_service_test.dart b/test/core/services/share_receiver_service_test.dart index 9410aa1de..898a0917e 100644 --- a/test/core/services/share_receiver_service_test.dart +++ b/test/core/services/share_receiver_service_test.dart @@ -9,7 +9,7 @@ import 'package:dio/dio.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_sharing_intent/model/sharing_file.dart'; +import 'package:receive_sharing_intent/receive_sharing_intent.dart'; import 'package:path/path.dart' as p; import 'package:drift/native.dart'; @@ -49,14 +49,14 @@ void main() { test('maps shared text and URLs into composer text', () { final payload = SharedPayload.fromSharedFiles([ - SharedFile( - value: ' hello from another app ', - type: SharedMediaType.TEXT, + SharedMediaFile( + path: ' hello from another app ', + type: SharedMediaType.text, mimeType: 'text/plain', ), - SharedFile( - value: 'https://example.com/article', - type: SharedMediaType.URL, + SharedMediaFile( + path: 'https://example.com/article', + type: SharedMediaType.url, ), ]); @@ -69,19 +69,19 @@ void main() { test('maps shared files, photos, and videos into file paths', () { final payload = SharedPayload.fromSharedFiles([ - SharedFile( - value: 'file:///tmp/shared%20photo.jpg', - type: SharedMediaType.IMAGE, + SharedMediaFile( + path: 'file:///tmp/shared%20photo.jpg', + type: SharedMediaType.image, mimeType: 'image/jpeg', ), - SharedFile( - value: '/tmp/movie.mp4', - type: SharedMediaType.VIDEO, + SharedMediaFile( + path: '/tmp/movie.mp4', + type: SharedMediaType.video, mimeType: 'video/mp4', ), - SharedFile( - value: '/tmp/doc.pdf', - type: SharedMediaType.FILE, + SharedMediaFile( + path: '/tmp/doc.pdf', + type: SharedMediaType.file, mimeType: 'application/pdf', ), ]); @@ -96,14 +96,14 @@ void main() { test('merges Android multi-file share text into composer text', () { final payload = SharedPayload.fromSharedFiles([ - SharedFile( - value: '/tmp/photo.jpg', - type: SharedMediaType.IMAGE, + SharedMediaFile( + path: '/tmp/photo.jpg', + type: SharedMediaType.image, mimeType: 'image/jpeg', ), - SharedFile( - value: '/tmp/document.pdf', - type: SharedMediaType.FILE, + SharedMediaFile( + path: '/tmp/document.pdf', + type: SharedMediaType.file, mimeType: 'application/pdf', ), ], extraText: ' shared caption '); @@ -114,19 +114,19 @@ void main() { test('deduplicates iOS messages and malformed media values', () { final payload = SharedPayload.fromSharedFiles([ - SharedFile( - value: '/tmp/one.jpg', - type: SharedMediaType.IMAGE, + SharedMediaFile( + path: '/tmp/one.jpg', + type: SharedMediaType.image, message: 'caption', ), - SharedFile( - value: '/tmp/two.jpg', - type: SharedMediaType.IMAGE, + SharedMediaFile( + path: '/tmp/two.jpg', + type: SharedMediaType.image, message: 'caption', ), - SharedFile(value: '', type: SharedMediaType.FILE), - SharedFile(value: ' ', type: SharedMediaType.TEXT), - SharedFile(value: '/tmp/two.jpg', type: SharedMediaType.IMAGE), + SharedMediaFile(path: '', type: SharedMediaType.file), + SharedMediaFile(path: ' ', type: SharedMediaType.text), + SharedMediaFile(path: '/tmp/two.jpg', type: SharedMediaType.image), ]); expect(payload.text, 'caption'); @@ -148,10 +148,10 @@ void main() { }); final payload = SharedPayload.fromSharedFiles([ - SharedFile( - value: '/tmp/movie.mp4', + SharedMediaFile( + path: '/tmp/movie.mp4', thumbnail: thumbnail.path, - type: SharedMediaType.VIDEO, + type: SharedMediaType.video, mimeType: 'video/mp4', ), ]);