Просмотр исходного кода

[feat]添加ios快捷指令方式

Destiny 1 год назад
Родитель
Сommit
26e972adee

+ 11 - 11
ios/Podfile.lock

@@ -49,10 +49,10 @@ PODS:
     - Flutter
   - flutter_local_notifications (0.0.1):
     - Flutter
-  - flutter_sound (9.17.0):
+  - flutter_sound (9.17.5):
     - Flutter
-    - flutter_sound_core (= 9.17.0)
-  - flutter_sound_core (9.17.0)
+    - flutter_sound_core (= 9.17.5)
+  - flutter_sound_core (9.17.5)
   - flutter_umeng (0.0.1):
     - Flutter
   - gravity_engine (0.0.1):
@@ -104,13 +104,13 @@ PODS:
   - webview_flutter_wkwebview (0.0.1):
     - Flutter
     - FlutterMacOS
-  - wechat_kit (6.0.1):
+  - wechat_kit (6.0.2):
     - Flutter
-    - wechat_kit/no_pay (= 6.0.1)
-    - wechat_kit/vendor (= 6.0.1)
-  - wechat_kit/no_pay (6.0.1):
+    - wechat_kit/no_pay (= 6.0.2)
+    - wechat_kit/vendor (= 6.0.2)
+  - wechat_kit/no_pay (6.0.2):
     - Flutter
-  - wechat_kit/vendor (6.0.1):
+  - wechat_kit/vendor (6.0.2):
     - Flutter
 
 DEPENDENCIES:
@@ -226,8 +226,8 @@ SPEC CHECKSUMS:
   Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
   flutter_foreground_task: 21ef182ab0a29a3005cc72cd70e5f45cb7f7f817
   flutter_local_notifications: 4cde75091f6327eb8517fa068a0a5950212d2086
-  flutter_sound: ee90d437be3fb59424e195ff7f22884a6f98508c
-  flutter_sound_core: 714d3f327d960314396f56018c9b63523e2960b4
+  flutter_sound: d8bf9711570f368d74ecf2a408b5162070a0956c
+  flutter_sound_core: fd7c34e5789d5d780556c33388fd40ff694d6b4c
   flutter_umeng: 9005e3f776ff69868f0d75fbb2f11b33fbafc850
   gravity_engine: 750c5f2424a042f334f1154ece41d916eb148d6a
   in_app_purchase_storekit: 8c3b0b3eb1b0f04efbff401c3de6266d4258d433
@@ -250,7 +250,7 @@ SPEC CHECKSUMS:
   video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3
   wakelock_plus: 78ec7c5b202cab7761af8e2b2b3d0671be6c4ae1
   webview_flutter_wkwebview: 0982481e3d9c78fd5c6f62a002fcd24fc791f1e4
-  wechat_kit: 2ae8a941c74332323910c34baac8a69549aa4a3f
+  wechat_kit: b6853fe0933b9a60a008a508e709c14f6ed2dc70
 
 PODFILE CHECKSUM: 7caf336f823524274eee12d7eeb37414067cfdfd
 

+ 24 - 0
ios/RecordIntent/Info.plist

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>NSExtension</key>
+	<dict>
+		<key>NSExtensionAttributes</key>
+		<dict>
+			<key>IntentsRestrictedWhileLocked</key>
+			<array/>
+			<key>IntentsRestrictedWhileProtectedDataUnavailable</key>
+			<array/>
+			<key>IntentsSupported</key>
+			<array>
+				<string>StartRecordIntent</string>
+			</array>
+		</dict>
+		<key>NSExtensionPointIdentifier</key>
+		<string>com.apple.intents-service</string>
+		<key>NSExtensionPrincipalClass</key>
+		<string>$(PRODUCT_MODULE_NAME).IntentHandler</string>
+	</dict>
+</dict>
+</plist>

+ 19 - 0
ios/RecordIntent/IntentHandler.swift

@@ -0,0 +1,19 @@
+//
+//  IntentHandler.swift
+//  RecordIntent
+//
+//  Created by Destiny on 2024/11/19.
+//
+
+import Intents
+
+class IntentHandler: INExtension {
+    
+    override func handler(for intent: INIntent) -> Any {
+        // This is the default implementation.  If you want different objects to handle different intents,
+        // you can override this and return the handler you want for that particular intent.
+        
+        return self
+    }
+    
+}

+ 108 - 0
ios/RecordIntent/RecordIntent.intentdefinition

@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>INEnums</key>
+	<array/>
+	<key>INIntentDefinitionModelVersion</key>
+	<string>1.2</string>
+	<key>INIntentDefinitionNamespace</key>
+	<string>Zed8EP</string>
+	<key>INIntentDefinitionSystemVersion</key>
+	<string>23A344</string>
+	<key>INIntentDefinitionToolsBuildVersion</key>
+	<string>15A507</string>
+	<key>INIntentDefinitionToolsVersion</key>
+	<string>15.0.1</string>
+	<key>INIntents</key>
+	<array>
+		<dict>
+			<key>INIntentCategory</key>
+			<string>generic</string>
+			<key>INIntentConfigurable</key>
+			<true/>
+			<key>INIntentDescription</key>
+			<string>快捷启动小听应用使用录音功能</string>
+			<key>INIntentDescriptionID</key>
+			<string>ioaDcP</string>
+			<key>INIntentLastParameterTag</key>
+			<integer>3</integer>
+			<key>INIntentManagedParameterCombinations</key>
+			<dict>
+				<key></key>
+				<dict>
+					<key>INIntentParameterCombinationSupportsBackgroundExecution</key>
+					<true/>
+					<key>INIntentParameterCombinationUpdatesLinked</key>
+					<true/>
+				</dict>
+			</dict>
+			<key>INIntentName</key>
+			<string>StartRecord</string>
+			<key>INIntentParameterCombinations</key>
+			<dict>
+				<key></key>
+				<dict>
+					<key>INIntentParameterCombinationIsLinked</key>
+					<true/>
+					<key>INIntentParameterCombinationSupportsBackgroundExecution</key>
+					<true/>
+				</dict>
+			</dict>
+			<key>INIntentResponse</key>
+			<dict>
+				<key>INIntentResponseCodes</key>
+				<array>
+					<dict>
+						<key>INIntentResponseCodeConciseFormatString</key>
+						<string>启动成功</string>
+						<key>INIntentResponseCodeConciseFormatStringID</key>
+						<string>dI6kv0</string>
+						<key>INIntentResponseCodeName</key>
+						<string>success</string>
+						<key>INIntentResponseCodeSuccess</key>
+						<true/>
+					</dict>
+					<dict>
+						<key>INIntentResponseCodeConciseFormatString</key>
+						<string>启动失败</string>
+						<key>INIntentResponseCodeConciseFormatStringID</key>
+						<string>YCYrJt</string>
+						<key>INIntentResponseCodeName</key>
+						<string>failure</string>
+					</dict>
+				</array>
+				<key>INIntentResponseLastParameterTag</key>
+				<integer>1</integer>
+				<key>INIntentResponseParameters</key>
+				<array>
+					<dict>
+						<key>INIntentResponseParameterDisplayName</key>
+						<string>StartRecord</string>
+						<key>INIntentResponseParameterDisplayNameID</key>
+						<string>qQGP0W</string>
+						<key>INIntentResponseParameterDisplayPriority</key>
+						<integer>1</integer>
+						<key>INIntentResponseParameterName</key>
+						<string>startRecord</string>
+						<key>INIntentResponseParameterTag</key>
+						<integer>1</integer>
+						<key>INIntentResponseParameterType</key>
+						<string>String</string>
+					</dict>
+				</array>
+			</dict>
+			<key>INIntentTitle</key>
+			<string>小听快听</string>
+			<key>INIntentTitleID</key>
+			<string>bqv1cC</string>
+			<key>INIntentType</key>
+			<string>Custom</string>
+			<key>INIntentVerb</key>
+			<string>Do</string>
+		</dict>
+	</array>
+	<key>INTypes</key>
+	<array/>
+</dict>
+</plist>

+ 243 - 0
ios/Runner.xcodeproj/project.pbxproj

@@ -7,6 +7,13 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
+		04C3CF552CEC6B48003472EF /* RecordIntent.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 04C3CF542CEC6B48003472EF /* RecordIntent.intentdefinition */; };
+		04C3CF5C2CEC6C54003472EF /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04C3CF5B2CEC6C54003472EF /* Intents.framework */; };
+		04C3CF5F2CEC6C54003472EF /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C3CF5E2CEC6C54003472EF /* IntentHandler.swift */; };
+		04C3CF632CEC6C54003472EF /* RecordIntent.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 04C3CF5A2CEC6C54003472EF /* RecordIntent.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+		04C3CF692CEC6C5E003472EF /* RecordIntent.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 04C3CF542CEC6B48003472EF /* RecordIntent.intentdefinition */; };
+		04C3CF6A2CEC6C62003472EF /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C3CF5E2CEC6C54003472EF /* IntentHandler.swift */; };
+		04C3CF6E2CEC7EF5003472EF /* MethodChannelManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C3CF6D2CEC7EF5003472EF /* MethodChannelManager.swift */; };
 		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
 		1C66F06AC5C5CBAE1537E793 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C90F96AA3D0EE725913D5709 /* Pods_Runner.framework */; };
 		331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
@@ -19,6 +26,13 @@
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
+		04C3CF612CEC6C54003472EF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 97C146E61CF9000F007C117D /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 04C3CF592CEC6C54003472EF;
+			remoteInfo = RecordIntent;
+		};
 		331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 97C146E61CF9000F007C117D /* Project object */;
@@ -29,6 +43,17 @@
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXCopyFilesBuildPhase section */
+		04C3CF682CEC6C54003472EF /* Embed Foundation Extensions */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 13;
+			files = (
+				04C3CF632CEC6C54003472EF /* RecordIntent.appex in Embed Foundation Extensions */,
+			);
+			name = "Embed Foundation Extensions";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		9705A1C41CF9048500538489 /* Embed Frameworks */ = {
 			isa = PBXCopyFilesBuildPhase;
 			buildActionMask = 2147483647;
@@ -45,6 +70,12 @@
 		046E76B42CA9493700EBC6A5 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
 		04C027212CC213990030C684 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Main.strings"; sourceTree = "<group>"; };
 		04C027222CC213990030C684 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/LaunchScreen.strings"; sourceTree = "<group>"; };
+		04C3CF542CEC6B48003472EF /* RecordIntent.intentdefinition */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; path = RecordIntent.intentdefinition; sourceTree = "<group>"; };
+		04C3CF5A2CEC6C54003472EF /* RecordIntent.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = RecordIntent.appex; sourceTree = BUILT_PRODUCTS_DIR; };
+		04C3CF5B2CEC6C54003472EF /* Intents.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Intents.framework; path = System/Library/Frameworks/Intents.framework; sourceTree = SDKROOT; };
+		04C3CF5E2CEC6C54003472EF /* IntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentHandler.swift; sourceTree = "<group>"; };
+		04C3CF602CEC6C54003472EF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		04C3CF6D2CEC7EF5003472EF /* MethodChannelManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MethodChannelManager.swift; sourceTree = "<group>"; };
 		0D608F4B80B80615C43809B6 /* 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 = "<group>"; };
 		1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
 		1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
@@ -71,6 +102,14 @@
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
+		04C3CF572CEC6C54003472EF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				04C3CF5C2CEC6C54003472EF /* Intents.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		80A97C715DD51C4DC404B716 /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
@@ -90,6 +129,16 @@
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
+		04C3CF5D2CEC6C54003472EF /* RecordIntent */ = {
+			isa = PBXGroup;
+			children = (
+				04C3CF542CEC6B48003472EF /* RecordIntent.intentdefinition */,
+				04C3CF5E2CEC6C54003472EF /* IntentHandler.swift */,
+				04C3CF602CEC6C54003472EF /* Info.plist */,
+			);
+			path = RecordIntent;
+			sourceTree = "<group>";
+		};
 		331C8082294A63A400263BE5 /* RunnerTests */ = {
 			isa = PBXGroup;
 			children = (
@@ -116,6 +165,7 @@
 			children = (
 				C90F96AA3D0EE725913D5709 /* Pods_Runner.framework */,
 				1B8A98F48D101FCF6D20A0D7 /* Pods_RunnerTests.framework */,
+				04C3CF5B2CEC6C54003472EF /* Intents.framework */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
@@ -136,6 +186,7 @@
 			children = (
 				9740EEB11CF90186004384FC /* Flutter */,
 				97C146F01CF9000F007C117D /* Runner */,
+				04C3CF5D2CEC6C54003472EF /* RecordIntent */,
 				97C146EF1CF9000F007C117D /* Products */,
 				331C8082294A63A400263BE5 /* RunnerTests */,
 				7B633410146352CB15D820B2 /* Pods */,
@@ -148,6 +199,7 @@
 			children = (
 				97C146EE1CF9000F007C117D /* Runner.app */,
 				331C8081294A63A400263BE5 /* RunnerTests.xctest */,
+				04C3CF5A2CEC6C54003472EF /* RecordIntent.appex */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -164,6 +216,7 @@
 				1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
 				74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
 				74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
+				04C3CF6D2CEC7EF5003472EF /* MethodChannelManager.swift */,
 			);
 			path = Runner;
 			sourceTree = "<group>";
@@ -171,6 +224,23 @@
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
+		04C3CF592CEC6C54003472EF /* RecordIntent */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 04C3CF642CEC6C54003472EF /* Build configuration list for PBXNativeTarget "RecordIntent" */;
+			buildPhases = (
+				04C3CF562CEC6C54003472EF /* Sources */,
+				04C3CF572CEC6C54003472EF /* Frameworks */,
+				04C3CF582CEC6C54003472EF /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = RecordIntent;
+			productName = RecordIntent;
+			productReference = 04C3CF5A2CEC6C54003472EF /* RecordIntent.appex */;
+			productType = "com.apple.product-type.app-extension";
+		};
 		331C8080294A63A400263BE5 /* RunnerTests */ = {
 			isa = PBXNativeTarget;
 			buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
@@ -196,6 +266,7 @@
 			buildPhases = (
 				FE8B796625F8BFA21C54B38D /* [CP] Check Pods Manifest.lock */,
 				9740EEB61CF901F6004384FC /* Run Script */,
+				04C3CF682CEC6C54003472EF /* Embed Foundation Extensions */,
 				97C146EA1CF9000F007C117D /* Sources */,
 				97C146EB1CF9000F007C117D /* Frameworks */,
 				97C146EC1CF9000F007C117D /* Resources */,
@@ -207,6 +278,7 @@
 			buildRules = (
 			);
 			dependencies = (
+				04C3CF622CEC6C54003472EF /* PBXTargetDependency */,
 			);
 			name = Runner;
 			productName = Runner;
@@ -220,9 +292,13 @@
 			isa = PBXProject;
 			attributes = {
 				BuildIndependentTargetsInParallel = YES;
+				LastSwiftUpdateCheck = 1500;
 				LastUpgradeCheck = 1510;
 				ORGANIZATIONNAME = "";
 				TargetAttributes = {
+					04C3CF592CEC6C54003472EF = {
+						CreatedOnToolsVersion = 15.0.1;
+					};
 					331C8080294A63A400263BE5 = {
 						CreatedOnToolsVersion = 14.0;
 						TestTargetID = 97C146ED1CF9000F007C117D;
@@ -249,11 +325,19 @@
 			targets = (
 				97C146ED1CF9000F007C117D /* Runner */,
 				331C8080294A63A400263BE5 /* RunnerTests */,
+				04C3CF592CEC6C54003472EF /* RecordIntent */,
 			);
 		};
 /* End PBXProject section */
 
 /* Begin PBXResourcesBuildPhase section */
+		04C3CF582CEC6C54003472EF /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		331C807F294A63A400263BE5 /* Resources */ = {
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
@@ -387,6 +471,15 @@
 /* End PBXShellScriptBuildPhase section */
 
 /* Begin PBXSourcesBuildPhase section */
+		04C3CF562CEC6C54003472EF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				04C3CF5F2CEC6C54003472EF /* IntentHandler.swift in Sources */,
+				04C3CF692CEC6C5E003472EF /* RecordIntent.intentdefinition in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		331C807D294A63A400263BE5 /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
@@ -399,7 +492,10 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				04C3CF552CEC6B48003472EF /* RecordIntent.intentdefinition in Sources */,
 				74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
+				04C3CF6A2CEC6C62003472EF /* IntentHandler.swift in Sources */,
+				04C3CF6E2CEC7EF5003472EF /* MethodChannelManager.swift in Sources */,
 				1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -407,6 +503,11 @@
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXTargetDependency section */
+		04C3CF622CEC6C54003472EF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 04C3CF592CEC6C54003472EF /* RecordIntent */;
+			targetProxy = 04C3CF612CEC6C54003472EF /* PBXContainerItemProxy */;
+		};
 		331C8086294A63A400263BE5 /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
 			target = 97C146ED1CF9000F007C117D /* Runner */;
@@ -436,6 +537,135 @@
 /* End PBXVariantGroup section */
 
 /* Begin XCBuildConfiguration section */
+		04C3CF652CEC6C54003472EF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+				CLANG_ENABLE_OBJC_WEAK = YES;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CODE_SIGN_IDENTITY = "Apple Development";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				CODE_SIGN_STYLE = Manual;
+				CURRENT_PROJECT_VERSION = 1;
+				DEVELOPMENT_TEAM = "";
+				"DEVELOPMENT_TEAM[sdk=iphoneos*]" = S3Y6HGPL2S;
+				ENABLE_USER_SCRIPT_SANDBOXING = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu17;
+				GENERATE_INFOPLIST_FILE = YES;
+				INFOPLIST_FILE = RecordIntent/Info.plist;
+				INFOPLIST_KEY_CFBundleDisplayName = RecordIntent;
+				INFOPLIST_KEY_NSHumanReadableCopyright = "";
+				IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@executable_path/../../Frameworks",
+				);
+				LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+				MARKETING_VERSION = 1.0;
+				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+				MTL_FAST_MATH = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = com.xingmeng.xiaoting.recordintent;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				PROVISIONING_PROFILE_SPECIFIER = "";
+				"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = xiaoting_intent_dev;
+				SKIP_INSTALL = YES;
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
+				SWIFT_EMIT_LOC_STRINGS = YES;
+				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		04C3CF662CEC6C54003472EF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+				CLANG_ENABLE_OBJC_WEAK = YES;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CODE_SIGN_IDENTITY = "Apple Development";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				CODE_SIGN_STYLE = Manual;
+				CURRENT_PROJECT_VERSION = 1;
+				DEVELOPMENT_TEAM = "";
+				"DEVELOPMENT_TEAM[sdk=iphoneos*]" = S3Y6HGPL2S;
+				ENABLE_USER_SCRIPT_SANDBOXING = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu17;
+				GENERATE_INFOPLIST_FILE = YES;
+				INFOPLIST_FILE = RecordIntent/Info.plist;
+				INFOPLIST_KEY_CFBundleDisplayName = RecordIntent;
+				INFOPLIST_KEY_NSHumanReadableCopyright = "";
+				IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@executable_path/../../Frameworks",
+				);
+				LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+				MARKETING_VERSION = 1.0;
+				MTL_FAST_MATH = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = com.xingmeng.xiaoting.recordintent;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				PROVISIONING_PROFILE_SPECIFIER = "";
+				"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = xiaoting_intent_dev;
+				SKIP_INSTALL = YES;
+				SWIFT_EMIT_LOC_STRINGS = YES;
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Release;
+		};
+		04C3CF672CEC6C54003472EF /* Profile */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+				CLANG_ENABLE_OBJC_WEAK = YES;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CODE_SIGN_IDENTITY = "Apple Development";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				CODE_SIGN_STYLE = Manual;
+				CURRENT_PROJECT_VERSION = 1;
+				DEVELOPMENT_TEAM = "";
+				"DEVELOPMENT_TEAM[sdk=iphoneos*]" = S3Y6HGPL2S;
+				ENABLE_USER_SCRIPT_SANDBOXING = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu17;
+				GENERATE_INFOPLIST_FILE = YES;
+				INFOPLIST_FILE = RecordIntent/Info.plist;
+				INFOPLIST_KEY_CFBundleDisplayName = RecordIntent;
+				INFOPLIST_KEY_NSHumanReadableCopyright = "";
+				IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@executable_path/../../Frameworks",
+				);
+				LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+				MARKETING_VERSION = 1.0;
+				MTL_FAST_MATH = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = com.xingmeng.xiaoting.recordintent;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				PROVISIONING_PROFILE_SPECIFIER = "";
+				"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = xiaoting_intent_dev;
+				SKIP_INSTALL = YES;
+				SWIFT_EMIT_LOC_STRINGS = YES;
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Profile;
+		};
 		249021D3217E4FDB00AE95B9 /* Profile */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
@@ -493,6 +723,7 @@
 			isa = XCBuildConfiguration;
 			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
 			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
@@ -689,6 +920,7 @@
 			isa = XCBuildConfiguration;
 			baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
 			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
@@ -723,6 +955,7 @@
 			isa = XCBuildConfiguration;
 			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
 			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
@@ -755,6 +988,16 @@
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
+		04C3CF642CEC6C54003472EF /* Build configuration list for PBXNativeTarget "RecordIntent" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				04C3CF652CEC6C54003472EF /* Debug */,
+				04C3CF662CEC6C54003472EF /* Release */,
+				04C3CF672CEC6C54003472EF /* Profile */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
 		331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (

+ 12 - 0
ios/Runner/AppDelegate.swift

@@ -27,6 +27,18 @@ import flutter_local_notifications
     override func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
         super.application(application, didReceiveRemoteNotification: userInfo, fetchCompletionHandler: completionHandler)
     }
+    
+    override func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
+        
+        if userActivity.activityType == NSStringFromClass(StartRecordIntent.self) {
+            
+            let controller: FlutterViewController = window?.rootViewController as! FlutterViewController
+            let manager = MethodChannelManager(messager: controller.binaryMessenger)
+            manager.sendMessage()
+            return true
+        }
+        return false
+    }
 }
 
 func registerPlugins(registry: FlutterPluginRegistry) {

+ 6 - 0
ios/Runner/Assets.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 22 - 0
ios/Runner/Assets.xcassets/shortcut_icon.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "shortcut_icon@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "shortcut_icon@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
ios/Runner/Assets.xcassets/shortcut_icon.imageset/shortcut_icon@2x.png


BIN
ios/Runner/Assets.xcassets/shortcut_icon.imageset/shortcut_icon@3x.png


+ 4 - 0
ios/Runner/Info.plist

@@ -66,6 +66,10 @@
 	<string>小听需要麦克风权限用于会议录音功能</string>
 	<key>NSPhotoLibraryUsageDescription</key>
 	<string>小听需要此权限用于选择文件上传录音功能</string>
+	<key>NSUserActivityTypes</key>
+	<array>
+		<string>StartRecordIntent</string>
+	</array>
 	<key>NSUserTrackingUsageDescription</key>
 	<string>小听需要使用您的广告标识符以显示个性化广告</string>
 	<key>PHPhotoLibraryPreventAutomaticLimitedAccessAlert</key>

+ 32 - 0
ios/Runner/MethodChannelManager.swift

@@ -0,0 +1,32 @@
+//
+//  MethodChannelManager.swift
+//  Runner
+//
+//  Created by Destiny on 2024/11/19.
+//
+
+import Flutter
+import UIKit
+
+class MethodChannelManager: NSObject {
+    
+    var channel: FlutterMethodChannel
+    
+    init(messager: FlutterBinaryMessenger) {
+
+        channel = FlutterMethodChannel(name: "assistant_method_channel", binaryMessenger: messager)
+
+        channel.setMethodCallHandler { (call , result) in
+
+            print("接收到了来自Flutter发送的方法\(call.method)")
+
+            result("我是原生返回给Flutter的消息")
+        }
+    }
+    
+    func sendMessage() {
+        channel.invokeMethod("ios_method", arguments: "我是原生主动发送过来的") {(result) in
+            print(result)
+        }
+    }
+}

+ 8 - 1
lib/module/shortcut/controller.dart

@@ -1,11 +1,18 @@
 import 'package:electronic_assistant/base/base_controller.dart';
+import 'package:electronic_assistant/utils/launcher_url_util.dart';
+import 'package:url_launcher/url_launcher.dart';
+import 'package:chewie/chewie.dart';
+import 'package:video_player/video_player.dart';
 
 class ShortCutController extends BaseController {
   void onAddIosShortCut() {
     //TODO 调用ios快捷指令
+    LauncherUrlUtil.launchHttpUrl(
+        'https://www.icloud.com/shortcuts/621cbeab2b9d476cbe2c830be2a6ea9b',
+        mode: LaunchMode.externalApplication);
   }
 
-  void onShowIosShortcutVideo() {
+  Future<void> onShowIosShortcutVideo() async {
     //TODO 调用ios系统默认视频查看
   }
 }

+ 10 - 0
lib/utils/desktop_shortcut_utils.dart

@@ -10,6 +10,7 @@ import 'package:electronic_assistant/utils/launcher_url_util.dart';
 import 'package:electronic_assistant/utils/mmkv_util.dart';
 import 'package:electronic_assistant/utils/toast_util.dart';
 import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
 import 'package:get/get.dart';
 import 'package:get/get_core/src/get_main.dart';
 import 'package:url_launcher/url_launcher.dart';
@@ -32,6 +33,9 @@ class DesktopShortcutUtils {
 
   static AppLinks appLinks = AppLinks();
 
+  static MethodChannel methodChannel =
+      const MethodChannel('assistant_method_channel');
+
   static Future<void> registerDesktopShortcut() async {
     if (Platform.isAndroid) {
       androidShortCut.register();
@@ -41,7 +45,13 @@ class DesktopShortcutUtils {
     }
   }
 
+  // Future<void> setMethodChannelCallHandler() async {}
+
   static Future<void> registerIosDeeplink() async {
+    methodChannel.setMethodCallHandler((call) async {
+      DesktopShortcutUtils.setLaunchAction(LaunchAction.recordAudioAction);
+      Get.toNamed(RoutePath.record);
+    });
     // Handle links
     linkSubscription = appLinks.uriLinkStream.listen((uri) {
       debugPrint('onAppLink: $uri');

+ 4 - 0
pubspec.yaml

@@ -152,6 +152,10 @@ dependencies:
   #指定列表滚动到特定位置
   scrollable_positioned_list: ^0.3.8
 
+  #视频播放器
+  chewie: ^1.8.5
+  video_player: ^2.9.2
+
 dev_dependencies:
   flutter_test:
     sdk: flutter