From 152e076d447d4dc6b068c532df81445461e909f2 Mon Sep 17 00:00:00 2001
From: LittleSheep <littlesheep.code@hotmail.com>
Date: Sun, 1 Jun 2025 11:36:50 +0800
Subject: [PATCH] :bug: Trying to fix NSE

---
 ios/Podfile                                   |   2 +-
 ios/Podfile.lock                              |   2 +-
 ios/Runner.xcodeproj/project.pbxproj          | 174 +++++++++---------
 ios/Runner/NativeViews/BlurHashDecoder.swift  | 153 ---------------
 ios/Runner/NativeViews/ImageView.swift        |  42 -----
 ios/Runner/NativeViews/NativeImage.swift      |  62 -------
 .../Info.plist                                |   4 -
 .../NotificationService.swift                 |   0
 pubspec.yaml                                  |   2 +-
 9 files changed, 94 insertions(+), 347 deletions(-)
 delete mode 100644 ios/Runner/NativeViews/BlurHashDecoder.swift
 delete mode 100644 ios/Runner/NativeViews/ImageView.swift
 delete mode 100644 ios/Runner/NativeViews/NativeImage.swift
 rename ios/{NotificationService => SolianNotificationService}/Info.plist (82%)
 rename ios/{NotificationService => SolianNotificationService}/NotificationService.swift (100%)

diff --git a/ios/Podfile b/ios/Podfile
index c5ebe708..cc1e3938 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -39,7 +39,7 @@ target 'Runner' do
     inherit! :search_paths
   end
 
-  target 'NotificationService' do
+  target 'SolianNotificationService' do
     inherit! :search_paths
     pod 'Kingfisher', '~> 8.0'
     pod 'Alamofire'
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index a404c0ba..9bcb861e 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -344,6 +344,6 @@ SPEC CHECKSUMS:
   wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556
   WebRTC-SDK: dff00a3892bc570b6014e046297782084071657e
 
-PODFILE CHECKSUM: f5ad824c068cb5da52a3e19417c4e0de970c1231
+PODFILE CHECKSUM: 0c13198c20d0416ef589aeb2e1dac5c50262254f
 
 COCOAPODS: 1.16.2
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 37bf9d7b..7123e136 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -10,15 +10,15 @@
 		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 */; };
-		73268D1C2DEAFD670076E970 /* NotificationService.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 73268D152DEAFD670076E970 /* NotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+		73CDD6812DEC00480059D95D /* SolianNotificationService.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 		73D4264B2DEB815D006C0AAE /* NotifyDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73D4264A2DEB815D006C0AAE /* NotifyDelegate.swift */; };
 		74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
 		755557017FD1B99AFC4F9127 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29812C17FFBE7DBBC7203981 /* Pods_RunnerTests.framework */; };
-		8529D00678947B00A0162116 /* Pods_NotificationService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA0CA8A3E15DEE023BB27438 /* Pods_NotificationService.framework */; };
 		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 */; };
 		B87C0E607033790E71B54D73 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6D834CA86410B09796B312B /* Pods_Runner.framework */; };
+		D1772CE196985AE8E8C9F2E5 /* Pods_SolianNotificationService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39FE4CC6223F0D3C0E1FFD04 /* Pods_SolianNotificationService.framework */; };
 		E7A0B456EF7AAA71D1397081 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9AE244813FCDFAA941430393 /* GoogleService-Info.plist */; };
 /* End PBXBuildFile section */
 
@@ -30,12 +30,12 @@
 			remoteGlobalIDString = 97C146ED1CF9000F007C117D;
 			remoteInfo = Runner;
 		};
-		73268D1A2DEAFD670076E970 /* PBXContainerItemProxy */ = {
+		73CDD67F2DEC00480059D95D /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 97C146E61CF9000F007C117D /* Project object */;
 			proxyType = 1;
-			remoteGlobalIDString = 73268D142DEAFD670076E970;
-			remoteInfo = NotificationService;
+			remoteGlobalIDString = 73CDD6792DEC00480059D95D;
+			remoteInfo = SolianNotificationService;
 		};
 /* End PBXContainerItemProxy section */
 
@@ -46,7 +46,7 @@
 			dstPath = "";
 			dstSubfolderSpec = 13;
 			files = (
-				73268D1C2DEAFD670076E970 /* NotificationService.appex in Embed Foundation Extensions */,
+				73CDD6812DEC00480059D95D /* SolianNotificationService.appex in Embed Foundation Extensions */,
 			);
 			name = "Embed Foundation Extensions";
 			runOnlyForDeploymentPostprocessing = 0;
@@ -75,14 +75,16 @@
 		2D2457F8B2E6EF9C0F935035 /* Pods-NotificationService.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationService.profile.xcconfig"; path = "Target Support Files/Pods-NotificationService/Pods-NotificationService.profile.xcconfig"; sourceTree = "<group>"; };
 		331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
 		331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+		39FE4CC6223F0D3C0E1FFD04 /* Pods_SolianNotificationService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SolianNotificationService.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		3A1C47BD29CC6AC2587D4DBE /* 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 = "<group>"; };
 		3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
-		73268D152DEAFD670076E970 /* NotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = NotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 		737E920B2DB6A9FF00BE9CDB /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
+		73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = SolianNotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 		73D4264A2DEB815D006C0AAE /* NotifyDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotifyDelegate.swift; sourceTree = "<group>"; };
 		74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
 		74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
 		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
+		8B40620B1EEBB09456406A3C /* Pods-SolianNotificationService.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SolianNotificationService.profile.xcconfig"; path = "Target Support Files/Pods-SolianNotificationService/Pods-SolianNotificationService.profile.xcconfig"; sourceTree = "<group>"; };
 		9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
 		9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
 		97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -93,44 +95,46 @@
 		9AE244813FCDFAA941430393 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = "<group>"; };
 		A499FDB2082EB000933AA8C5 /* 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 = "<group>"; };
 		AA0CA8A3E15DEE023BB27438 /* Pods_NotificationService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_NotificationService.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		B93771F2A63E4148DC6142F7 /* Pods-SolianNotificationService.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SolianNotificationService.release.xcconfig"; path = "Target Support Files/Pods-SolianNotificationService/Pods-SolianNotificationService.release.xcconfig"; sourceTree = "<group>"; };
 		E6B10A9A85BECA2E576C91FF /* 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 = "<group>"; };
 		F6D834CA86410B09796B312B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		F830F535CB92E3F2E1653A11 /* Pods-SolianNotificationService.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SolianNotificationService.debug.xcconfig"; path = "Target Support Files/Pods-SolianNotificationService/Pods-SolianNotificationService.debug.xcconfig"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
-		73268D212DEAFD670076E970 /* Exceptions for "NotificationService" folder in "NotificationService" target */ = {
+		73CDD6822DEC00480059D95D /* Exceptions for "SolianNotificationService" folder in "SolianNotificationService" target */ = {
 			isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
 			membershipExceptions = (
 				Info.plist,
 			);
-			target = 73268D142DEAFD670076E970 /* NotificationService */;
+			target = 73CDD6792DEC00480059D95D /* SolianNotificationService */;
 		};
-		73268D2B2DEB013D0076E970 /* Exceptions for "Services" folder in "NotificationService" target */ = {
+		73CDD68E2DEC00BE0059D95D /* Exceptions for "Services" folder in "SolianNotificationService" target */ = {
 			isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
 			membershipExceptions = (
 				CloudFile.swift,
 			);
-			target = 73268D142DEAFD670076E970 /* NotificationService */;
+			target = 73CDD6792DEC00480059D95D /* SolianNotificationService */;
 		};
 /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
 
 /* Begin PBXFileSystemSynchronizedRootGroup section */
-		73268D162DEAFD670076E970 /* NotificationService */ = {
-			isa = PBXFileSystemSynchronizedRootGroup;
-			exceptions = (
-				73268D212DEAFD670076E970 /* Exceptions for "NotificationService" folder in "NotificationService" target */,
-			);
-			path = NotificationService;
-			sourceTree = "<group>";
-		};
 		73268D272DEB012A0076E970 /* Services */ = {
 			isa = PBXFileSystemSynchronizedRootGroup;
 			exceptions = (
-				73268D2B2DEB013D0076E970 /* Exceptions for "Services" folder in "NotificationService" target */,
+				73CDD68E2DEC00BE0059D95D /* Exceptions for "Services" folder in "SolianNotificationService" target */,
 			);
 			path = Services;
 			sourceTree = "<group>";
 		};
+		73CDD67B2DEC00480059D95D /* SolianNotificationService */ = {
+			isa = PBXFileSystemSynchronizedRootGroup;
+			exceptions = (
+				73CDD6822DEC00480059D95D /* Exceptions for "SolianNotificationService" folder in "SolianNotificationService" target */,
+			);
+			path = SolianNotificationService;
+			sourceTree = "<group>";
+		};
 /* End PBXFileSystemSynchronizedRootGroup section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -142,11 +146,11 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		73268D122DEAFD670076E970 /* Frameworks */ = {
+		73CDD6772DEC00480059D95D /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				8529D00678947B00A0162116 /* Pods_NotificationService.framework in Frameworks */,
+				D1772CE196985AE8E8C9F2E5 /* Pods_SolianNotificationService.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -175,6 +179,7 @@
 				F6D834CA86410B09796B312B /* Pods_Runner.framework */,
 				29812C17FFBE7DBBC7203981 /* Pods_RunnerTests.framework */,
 				AA0CA8A3E15DEE023BB27438 /* Pods_NotificationService.framework */,
+				39FE4CC6223F0D3C0E1FFD04 /* Pods_SolianNotificationService.framework */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
@@ -191,6 +196,9 @@
 				192FDACE67D7CB6AED15C634 /* Pods-NotificationService.debug.xcconfig */,
 				252A83CE6862573BB856ED8E /* Pods-NotificationService.release.xcconfig */,
 				2D2457F8B2E6EF9C0F935035 /* Pods-NotificationService.profile.xcconfig */,
+				F830F535CB92E3F2E1653A11 /* Pods-SolianNotificationService.debug.xcconfig */,
+				B93771F2A63E4148DC6142F7 /* Pods-SolianNotificationService.release.xcconfig */,
+				8B40620B1EEBB09456406A3C /* Pods-SolianNotificationService.profile.xcconfig */,
 			);
 			path = Pods;
 			sourceTree = "<group>";
@@ -211,7 +219,7 @@
 			children = (
 				9740EEB11CF90186004384FC /* Flutter */,
 				97C146F01CF9000F007C117D /* Runner */,
-				73268D162DEAFD670076E970 /* NotificationService */,
+				73CDD67B2DEC00480059D95D /* SolianNotificationService */,
 				97C146EF1CF9000F007C117D /* Products */,
 				331C8082294A63A400263BE5 /* RunnerTests */,
 				91E124CE95BCB4DCD890160D /* Pods */,
@@ -225,7 +233,7 @@
 			children = (
 				97C146EE1CF9000F007C117D /* Runner.app */,
 				331C8081294A63A400263BE5 /* RunnerTests.xctest */,
-				73268D152DEAFD670076E970 /* NotificationService.appex */,
+				73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -270,25 +278,25 @@
 			productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
-		73268D142DEAFD670076E970 /* NotificationService */ = {
+		73CDD6792DEC00480059D95D /* SolianNotificationService */ = {
 			isa = PBXNativeTarget;
-			buildConfigurationList = 73268D222DEAFD670076E970 /* Build configuration list for PBXNativeTarget "NotificationService" */;
+			buildConfigurationList = 73CDD6832DEC00480059D95D /* Build configuration list for PBXNativeTarget "SolianNotificationService" */;
 			buildPhases = (
-				042F7A1E06D2751BE114E578 /* [CP] Check Pods Manifest.lock */,
-				73268D112DEAFD670076E970 /* Sources */,
-				73268D122DEAFD670076E970 /* Frameworks */,
-				73268D132DEAFD670076E970 /* Resources */,
+				5FC5C1EF9F17B7166B432FF2 /* [CP] Check Pods Manifest.lock */,
+				73CDD6762DEC00480059D95D /* Sources */,
+				73CDD6772DEC00480059D95D /* Frameworks */,
+				73CDD6782DEC00480059D95D /* Resources */,
 			);
 			buildRules = (
 			);
 			dependencies = (
 			);
 			fileSystemSynchronizedGroups = (
-				73268D162DEAFD670076E970 /* NotificationService */,
+				73CDD67B2DEC00480059D95D /* SolianNotificationService */,
 			);
-			name = NotificationService;
-			productName = NotificationService;
-			productReference = 73268D152DEAFD670076E970 /* NotificationService.appex */;
+			name = SolianNotificationService;
+			productName = SolianNotificationService;
+			productReference = 73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */;
 			productType = "com.apple.product-type.app-extension";
 		};
 		97C146ED1CF9000F007C117D /* Runner */ = {
@@ -309,7 +317,7 @@
 			buildRules = (
 			);
 			dependencies = (
-				73268D1B2DEAFD670076E970 /* PBXTargetDependency */,
+				73CDD6802DEC00480059D95D /* PBXTargetDependency */,
 			);
 			fileSystemSynchronizedGroups = (
 				73268D272DEB012A0076E970 /* Services */,
@@ -334,7 +342,7 @@
 						CreatedOnToolsVersion = 14.0;
 						TestTargetID = 97C146ED1CF9000F007C117D;
 					};
-					73268D142DEAFD670076E970 = {
+					73CDD6792DEC00480059D95D = {
 						CreatedOnToolsVersion = 16.4;
 					};
 					97C146ED1CF9000F007C117D = {
@@ -358,7 +366,7 @@
 			targets = (
 				97C146ED1CF9000F007C117D /* Runner */,
 				331C8080294A63A400263BE5 /* RunnerTests */,
-				73268D142DEAFD670076E970 /* NotificationService */,
+				73CDD6792DEC00480059D95D /* SolianNotificationService */,
 			);
 		};
 /* End PBXProject section */
@@ -371,7 +379,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		73268D132DEAFD670076E970 /* Resources */ = {
+		73CDD6782DEC00480059D95D /* Resources */ = {
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
@@ -393,28 +401,6 @@
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXShellScriptBuildPhase section */
-		042F7A1E06D2751BE114E578 /* [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-NotificationService-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;
-		};
 		3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
 			isa = PBXShellScriptBuildPhase;
 			alwaysOutOfDate = 1;
@@ -470,6 +456,28 @@
 			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
 			showEnvVarsInLog = 0;
 		};
+		5FC5C1EF9F17B7166B432FF2 /* [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-SolianNotificationService-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;
+		};
 		8C0351B03869BBF493808288 /* [CP] Embed Pods Frameworks */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 2147483647;
@@ -535,7 +543,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		73268D112DEAFD670076E970 /* Sources */ = {
+		73CDD6762DEC00480059D95D /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
@@ -560,10 +568,10 @@
 			target = 97C146ED1CF9000F007C117D /* Runner */;
 			targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
 		};
-		73268D1B2DEAFD670076E970 /* PBXTargetDependency */ = {
+		73CDD6802DEC00480059D95D /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
-			target = 73268D142DEAFD670076E970 /* NotificationService */;
-			targetProxy = 73268D1A2DEAFD670076E970 /* PBXContainerItemProxy */;
+			target = 73CDD6792DEC00480059D95D /* SolianNotificationService */;
+			targetProxy = 73CDD67F2DEC00480059D95D /* PBXContainerItemProxy */;
 		};
 /* End PBXTargetDependency section */
 
@@ -714,9 +722,9 @@
 			};
 			name = Profile;
 		};
-		73268D1E2DEAFD670076E970 /* Debug */ = {
+		73CDD6842DEC00480059D95D /* Debug */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = 192FDACE67D7CB6AED15C634 /* Pods-NotificationService.debug.xcconfig */;
+			baseConfigurationReference = F830F535CB92E3F2E1653A11 /* Pods-SolianNotificationService.debug.xcconfig */;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@@ -731,8 +739,8 @@
 				ENABLE_USER_SCRIPT_SANDBOXING = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu17;
 				GENERATE_INFOPLIST_FILE = YES;
-				INFOPLIST_FILE = NotificationService/Info.plist;
-				INFOPLIST_KEY_CFBundleDisplayName = NotificationService;
+				INFOPLIST_FILE = SolianNotificationService/Info.plist;
+				INFOPLIST_KEY_CFBundleDisplayName = SolianNotificationService;
 				INFOPLIST_KEY_NSHumanReadableCopyright = "";
 				IPHONEOS_DEPLOYMENT_TARGET = 18.5;
 				LD_RUNPATH_SEARCH_PATHS = (
@@ -744,7 +752,7 @@
 				MARKETING_VERSION = 1.0;
 				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
 				MTL_FAST_MATH = YES;
-				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.NotificationService;
+				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianNotificationService;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SKIP_INSTALL = YES;
 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
@@ -755,9 +763,9 @@
 			};
 			name = Debug;
 		};
-		73268D1F2DEAFD670076E970 /* Release */ = {
+		73CDD6852DEC00480059D95D /* Release */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = 252A83CE6862573BB856ED8E /* Pods-NotificationService.release.xcconfig */;
+			baseConfigurationReference = B93771F2A63E4148DC6142F7 /* Pods-SolianNotificationService.release.xcconfig */;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@@ -772,8 +780,8 @@
 				ENABLE_USER_SCRIPT_SANDBOXING = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu17;
 				GENERATE_INFOPLIST_FILE = YES;
-				INFOPLIST_FILE = NotificationService/Info.plist;
-				INFOPLIST_KEY_CFBundleDisplayName = NotificationService;
+				INFOPLIST_FILE = SolianNotificationService/Info.plist;
+				INFOPLIST_KEY_CFBundleDisplayName = SolianNotificationService;
 				INFOPLIST_KEY_NSHumanReadableCopyright = "";
 				IPHONEOS_DEPLOYMENT_TARGET = 18.5;
 				LD_RUNPATH_SEARCH_PATHS = (
@@ -784,7 +792,7 @@
 				LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
 				MARKETING_VERSION = 1.0;
 				MTL_FAST_MATH = YES;
-				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.NotificationService;
+				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianNotificationService;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SKIP_INSTALL = YES;
 				SWIFT_EMIT_LOC_STRINGS = YES;
@@ -793,9 +801,9 @@
 			};
 			name = Release;
 		};
-		73268D202DEAFD670076E970 /* Profile */ = {
+		73CDD6862DEC00480059D95D /* Profile */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = 2D2457F8B2E6EF9C0F935035 /* Pods-NotificationService.profile.xcconfig */;
+			baseConfigurationReference = 8B40620B1EEBB09456406A3C /* Pods-SolianNotificationService.profile.xcconfig */;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@@ -810,8 +818,8 @@
 				ENABLE_USER_SCRIPT_SANDBOXING = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu17;
 				GENERATE_INFOPLIST_FILE = YES;
-				INFOPLIST_FILE = NotificationService/Info.plist;
-				INFOPLIST_KEY_CFBundleDisplayName = NotificationService;
+				INFOPLIST_FILE = SolianNotificationService/Info.plist;
+				INFOPLIST_KEY_CFBundleDisplayName = SolianNotificationService;
 				INFOPLIST_KEY_NSHumanReadableCopyright = "";
 				IPHONEOS_DEPLOYMENT_TARGET = 18.5;
 				LD_RUNPATH_SEARCH_PATHS = (
@@ -822,7 +830,7 @@
 				LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
 				MARKETING_VERSION = 1.0;
 				MTL_FAST_MATH = YES;
-				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.NotificationService;
+				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianNotificationService;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SKIP_INSTALL = YES;
 				SWIFT_EMIT_LOC_STRINGS = YES;
@@ -1006,12 +1014,12 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
-		73268D222DEAFD670076E970 /* Build configuration list for PBXNativeTarget "NotificationService" */ = {
+		73CDD6832DEC00480059D95D /* Build configuration list for PBXNativeTarget "SolianNotificationService" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
-				73268D1E2DEAFD670076E970 /* Debug */,
-				73268D1F2DEAFD670076E970 /* Release */,
-				73268D202DEAFD670076E970 /* Profile */,
+				73CDD6842DEC00480059D95D /* Debug */,
+				73CDD6852DEC00480059D95D /* Release */,
+				73CDD6862DEC00480059D95D /* Profile */,
 			);
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
diff --git a/ios/Runner/NativeViews/BlurHashDecoder.swift b/ios/Runner/NativeViews/BlurHashDecoder.swift
deleted file mode 100644
index 017ae839..00000000
--- a/ios/Runner/NativeViews/BlurHashDecoder.swift
+++ /dev/null
@@ -1,153 +0,0 @@
-//
-//  BlurHashDecoder.swift
-//  Runner
-//
-//  Created by LittleSheep on 2025/4/21.
-//
-
-import UIKit
-
-extension UIImage {
-    public convenience init?(blurHash: String, size: CGSize, punch: Float = 1) {
-        guard blurHash.count >= 6 else { return nil }
-        
-        let sizeFlag = String(blurHash[0]).decode83()
-        let numY = (sizeFlag / 9) + 1
-        let numX = (sizeFlag % 9) + 1
-        
-        let quantisedMaximumValue = String(blurHash[1]).decode83()
-        let maximumValue = Float(quantisedMaximumValue + 1) / 166
-        
-        guard blurHash.count == 4 + 2 * numX * numY else { return nil }
-        
-        let colours: [(Float, Float, Float)] = (0 ..< numX * numY).map { i in
-            if i == 0 {
-                let value = String(blurHash[2 ..< 6]).decode83()
-                return decodeDC(value)
-            } else {
-                let value = String(blurHash[4 + i * 2 ..< 4 + i * 2 + 2]).decode83()
-                return decodeAC(value, maximumValue: maximumValue * punch)
-            }
-        }
-        
-        let width = Int(size.width)
-        let height = Int(size.height)
-        let bytesPerRow = width * 3
-        guard let data = CFDataCreateMutable(kCFAllocatorDefault, bytesPerRow * height) else { return nil }
-        CFDataSetLength(data, bytesPerRow * height)
-        guard let pixels = CFDataGetMutableBytePtr(data) else { return nil }
-        
-        for y in 0 ..< height {
-            for x in 0 ..< width {
-                var r: Float = 0
-                var g: Float = 0
-                var b: Float = 0
-                
-                for j in 0 ..< numY {
-                    for i in 0 ..< numX {
-                        let basis = cos(Float.pi * Float(x) * Float(i) / Float(width)) * cos(Float.pi * Float(y) * Float(j) / Float(height))
-                        let colour = colours[i + j * numX]
-                        r += colour.0 * basis
-                        g += colour.1 * basis
-                        b += colour.2 * basis
-                    }
-                }
-                
-                let intR = UInt8(linearTosRGB(r))
-                let intG = UInt8(linearTosRGB(g))
-                let intB = UInt8(linearTosRGB(b))
-                
-                pixels[3 * x + 0 + y * bytesPerRow] = intR
-                pixels[3 * x + 1 + y * bytesPerRow] = intG
-                pixels[3 * x + 2 + y * bytesPerRow] = intB
-            }
-        }
-        
-        let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.none.rawValue)
-        
-        guard let provider = CGDataProvider(data: data) else { return nil }
-        guard let cgImage = CGImage(width: width, height: height, bitsPerComponent: 8, bitsPerPixel: 24, bytesPerRow: bytesPerRow,
-                                    space: CGColorSpaceCreateDeviceRGB(), bitmapInfo: bitmapInfo, provider: provider, decode: nil, shouldInterpolate: true, intent: .defaultIntent) else { return nil }
-        
-        self.init(cgImage: cgImage)
-    }
-}
-
-private func decodeDC(_ value: Int) -> (Float, Float, Float) {
-    let intR = value >> 16
-    let intG = (value >> 8) & 255
-    let intB = value & 255
-    return (sRGBToLinear(intR), sRGBToLinear(intG), sRGBToLinear(intB))
-}
-
-private func decodeAC(_ value: Int, maximumValue: Float) -> (Float, Float, Float) {
-    let quantR = value / (19 * 19)
-    let quantG = (value / 19) % 19
-    let quantB = value % 19
-    
-    let rgb = (
-        signPow((Float(quantR) - 9) / 9, 2) * maximumValue,
-        signPow((Float(quantG) - 9) / 9, 2) * maximumValue,
-        signPow((Float(quantB) - 9) / 9, 2) * maximumValue
-    )
-    
-    return rgb
-}
-
-private func signPow(_ value: Float, _ exp: Float) -> Float {
-    return copysign(pow(abs(value), exp), value)
-}
-
-private func linearTosRGB(_ value: Float) -> Int {
-    let v = max(0, min(1, value))
-    if v <= 0.0031308 { return Int(v * 12.92 * 255 + 0.5) }
-    else { return Int((1.055 * pow(v, 1 / 2.4) - 0.055) * 255 + 0.5) }
-}
-
-private func sRGBToLinear<Type: BinaryInteger>(_ value: Type) -> Float {
-    let v = Float(Int64(value)) / 255
-    if v <= 0.04045 { return v / 12.92 }
-    else { return pow((v + 0.055) / 1.055, 2.4) }
-}
-
-private let encodeCharacters: [String] = {
-    return "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~".map { String($0) }
-}()
-
-private let decodeCharacters: [String: Int] = {
-    var dict: [String: Int] = [:]
-    for (index, character) in encodeCharacters.enumerated() {
-        dict[character] = index
-    }
-    return dict
-}()
-
-extension String {
-    func decode83() -> Int {
-        var value: Int = 0
-        for character in self {
-            if let digit = decodeCharacters[String(character)] {
-                value = value * 83 + digit
-            }
-        }
-        return value
-    }
-}
-
-private extension String {
-    subscript (offset: Int) -> Character {
-        return self[index(startIndex, offsetBy: offset)]
-    }
-    
-    subscript (bounds: CountableClosedRange<Int>) -> Substring {
-        let start = index(startIndex, offsetBy: bounds.lowerBound)
-        let end = index(startIndex, offsetBy: bounds.upperBound)
-        return self[start...end]
-    }
-    
-    subscript (bounds: CountableRange<Int>) -> Substring {
-        let start = index(startIndex, offsetBy: bounds.lowerBound)
-        let end = index(startIndex, offsetBy: bounds.upperBound)
-        return self[start..<end]
-    }
-}
diff --git a/ios/Runner/NativeViews/ImageView.swift b/ios/Runner/NativeViews/ImageView.swift
deleted file mode 100644
index 1f7f1da2..00000000
--- a/ios/Runner/NativeViews/ImageView.swift
+++ /dev/null
@@ -1,42 +0,0 @@
-//
-//  ImageView.swift
-//  Runner
-//
-//  Created by LittleSheep on 2025/4/21.
-//
-
-import UIKit
-import Kingfisher
-
-class ImageView: UIImageView {
-    private var _size: CGSize = CGSize(width: 0, height: 0)
-    
-    // Initialize the image view
-    override init(frame: CGRect) {
-        super.init(frame: frame)
-        contentMode = .scaleAspectFill
-        clipsToBounds = true
-    }
-    
-    required init?(coder: NSCoder) {
-        super.init(coder: coder)
-        contentMode = .scaleAspectFill
-        clipsToBounds = true
-    }
-    
-    // Method to set the image from a URL using Kingfisher
-    func setImage(from url: URL, blurHash: String?) {
-        let placeholderImage = blurHash != nil ? UIImage.init(blurHash: blurHash!, size: _size) : nil
-        let processor = DownsamplingImageProcessor(size: _size) |> RoundCornerImageProcessor(cornerRadius: 20)
-        
-        self.kf.indicatorType = .activity
-        self.kf.setImage(
-            with: url,
-            placeholder: placeholderImage,
-            options: [
-                .processor(processor),
-                .transition(.fade(0.3))
-            ]
-        )
-    }
-}
diff --git a/ios/Runner/NativeViews/NativeImage.swift b/ios/Runner/NativeViews/NativeImage.swift
deleted file mode 100644
index 97755827..00000000
--- a/ios/Runner/NativeViews/NativeImage.swift
+++ /dev/null
@@ -1,62 +0,0 @@
-//
-//  NativeImage.swift
-//  Runner
-//
-//  Created by LittleSheep on 2025/4/21.
-//
-
-import Flutter
-import UIKit
-import Kingfisher
-
-class FLNativeImageFactory : NSObject, FlutterPlatformViewFactory {
-    private var messenger: FlutterBinaryMessenger
-    
-    init(messenger: FlutterBinaryMessenger) {
-        self.messenger = messenger
-        super.init()
-    }
-    
-    func create(
-        withFrame frame: CGRect,
-        viewIdentifier viewId: Int64,
-        arguments args: Any?
-    ) -> FlutterPlatformView {
-        return FLNativeImage(
-            frame: frame,
-            viewIdentifier: viewId,
-            arguments: args,
-            binaryMessenger: messenger)
-    }
-    
-    /// Implementing this method is only necessary when the `arguments` in `createWithFrame` is not `nil`.
-    public func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol {
-        return FlutterStandardMessageCodec.sharedInstance()
-    }
-}
-
-class FLNativeImage : NSObject, FlutterPlatformView {
-    private var _view: ImageView
-    
-    init(
-        frame: CGRect,
-        viewIdentifier viewId: Int64,
-        arguments args: Any?,
-        binaryMessenger messenger: FlutterBinaryMessenger?
-    ) {
-        _view = ImageView(frame: frame)
-        super.init()
-        
-        let argsMap = args as! [AnyHashable: Any]
-        let source = argsMap["src"] as! String
-        let blurHash = argsMap["blur"] as? String
-        
-        if let url = URL(string: source) {
-            _view.setImage(from: url, blurHash: blurHash)
-        }
-    }
-    
-    func view() -> UIView {
-        return _view
-    }
-}
diff --git a/ios/NotificationService/Info.plist b/ios/SolianNotificationService/Info.plist
similarity index 82%
rename from ios/NotificationService/Info.plist
rename to ios/SolianNotificationService/Info.plist
index ad04f442..57421ebf 100644
--- a/ios/NotificationService/Info.plist
+++ b/ios/SolianNotificationService/Info.plist
@@ -2,10 +2,6 @@
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
-	<key>NSUserActivityTypes</key>
-	<array>
-		<string>INSendMessageIntent</string>
-	</array>
 	<key>NSExtension</key>
 	<dict>
 		<key>NSExtensionPointIdentifier</key>
diff --git a/ios/NotificationService/NotificationService.swift b/ios/SolianNotificationService/NotificationService.swift
similarity index 100%
rename from ios/NotificationService/NotificationService.swift
rename to ios/SolianNotificationService/NotificationService.swift
diff --git a/pubspec.yaml b/pubspec.yaml
index 6b7ab474..615c0e0f 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
 # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
 # In Windows, build-name is used as the major, minor, and patch parts
 # of the product and file versions while build-number is used as the build suffix.
-version: 3.0.0+98
+version: 3.0.0+99
 
 environment:
   sdk: ^3.7.2