From dd31df23c4a4b0ab5357014bf822a3704cf21621 Mon Sep 17 00:00:00 2001 From: JLChen <551775569@qq.com> Date: 星期四, 25 十一月 2021 16:51:01 +0800 Subject: [PATCH] 2021-11-25 1.更新 --- HDLSceneSiriDemo/HDLSceneSiriUI/IntentViewController.m | 59 +++ Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/ApiDefinition.cs | 87 ++-- HDLSceneSiriDemo/HDLSceneSiri/IntentHandler.m | 127 +++++++ HDLSceneSiri/HDLSceneSiri/HDLRunSceneIntent.h | 4 Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/Library/libHDLSceneSiri.a | 0 HDLSceneSiriDemo/HDLSceneSiriUI/Base.lproj/MainInterface.storyboard | 52 +++ HDLSceneSiriDemo/HDLSceneSiriUI/IntentViewController.h | 13 HDLSceneSiriDemo/HDLSceneSiri/IntentHandler.h | 12 HDLSceneSiriDemo/HDLSceneSiriUI/Info.plist | 20 + HDLSceneSiriDemo/HDLSceneSiri/HDLSceneHandler.h | 16 + HDLSceneSiriDemo/HDLSceneSiriDemo/Intents.intentdefinition | 181 +++++++++++ HDLSceneSiriDemo/HDLSceneSiri/Info.plist | 22 + HDLSceneSiriDemo/HDLSceneSiriDemo.xcodeproj/project.pbxproj | 324 +++++++++++++++++++ HDLSceneSiriDemo/HDLSceneSiri/HDLSceneHandler.m | 36 ++ Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/Properties/AssemblyInfo.cs | 2 15 files changed, 903 insertions(+), 52 deletions(-) diff --git a/HDLSceneSiri/HDLSceneSiri/HDLRunSceneIntent.h b/HDLSceneSiri/HDLSceneSiri/HDLRunSceneIntent.h index 86ad44c..59b23b5 100644 --- a/HDLSceneSiri/HDLSceneSiri/HDLRunSceneIntent.h +++ b/HDLSceneSiri/HDLSceneSiri/HDLRunSceneIntent.h @@ -38,7 +38,7 @@ @see HDLRunSceneIntentResponse */ -- (void)handleRunScene:(HDLRunSceneIntent *)intent completion:(void (^)(HDLRunSceneIntentResponse *response))completion NS_SWIFT_NAME(handle(intent:completion:)); +- (void)handleHDLRunScene:(HDLRunSceneIntent *)intent completion:(void (^)(HDLRunSceneIntentResponse *response))completion NS_SWIFT_NAME(handle(intent:completion:)); @optional @@ -51,7 +51,7 @@ @see HDLRunSceneIntentResponse */ -- (void)confirmRunScene:(HDLRunSceneIntent *)intent completion:(void (^)(HDLRunSceneIntentResponse *response))completion NS_SWIFT_NAME(confirm(intent:completion:)); +- (void)confirmHDLRunScene:(HDLRunSceneIntent *)intent completion:(void (^)(HDLRunSceneIntentResponse *response))completion NS_SWIFT_NAME(confirm(intent:completion:)); @end diff --git a/HDLSceneSiriDemo/HDLSceneSiri/HDLSceneHandler.h b/HDLSceneSiriDemo/HDLSceneSiri/HDLSceneHandler.h new file mode 100644 index 0000000..34dace5 --- /dev/null +++ b/HDLSceneSiriDemo/HDLSceneSiri/HDLSceneHandler.h @@ -0,0 +1,16 @@ +// +// HDLSceneHandler.h +// HDLSceneSiri +// +// Created by 闄堝槈涔� on 2021/11/25. +// + +#import <Intents/Intents.h> +#import "HDLRunSceneIntent.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface HDLSceneHandler : INExtension<HDLRunSceneIntentHandling> +@end + +NS_ASSUME_NONNULL_END diff --git a/HDLSceneSiriDemo/HDLSceneSiri/HDLSceneHandler.m b/HDLSceneSiriDemo/HDLSceneSiri/HDLSceneHandler.m new file mode 100644 index 0000000..8f18005 --- /dev/null +++ b/HDLSceneSiriDemo/HDLSceneSiri/HDLSceneHandler.m @@ -0,0 +1,36 @@ +// +// HDLSceneHandler.m +// HDLSceneSiri +// +// Created by 闄堝槈涔� on 2021/11/25. +// + +#import "HDLSceneHandler.h" + +@implementation HDLSceneHandler + +// 璇ユ柟娉曟槸鍦� siri 鍖归厤鍒扮浉搴旂殑 Intent 鏃跺�欒皟鐢ㄣ�� +// 濡傛灉鐢ㄥけ璐ョ殑鏂规硶鍒濆鍖朒DLRunSceneIntentResponse锛屽湪鍖箂iri鍚庡氨浼氭姤閿� +// 涓嶇鐢ㄥ摢涓垚鍔熺殑鏂瑰紡锛屽彧鏄垵濮嬪寲鍙傛暟鐨勫�艰�屽凡锛岄兘涓�鏍� +// 姝や负绗竴閬撴嫤鎴紝濡傛灉code璁剧疆涓哄け璐ユ垨鑰呮墦寮�app锛岄偅灏辩洿鎺ュけ璐�/璺宠蛋浜嗭紝杩炲睍绀虹晫闈㈢殑鏈轰細閮芥病鏈� +// 鎵�浠ヤ竴鍗婅繖閲屽氨鐩存帴杩斿洖鎴愬姛锛岃siri缁х画寰�涓嬭蛋锛屾墦寮�鐣岄潰 +// 寤鸿锛氬彧鐢╮eday鍜宻uccess 杩欎袱涓猚ode +- (void)confirmRunScene:(HDLRunSceneIntent *)intent completion:(void (^)(HDLRunSceneIntentResponse *response))completion NS_SWIFT_NAME(confirm(intent:completion:)){ + + HDLRunSceneIntentResponse *rsp = [[HDLRunSceneIntentResponse alloc] initWithCode:HDLRunSceneIntentResponseCodeInProgress userActivity:nil]; + rsp.successMessage =@"璇风瓑寰�..."; + completion(rsp); +} + +- (void)handleHDLRunScene:(nonnull HDLRunSceneIntent *)intent completion:(nonnull void (^)(HDLRunSceneIntentResponse * _Nonnull))completion { + NSLog(@"HDL handleRunScene"); + //鎵ц鎴愬姛 + HDLRunSceneIntentResponse *rsp = [[HDLRunSceneIntentResponse alloc] initWithCode:HDLRunSceneIntentResponseCodeSuccess userActivity:nil]; + rsp.sceneName = intent.sceneName; + rsp.successMessage = @"鎵ц鎴愬姛"; + completion(rsp); + +} + + +@end diff --git a/HDLSceneSiriDemo/HDLSceneSiri/Info.plist b/HDLSceneSiriDemo/HDLSceneSiri/Info.plist new file mode 100644 index 0000000..0e75ceb --- /dev/null +++ b/HDLSceneSiriDemo/HDLSceneSiri/Info.plist @@ -0,0 +1,22 @@ +<?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>IntentsSupported</key> + <array> + <string>HDLRunSceneIntent</string> + </array> + </dict> + <key>NSExtensionPointIdentifier</key> + <string>com.apple.intents-service</string> + <key>NSExtensionPrincipalClass</key> + <string>IntentHandler</string> + </dict> +</dict> +</plist> diff --git a/HDLSceneSiriDemo/HDLSceneSiri/IntentHandler.h b/HDLSceneSiriDemo/HDLSceneSiri/IntentHandler.h new file mode 100644 index 0000000..1cec4e9 --- /dev/null +++ b/HDLSceneSiriDemo/HDLSceneSiri/IntentHandler.h @@ -0,0 +1,12 @@ +// +// IntentHandler.h +// HDLSceneSiri +// +// Created by 闄堝槈涔� on 2021/11/25. +// + +#import <Intents/Intents.h> + +@interface IntentHandler : INExtension + +@end diff --git a/HDLSceneSiriDemo/HDLSceneSiri/IntentHandler.m b/HDLSceneSiriDemo/HDLSceneSiri/IntentHandler.m new file mode 100644 index 0000000..252fa34 --- /dev/null +++ b/HDLSceneSiriDemo/HDLSceneSiri/IntentHandler.m @@ -0,0 +1,127 @@ +// +// IntentHandler.m +// HDLSceneSiri +// +// Created by 闄堝槈涔� on 2021/11/25. +// + +#import "IntentHandler.h" +#import "HDLRunSceneIntent.h" +#import "HDLSceneHandler.h" + +// As an example, this class is set up to handle Message intents. +// You will want to replace this or add other intents as appropriate. +// The intents you wish to handle must be declared in the extension's Info.plist. + +// You can test your example integration by saying things to Siri like: +// "Send a message using <myApp>" +// "<myApp> John saying hello" +// "Search for messages in <myApp>" + +@interface IntentHandler () <INSendMessageIntentHandling, INSearchForMessagesIntentHandling, INSetMessageAttributeIntentHandling> + +@end + +@implementation IntentHandler + +- (id)handlerForIntent:(INIntent *)intent { + // 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. + if (@available(iOS 12.0, *)) { + if ([intent isKindOfClass:[HDLRunSceneIntent class]]) { + return [[HDLSceneHandler alloc] init]; + } + } + + return self; +} + +#pragma mark - INSendMessageIntentHandling + +// Implement resolution methods to provide additional information about your intent (optional). +- (void)resolveRecipientsForSendMessage:(INSendMessageIntent *)intent with:(void (^)(NSArray<INSendMessageRecipientResolutionResult *> *resolutionResults))completion { + NSArray<INPerson *> *recipients = intent.recipients; + // If no recipients were provided we'll need to prompt for a value. + if (recipients.count == 0) { + completion(@[[INSendMessageRecipientResolutionResult needsValue]]); + return; + } + NSMutableArray<INSendMessageRecipientResolutionResult *> *resolutionResults = [NSMutableArray array]; + + for (INPerson *recipient in recipients) { + NSArray<INPerson *> *matchingContacts = @[recipient]; // Implement your contact matching logic here to create an array of matching contacts + if (matchingContacts.count > 1) { + // We need Siri's help to ask user to pick one from the matches. + [resolutionResults addObject:[INSendMessageRecipientResolutionResult disambiguationWithPeopleToDisambiguate:matchingContacts]]; + + } else if (matchingContacts.count == 1) { + // We have exactly one matching contact + [resolutionResults addObject:[INSendMessageRecipientResolutionResult successWithResolvedPerson:recipient]]; + } else { + // We have no contacts matching the description provided + [resolutionResults addObject:[INSendMessageRecipientResolutionResult unsupported]]; + } + } + completion(resolutionResults); +} + +- (void)resolveContentForSendMessage:(INSendMessageIntent *)intent withCompletion:(void (^)(INStringResolutionResult *resolutionResult))completion { + NSString *text = intent.content; + if (text && ![text isEqualToString:@""]) { + completion([INStringResolutionResult successWithResolvedString:text]); + } else { + completion([INStringResolutionResult needsValue]); + } +} + +// Once resolution is completed, perform validation on the intent and provide confirmation (optional). + +- (void)confirmSendMessage:(INSendMessageIntent *)intent completion:(void (^)(INSendMessageIntentResponse *response))completion { + // Verify user is authenticated and your app is ready to send a message. + + NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:NSStringFromClass([INSendMessageIntent class])]; + INSendMessageIntentResponse *response = [[INSendMessageIntentResponse alloc] initWithCode:INSendMessageIntentResponseCodeReady userActivity:userActivity]; + completion(response); +} + +// Handle the completed intent (required). + +- (void)handleSendMessage:(INSendMessageIntent *)intent completion:(void (^)(INSendMessageIntentResponse *response))completion { + // Implement your application logic to send a message here. + + NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:NSStringFromClass([INSendMessageIntent class])]; + INSendMessageIntentResponse *response = [[INSendMessageIntentResponse alloc] initWithCode:INSendMessageIntentResponseCodeSuccess userActivity:userActivity]; + completion(response); +} + +// Implement handlers for each intent you wish to handle. As an example for messages, you may wish to also handle searchForMessages and setMessageAttributes. + +#pragma mark - INSearchForMessagesIntentHandling + +- (void)handleSearchForMessages:(INSearchForMessagesIntent *)intent completion:(void (^)(INSearchForMessagesIntentResponse *response))completion { + // Implement your application logic to find a message that matches the information in the intent. + + NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:NSStringFromClass([INSearchForMessagesIntent class])]; + INSearchForMessagesIntentResponse *response = [[INSearchForMessagesIntentResponse alloc] initWithCode:INSearchForMessagesIntentResponseCodeSuccess userActivity:userActivity]; + // Initialize with found message's attributes + response.messages = @[[[INMessage alloc] + initWithIdentifier:@"identifier" + content:@"I am so excited about SiriKit!" + dateSent:[NSDate date] + sender:[[INPerson alloc] initWithPersonHandle:[[INPersonHandle alloc] initWithValue:@"sarah@example.com" type:INPersonHandleTypeEmailAddress] nameComponents:nil displayName:@"Sarah" image:nil contactIdentifier:nil customIdentifier:nil] + recipients:@[[[INPerson alloc] initWithPersonHandle:[[INPersonHandle alloc] initWithValue:@"+1-415-555-5555" type:INPersonHandleTypePhoneNumber] nameComponents:nil displayName:@"John" image:nil contactIdentifier:nil customIdentifier:nil]] + ]]; + completion(response); +} + +#pragma mark - INSetMessageAttributeIntentHandling + +- (void)handleSetMessageAttribute:(INSetMessageAttributeIntent *)intent completion:(void (^)(INSetMessageAttributeIntentResponse *response))completion { + // Implement your application logic to set the message attribute here. + + NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:NSStringFromClass([INSetMessageAttributeIntent class])]; + INSetMessageAttributeIntentResponse *response = [[INSetMessageAttributeIntentResponse alloc] initWithCode:INSetMessageAttributeIntentResponseCodeSuccess userActivity:userActivity]; + completion(response); +} + +@end diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo.xcodeproj/project.pbxproj b/HDLSceneSiriDemo/HDLSceneSiriDemo.xcodeproj/project.pbxproj index a8f9e9d..5601df4 100644 --- a/HDLSceneSiriDemo/HDLSceneSiriDemo.xcodeproj/project.pbxproj +++ b/HDLSceneSiriDemo/HDLSceneSiriDemo.xcodeproj/project.pbxproj @@ -16,13 +16,55 @@ B9595E602744D77D00948DB9 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B9595E5F2744D77D00948DB9 /* main.m */; }; B9595E6B2744D80400948DB9 /* HDLSiriSceneListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B9595E682744D80400948DB9 /* HDLSiriSceneListCell.m */; }; B9595E6C2744D80400948DB9 /* HDLSiriSceneListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B9595E6A2744D80400948DB9 /* HDLSiriSceneListViewController.m */; }; - B9595E7B2744D9D200948DB9 /* HDLRunSceneIntent.m in Sources */ = {isa = PBXBuildFile; fileRef = B9595E792744D9D200948DB9 /* HDLRunSceneIntent.m */; }; B9595E7E2744DA3B00948DB9 /* HDLSiriSceneModel.m in Sources */ = {isa = PBXBuildFile; fileRef = B9595E7D2744DA3B00948DB9 /* HDLSiriSceneModel.m */; }; B9595E812744DA7000948DB9 /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9595E802744DA7000948DB9 /* Intents.framework */; }; B9595E842744DC9000948DB9 /* HDLSceneSiri.m in Sources */ = {isa = PBXBuildFile; fileRef = B9595E832744DC8F00948DB9 /* HDLSceneSiri.m */; }; B9595E9A2744E00100948DB9 /* TopBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9595E992744E00100948DB9 /* TopBarView.m */; }; B9595E9D2744E5E900948DB9 /* IntentsUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9595E9C2744E5E900948DB9 /* IntentsUI.framework */; }; + B9DD87EB274F7B8200E37C32 /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = B9DD87EA274F7B8200E37C32 /* Intents.intentdefinition */; }; + B9DD87F1274F7CBC00E37C32 /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9595E802744DA7000948DB9 /* Intents.framework */; }; + B9DD87F5274F7CBC00E37C32 /* IntentHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = B9DD87F4274F7CBC00E37C32 /* IntentHandler.m */; }; + B9DD87FC274F7CBC00E37C32 /* IntentsUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9595E9C2744E5E900948DB9 /* IntentsUI.framework */; }; + B9DD8800274F7CBC00E37C32 /* IntentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B9DD87FF274F7CBC00E37C32 /* IntentViewController.m */; }; + B9DD8803274F7CBC00E37C32 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B9DD8801274F7CBC00E37C32 /* MainInterface.storyboard */; }; + B9DD8808274F7CBC00E37C32 /* HDLSceneSiriUI.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = B9DD87FB274F7CBC00E37C32 /* HDLSceneSiriUI.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + B9DD880B274F7CBC00E37C32 /* HDLSceneSiri.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = B9DD87F0274F7CBC00E37C32 /* HDLSceneSiri.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + B9DD8812274F7CE000E37C32 /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = B9DD87EA274F7B8200E37C32 /* Intents.intentdefinition */; }; + B9DD8813274F7CEC00E37C32 /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = B9DD87EA274F7B8200E37C32 /* Intents.intentdefinition */; }; + B9DD8816274F7D0C00E37C32 /* HDLSceneHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = B9DD8815274F7D0C00E37C32 /* HDLSceneHandler.m */; }; /* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + B9DD8805274F7CBC00E37C32 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B9595E422744D77800948DB9 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B9DD87FA274F7CBC00E37C32; + remoteInfo = HDLSceneSiriUI; + }; + B9DD8809274F7CBC00E37C32 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B9595E422744D77800948DB9 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B9DD87EF274F7CBC00E37C32; + remoteInfo = HDLSceneSiri; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + B9DD8807274F7CBC00E37C32 /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + B9DD8808274F7CBC00E37C32 /* HDLSceneSiriUI.appex in Embed App Extensions */, + B9DD880B274F7CBC00E37C32 /* HDLSceneSiri.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ B9595E4A2744D77800948DB9 /* HDLSceneSiriDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HDLSceneSiriDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -41,8 +83,6 @@ B9595E682744D80400948DB9 /* HDLSiriSceneListCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HDLSiriSceneListCell.m; sourceTree = "<group>"; }; B9595E692744D80400948DB9 /* HDLSiriSceneListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDLSiriSceneListViewController.h; sourceTree = "<group>"; }; B9595E6A2744D80400948DB9 /* HDLSiriSceneListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HDLSiriSceneListViewController.m; sourceTree = "<group>"; }; - B9595E792744D9D200948DB9 /* HDLRunSceneIntent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HDLRunSceneIntent.m; sourceTree = "<group>"; }; - B9595E7A2744D9D200948DB9 /* HDLRunSceneIntent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDLRunSceneIntent.h; sourceTree = "<group>"; }; B9595E7C2744DA3B00948DB9 /* HDLSiriSceneModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HDLSiriSceneModel.h; sourceTree = "<group>"; }; B9595E7D2744DA3B00948DB9 /* HDLSiriSceneModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HDLSiriSceneModel.m; sourceTree = "<group>"; }; B9595E802744DA7000948DB9 /* Intents.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Intents.framework; path = System/Library/Frameworks/Intents.framework; sourceTree = SDKROOT; }; @@ -52,6 +92,18 @@ B9595E992744E00100948DB9 /* TopBarView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TopBarView.m; sourceTree = "<group>"; }; B9595E9B2744E49E00948DB9 /* HDLSceneSiriDemo.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = HDLSceneSiriDemo.entitlements; sourceTree = "<group>"; }; B9595E9C2744E5E900948DB9 /* IntentsUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IntentsUI.framework; path = System/Library/Frameworks/IntentsUI.framework; sourceTree = SDKROOT; }; + B9DD87EA274F7B8200E37C32 /* Intents.intentdefinition */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.intentdefinition; path = Intents.intentdefinition; sourceTree = "<group>"; }; + B9DD87F0274F7CBC00E37C32 /* HDLSceneSiri.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = HDLSceneSiri.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + B9DD87F3274F7CBC00E37C32 /* IntentHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IntentHandler.h; sourceTree = "<group>"; }; + B9DD87F4274F7CBC00E37C32 /* IntentHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IntentHandler.m; sourceTree = "<group>"; }; + B9DD87F6274F7CBC00E37C32 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; + B9DD87FB274F7CBC00E37C32 /* HDLSceneSiriUI.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = HDLSceneSiriUI.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + B9DD87FE274F7CBC00E37C32 /* IntentViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IntentViewController.h; sourceTree = "<group>"; }; + B9DD87FF274F7CBC00E37C32 /* IntentViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IntentViewController.m; sourceTree = "<group>"; }; + B9DD8802274F7CBC00E37C32 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = "<group>"; }; + B9DD8804274F7CBC00E37C32 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; + B9DD8814274F7D0B00E37C32 /* HDLSceneHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HDLSceneHandler.h; sourceTree = "<group>"; }; + B9DD8815274F7D0C00E37C32 /* HDLSceneHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HDLSceneHandler.m; sourceTree = "<group>"; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -64,6 +116,22 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + B9DD87ED274F7CBC00E37C32 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B9DD87F1274F7CBC00E37C32 /* Intents.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B9DD87F8274F7CBC00E37C32 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B9DD87FC274F7CBC00E37C32 /* IntentsUI.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -71,6 +139,8 @@ isa = PBXGroup; children = ( B9595E4C2744D77800948DB9 /* HDLSceneSiriDemo */, + B9DD87F2274F7CBC00E37C32 /* HDLSceneSiri */, + B9DD87FD274F7CBC00E37C32 /* HDLSceneSiriUI */, B9595E4B2744D77800948DB9 /* Products */, B9595E7F2744DA6F00948DB9 /* Frameworks */, ); @@ -80,6 +150,8 @@ isa = PBXGroup; children = ( B9595E4A2744D77800948DB9 /* HDLSceneSiriDemo.app */, + B9DD87F0274F7CBC00E37C32 /* HDLSceneSiri.appex */, + B9DD87FB274F7CBC00E37C32 /* HDLSceneSiriUI.appex */, ); name = Products; sourceTree = "<group>"; @@ -87,6 +159,7 @@ B9595E4C2744D77800948DB9 /* HDLSceneSiriDemo */ = { isa = PBXGroup; children = ( + B9DD87EA274F7B8200E37C32 /* Intents.intentdefinition */, B9595E9B2744E49E00948DB9 /* HDLSceneSiriDemo.entitlements */, B9595E662744D79F00948DB9 /* HDLSceneSiri */, B9595E4D2744D77800948DB9 /* AppDelegate.h */, @@ -109,8 +182,6 @@ children = ( B9595E982744E00100948DB9 /* TopBarView.h */, B9595E992744E00100948DB9 /* TopBarView.m */, - B9595E7A2744D9D200948DB9 /* HDLRunSceneIntent.h */, - B9595E792744D9D200948DB9 /* HDLRunSceneIntent.m */, B9595E672744D80400948DB9 /* HDLSiriSceneListCell.h */, B9595E682744D80400948DB9 /* HDLSiriSceneListCell.m */, B9595E692744D80400948DB9 /* HDLSiriSceneListViewController.h */, @@ -132,6 +203,29 @@ name = Frameworks; sourceTree = "<group>"; }; + B9DD87F2274F7CBC00E37C32 /* HDLSceneSiri */ = { + isa = PBXGroup; + children = ( + B9DD87F3274F7CBC00E37C32 /* IntentHandler.h */, + B9DD87F4274F7CBC00E37C32 /* IntentHandler.m */, + B9DD87F6274F7CBC00E37C32 /* Info.plist */, + B9DD8814274F7D0B00E37C32 /* HDLSceneHandler.h */, + B9DD8815274F7D0C00E37C32 /* HDLSceneHandler.m */, + ); + path = HDLSceneSiri; + sourceTree = "<group>"; + }; + B9DD87FD274F7CBC00E37C32 /* HDLSceneSiriUI */ = { + isa = PBXGroup; + children = ( + B9DD87FE274F7CBC00E37C32 /* IntentViewController.h */, + B9DD87FF274F7CBC00E37C32 /* IntentViewController.m */, + B9DD8801274F7CBC00E37C32 /* MainInterface.storyboard */, + B9DD8804274F7CBC00E37C32 /* Info.plist */, + ); + path = HDLSceneSiriUI; + sourceTree = "<group>"; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -142,15 +236,52 @@ B9595E462744D77800948DB9 /* Sources */, B9595E472744D77800948DB9 /* Frameworks */, B9595E482744D77800948DB9 /* Resources */, + B9DD8807274F7CBC00E37C32 /* Embed App Extensions */, ); buildRules = ( ); dependencies = ( + B9DD8806274F7CBC00E37C32 /* PBXTargetDependency */, + B9DD880A274F7CBC00E37C32 /* PBXTargetDependency */, ); name = HDLSceneSiriDemo; productName = HDLSceneSiriDemo; productReference = B9595E4A2744D77800948DB9 /* HDLSceneSiriDemo.app */; productType = "com.apple.product-type.application"; + }; + B9DD87EF274F7CBC00E37C32 /* HDLSceneSiri */ = { + isa = PBXNativeTarget; + buildConfigurationList = B9DD880F274F7CBC00E37C32 /* Build configuration list for PBXNativeTarget "HDLSceneSiri" */; + buildPhases = ( + B9DD87EC274F7CBC00E37C32 /* Sources */, + B9DD87ED274F7CBC00E37C32 /* Frameworks */, + B9DD87EE274F7CBC00E37C32 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = HDLSceneSiri; + productName = HDLSceneSiri; + productReference = B9DD87F0274F7CBC00E37C32 /* HDLSceneSiri.appex */; + productType = "com.apple.product-type.app-extension"; + }; + B9DD87FA274F7CBC00E37C32 /* HDLSceneSiriUI */ = { + isa = PBXNativeTarget; + buildConfigurationList = B9DD880C274F7CBC00E37C32 /* Build configuration list for PBXNativeTarget "HDLSceneSiriUI" */; + buildPhases = ( + B9DD87F7274F7CBC00E37C32 /* Sources */, + B9DD87F8274F7CBC00E37C32 /* Frameworks */, + B9DD87F9274F7CBC00E37C32 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = HDLSceneSiriUI; + productName = HDLSceneSiriUI; + productReference = B9DD87FB274F7CBC00E37C32 /* HDLSceneSiriUI.appex */; + productType = "com.apple.product-type.app-extension"; }; /* End PBXNativeTarget section */ @@ -162,6 +293,12 @@ LastUpgradeCheck = 1300; TargetAttributes = { B9595E492744D77800948DB9 = { + CreatedOnToolsVersion = 13.0; + }; + B9DD87EF274F7CBC00E37C32 = { + CreatedOnToolsVersion = 13.0; + }; + B9DD87FA274F7CBC00E37C32 = { CreatedOnToolsVersion = 13.0; }; }; @@ -180,6 +317,8 @@ projectRoot = ""; targets = ( B9595E492744D77800948DB9 /* HDLSceneSiriDemo */, + B9DD87EF274F7CBC00E37C32 /* HDLSceneSiri */, + B9DD87FA274F7CBC00E37C32 /* HDLSceneSiriUI */, ); }; /* End PBXProject section */ @@ -195,6 +334,21 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + B9DD87EE274F7CBC00E37C32 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B9DD87F9274F7CBC00E37C32 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B9DD8803274F7CBC00E37C32 /* MainInterface.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -207,15 +361,47 @@ B9595E7E2744DA3B00948DB9 /* HDLSiriSceneModel.m in Sources */, B9595E4F2744D77800948DB9 /* AppDelegate.m in Sources */, B9595E602744D77D00948DB9 /* main.m in Sources */, - B9595E7B2744D9D200948DB9 /* HDLRunSceneIntent.m in Sources */, B9595E522744D77800948DB9 /* SceneDelegate.m in Sources */, B9595E6C2744D80400948DB9 /* HDLSiriSceneListViewController.m in Sources */, B9595E9A2744E00100948DB9 /* TopBarView.m in Sources */, + B9DD87EB274F7B8200E37C32 /* Intents.intentdefinition in Sources */, B9595E6B2744D80400948DB9 /* HDLSiriSceneListCell.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; + B9DD87EC274F7CBC00E37C32 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B9DD8816274F7D0C00E37C32 /* HDLSceneHandler.m in Sources */, + B9DD8812274F7CE000E37C32 /* Intents.intentdefinition in Sources */, + B9DD87F5274F7CBC00E37C32 /* IntentHandler.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B9DD87F7274F7CBC00E37C32 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B9DD8813274F7CEC00E37C32 /* Intents.intentdefinition in Sources */, + B9DD8800274F7CBC00E37C32 /* IntentViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + B9DD8806274F7CBC00E37C32 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B9DD87FA274F7CBC00E37C32 /* HDLSceneSiriUI */; + targetProxy = B9DD8805274F7CBC00E37C32 /* PBXContainerItemProxy */; + }; + B9DD880A274F7CBC00E37C32 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B9DD87EF274F7CBC00E37C32 /* HDLSceneSiri */; + targetProxy = B9DD8809274F7CBC00E37C32 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ B9595E562744D77800948DB9 /* Main.storyboard */ = { @@ -232,6 +418,14 @@ B9595E5C2744D77D00948DB9 /* Base */, ); name = LaunchScreen.storyboard; + sourceTree = "<group>"; + }; + B9DD8801274F7CBC00E37C32 /* MainInterface.storyboard */ = { + isa = PBXVariantGroup; + children = ( + B9DD8802274F7CBC00E37C32 /* Base */, + ); + name = MainInterface.storyboard; sourceTree = "<group>"; }; /* End PBXVariantGroup section */ @@ -405,6 +599,106 @@ }; name = Release; }; + B9DD880D274F7CBC00E37C32 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = BVTA78PRYA; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HDLSceneSiriUI/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = HDLSceneSiriUI; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.hdl.HDLSceneSiriDemo.HDLSceneSiriUI; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + B9DD880E274F7CBC00E37C32 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = BVTA78PRYA; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HDLSceneSiriUI/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = HDLSceneSiriUI; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.hdl.HDLSceneSiriDemo.HDLSceneSiriUI; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + B9DD8810274F7CBC00E37C32 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = BVTA78PRYA; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HDLSceneSiri/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = HDLSceneSiri; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.hdl.HDLSceneSiriDemo.HDLSceneSiri; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + B9DD8811274F7CBC00E37C32 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = BVTA78PRYA; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HDLSceneSiri/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = HDLSceneSiri; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.hdl.HDLSceneSiriDemo.HDLSceneSiri; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -426,6 +720,24 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + B9DD880C274F7CBC00E37C32 /* Build configuration list for PBXNativeTarget "HDLSceneSiriUI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B9DD880D274F7CBC00E37C32 /* Debug */, + B9DD880E274F7CBC00E37C32 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B9DD880F274F7CBC00E37C32 /* Build configuration list for PBXNativeTarget "HDLSceneSiri" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B9DD8810274F7CBC00E37C32 /* Debug */, + B9DD8811274F7CBC00E37C32 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = B9595E422744D77800948DB9 /* Project object */; diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/Intents.intentdefinition b/HDLSceneSiriDemo/HDLSceneSiriDemo/Intents.intentdefinition new file mode 100644 index 0000000..f49bdce --- /dev/null +++ b/HDLSceneSiriDemo/HDLSceneSiriDemo/Intents.intentdefinition @@ -0,0 +1,181 @@ +<?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>8yVV3C</string> + <key>INIntentDefinitionSystemVersion</key> + <string>20G165</string> + <key>INIntentDefinitionToolsBuildVersion</key> + <string>13A233</string> + <key>INIntentDefinitionToolsVersion</key> + <string>13.0</string> + <key>INIntents</key> + <array> + <dict> + <key>INIntentCategory</key> + <string>generic</string> + <key>INIntentDescription</key> + <string>Run Scene</string> + <key>INIntentDescriptionID</key> + <string>Pe02nj</string> + <key>INIntentLastParameterTag</key> + <integer>2</integer> + <key>INIntentName</key> + <string>HDLRunScene</string> + <key>INIntentParameterCombinations</key> + <dict> + <key>sceneName,sceneId</key> + <dict> + <key>INIntentParameterCombinationIsPrimary</key> + <true/> + <key>INIntentParameterCombinationSupportsBackgroundExecution</key> + <true/> + <key>INIntentParameterCombinationTitle</key> + <string>鎵ц鍦烘櫙鈥�${sceneName}鈥�</string> + <key>INIntentParameterCombinationTitleID</key> + <string>oCGdw4</string> + </dict> + </dict> + <key>INIntentParameters</key> + <array> + <dict> + <key>INIntentParameterDisplayName</key> + <string>Scene Name</string> + <key>INIntentParameterDisplayNameID</key> + <string>wC0SgK</string> + <key>INIntentParameterDisplayPriority</key> + <integer>1</integer> + <key>INIntentParameterMetadata</key> + <dict> + <key>INIntentParameterMetadataCapitalization</key> + <string>Sentences</string> + <key>INIntentParameterMetadataDefaultValueID</key> + <string>xz2KkJ</string> + </dict> + <key>INIntentParameterName</key> + <string>sceneName</string> + <key>INIntentParameterTag</key> + <integer>1</integer> + <key>INIntentParameterType</key> + <string>String</string> + </dict> + <dict> + <key>INIntentParameterDisplayName</key> + <string>Scene Id</string> + <key>INIntentParameterDisplayNameID</key> + <string>MtgGtd</string> + <key>INIntentParameterDisplayPriority</key> + <integer>2</integer> + <key>INIntentParameterMetadata</key> + <dict> + <key>INIntentParameterMetadataCapitalization</key> + <string>Sentences</string> + <key>INIntentParameterMetadataDefaultValueID</key> + <string>hQHCm1</string> + </dict> + <key>INIntentParameterName</key> + <string>sceneId</string> + <key>INIntentParameterTag</key> + <integer>2</integer> + <key>INIntentParameterType</key> + <string>String</string> + </dict> + </array> + <key>INIntentResponse</key> + <dict> + <key>INIntentResponseCodes</key> + <array> + <dict> + <key>INIntentResponseCodeFormatString</key> + <string>${sceneName}</string> + <key>INIntentResponseCodeFormatStringID</key> + <string>Pq8YBC</string> + <key>INIntentResponseCodeName</key> + <string>success</string> + <key>INIntentResponseCodeSuccess</key> + <true/> + </dict> + <dict> + <key>INIntentResponseCodeFormatString</key> + <string>${errorMessage}</string> + <key>INIntentResponseCodeFormatStringID</key> + <string>CX5DVI</string> + <key>INIntentResponseCodeName</key> + <string>failure</string> + </dict> + <dict> + <key>INIntentResponseCodeName</key> + <string>error</string> + <key>INIntentResponseCodeSuccess</key> + <true/> + </dict> + </array> + <key>INIntentResponseLastParameterTag</key> + <integer>3</integer> + <key>INIntentResponseParameters</key> + <array> + <dict> + <key>INIntentResponseParameterDisplayName</key> + <string>Error Message</string> + <key>INIntentResponseParameterDisplayNameID</key> + <string>HxQb2M</string> + <key>INIntentResponseParameterDisplayPriority</key> + <integer>1</integer> + <key>INIntentResponseParameterName</key> + <string>errorMessage</string> + <key>INIntentResponseParameterTag</key> + <integer>1</integer> + <key>INIntentResponseParameterType</key> + <string>String</string> + </dict> + <dict> + <key>INIntentResponseParameterDisplayName</key> + <string>Success Message</string> + <key>INIntentResponseParameterDisplayNameID</key> + <string>BaAbSP</string> + <key>INIntentResponseParameterDisplayPriority</key> + <integer>2</integer> + <key>INIntentResponseParameterName</key> + <string>successMessage</string> + <key>INIntentResponseParameterTag</key> + <integer>2</integer> + <key>INIntentResponseParameterType</key> + <string>String</string> + </dict> + <dict> + <key>INIntentResponseParameterDisplayName</key> + <string>Scene Name</string> + <key>INIntentResponseParameterDisplayNameID</key> + <string>pqg7cb</string> + <key>INIntentResponseParameterDisplayPriority</key> + <integer>3</integer> + <key>INIntentResponseParameterName</key> + <string>sceneName</string> + <key>INIntentResponseParameterTag</key> + <integer>3</integer> + <key>INIntentResponseParameterType</key> + <string>String</string> + </dict> + </array> + </dict> + <key>INIntentRestrictions</key> + <integer>1</integer> + <key>INIntentTitle</key> + <string>Run Scene</string> + <key>INIntentTitleID</key> + <string>j3jRXP</string> + <key>INIntentType</key> + <string>Custom</string> + <key>INIntentVerb</key> + <string>Do</string> + </dict> + </array> + <key>INTypes</key> + <array/> +</dict> +</plist> diff --git a/HDLSceneSiriDemo/HDLSceneSiriUI/Base.lproj/MainInterface.storyboard b/HDLSceneSiriDemo/HDLSceneSiriUI/Base.lproj/MainInterface.storyboard new file mode 100644 index 0000000..b8e2d01 --- /dev/null +++ b/HDLSceneSiriDemo/HDLSceneSiriUI/Base.lproj/MainInterface.storyboard @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19162" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="ObA-dk-sSI"> + <device id="retina6_1" orientation="portrait" appearance="light"/> + <dependencies> + <deployment identifier="iOS"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19144"/> + <capability name="Safe area layout guides" minToolsVersion="9.0"/> + <capability name="System colors in document resources" minToolsVersion="11.0"/> + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> + </dependencies> + <scenes> + <!--Intent View Controller--> + <scene sceneID="7MM-of-jgj"> + <objects> + <viewController id="ObA-dk-sSI" customClass="IntentViewController" sceneMemberID="viewController"> + <view key="view" contentMode="scaleToFill" id="zMn-AG-sqS"> + <rect key="frame" x="0.0" y="0.0" width="320" height="150"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Qr8-Ok-8TQ"> + <rect key="frame" x="0.0" y="0.0" width="320" height="150"/> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + </subviews> + <viewLayoutGuide key="safeArea" id="4PN-XC-lEE"/> + <color key="backgroundColor" systemColor="systemBackgroundColor"/> + <constraints> + <constraint firstItem="Qr8-Ok-8TQ" firstAttribute="top" secondItem="zMn-AG-sqS" secondAttribute="top" id="115-YJ-kb8"/> + <constraint firstItem="Qr8-Ok-8TQ" firstAttribute="leading" secondItem="4PN-XC-lEE" secondAttribute="leading" id="ZOP-bk-OA8"/> + <constraint firstItem="4PN-XC-lEE" firstAttribute="bottom" secondItem="Qr8-Ok-8TQ" secondAttribute="bottom" id="ati-tP-QP0"/> + <constraint firstItem="4PN-XC-lEE" firstAttribute="trailing" secondItem="Qr8-Ok-8TQ" secondAttribute="trailing" id="cHK-cQ-vse"/> + </constraints> + </view> + <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> + <size key="freeformSize" width="320" height="150"/> + <connections> + <outlet property="messageLabel" destination="Qr8-Ok-8TQ" id="7dL-Bn-nSk"/> + </connections> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="X47-rx-isc" userLabel="First Responder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="35" y="50"/> + </scene> + </scenes> + <resources> + <systemColor name="systemBackgroundColor"> + <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + </systemColor> + </resources> +</document> diff --git a/HDLSceneSiriDemo/HDLSceneSiriUI/Info.plist b/HDLSceneSiriDemo/HDLSceneSiriUI/Info.plist new file mode 100644 index 0000000..f898ab8 --- /dev/null +++ b/HDLSceneSiriDemo/HDLSceneSiriUI/Info.plist @@ -0,0 +1,20 @@ +<?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>IntentsSupported</key> + <array> + <string>HDLRunSceneIntent</string> + </array> + </dict> + <key>NSExtensionMainStoryboard</key> + <string>MainInterface</string> + <key>NSExtensionPointIdentifier</key> + <string>com.apple.intents-ui-service</string> + </dict> +</dict> +</plist> diff --git a/HDLSceneSiriDemo/HDLSceneSiriUI/IntentViewController.h b/HDLSceneSiriDemo/HDLSceneSiriUI/IntentViewController.h new file mode 100644 index 0000000..1dc33a8 --- /dev/null +++ b/HDLSceneSiriDemo/HDLSceneSiriUI/IntentViewController.h @@ -0,0 +1,13 @@ +// +// IntentViewController.h +// HDLSceneSiriUI +// +// Created by 闄堝槈涔� on 2021/11/25. +// + +#import <IntentsUI/IntentsUI.h> + +@interface IntentViewController : UIViewController <INUIHostedViewControlling> +@property (weak, nonatomic) IBOutlet UILabel *messageLabel; + +@end diff --git a/HDLSceneSiriDemo/HDLSceneSiriUI/IntentViewController.m b/HDLSceneSiriDemo/HDLSceneSiriUI/IntentViewController.m new file mode 100644 index 0000000..47d096e --- /dev/null +++ b/HDLSceneSiriDemo/HDLSceneSiriUI/IntentViewController.m @@ -0,0 +1,59 @@ +// +// IntentViewController.m +// HDLSceneSiriUI +// +// Created by 闄堝槈涔� on 2021/11/25. +// + +#import "IntentViewController.h" +#import "HDLRunSceneIntent.h" +// As an example, this extension's Info.plist has been configured to handle interactions for INSendMessageIntent. +// You will want to replace this or add other intents as appropriate. +// The intents whose interactions you wish to handle must be declared in the extension's Info.plist. + +// You can test this example integration by saying things to Siri like: +// "Send a message using <myApp>" + +@interface IntentViewController () + +@end + +@implementation IntentViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +#pragma mark - INUIHostedViewControlling + +// Prepare your view controller for the interaction to handle. +- (void)configureViewForParameters:(NSSet <INParameter *> *)parameters ofInteraction:(INInteraction *)interaction interactiveBehavior:(INUIInteractiveBehavior)interactiveBehavior context:(INUIHostedViewContext)context completion:(void (^)(BOOL success, NSSet <INParameter *> *configuredParameters, CGSize desiredSize))completion { + // Do configuration here, including preparing views and calculating a desired size for presentation. + if (@available(iOS 12.0, *)) { + HDLRunSceneIntentResponse *rsp = (HDLRunSceneIntentResponse *) interaction.intentResponse; + +// HDLRunSceneIntent *intent = (HDLRunSceneIntent *)interaction.intent; + NSLog(@"HDL code:%ld s:%@ e:%@",(long)rsp.code,rsp.successMessage,rsp.errorMessage); + // self.messageLabel.hidden = NO; + if (rsp.code == HDLRunSceneIntentResponseCodeSuccess) { + self.messageLabel.text = [NSString stringWithFormat: @"%@",rsp.successMessage]; + }else if (rsp.code == HDLRunSceneIntentResponseCodeFailure || rsp.code == HDLRunSceneIntentResponseCodeError) { + self.messageLabel.text = [NSString stringWithFormat: @"%@",rsp.errorMessage]; + }else{ + self.messageLabel.text = [NSString stringWithFormat: @"%@",rsp.successMessage]; + } + } else { + // Fallback on earlier versions + } + CGSize size = CGSizeMake([self desiredSize].width, 80); + if (completion) { + completion(YES, parameters, size); + } +} + +- (CGSize)desiredSize { + return [self extensionContext].hostedViewMaximumAllowedSize; +} + +@end diff --git a/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/ApiDefinition.cs b/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/ApiDefinition.cs index d098ab4..2905663 100644 --- a/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/ApiDefinition.cs +++ b/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/ApiDefinition.cs @@ -6,6 +6,44 @@ namespace HDLSceneSiri { + + // @interface HDLSiriSceneListViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> + [BaseType(typeof(UIViewController))] + interface HDLSiriSceneListViewController : IUITableViewDataSource, IUITableViewDelegate + { + // @property (assign, nonatomic) UITableViewStyle tableViewStyle; + [Export("tableViewStyle", ArgumentSemantic.Assign)] + UITableViewStyle TableViewStyle { get; set; } + + // @property (nonatomic, strong) UITableView * _Nonnull tableView; + [Export("tableView", ArgumentSemantic.Strong)] + UITableView TableView { get; set; } + + [Wrap("WeakDataSource")] + NSMutableArray DataSource { get; set; } + + // @property (nonatomic, strong) NSMutableArray * _Nonnull dataSource; + [NullAllowed, Export("dataSource", ArgumentSemantic.Strong)] + NSObject WeakDataSource { get; set; } + + // @property (nonatomic, strong) NSString * _Nonnull titleName; + [Export("titleName", ArgumentSemantic.Strong)] + string TitleName { get; set; } + } + + // @interface HDLSiriSceneModel : NSObject + [BaseType(typeof(NSObject))] + interface HDLSiriSceneModel + { + // @property (copy, nonatomic) NSString * _Nonnull userSceneId; + [Export("userSceneId")] + string UserSceneId { get; set; } + + // @property (copy, nonatomic) NSString * _Nonnull name; + [Export("name")] + string Name { get; set; } + } + // @interface HDLRunSceneIntent : INIntent [Watch(5, 0), NoTV, Mac(11, 0), iOS(12, 0)] [BaseType(typeof(INIntent))] @@ -35,14 +73,14 @@ [BaseType(typeof(NSObject))] interface HDLRunSceneIntentHandling { - // @required -(void)handleRunScene:(HDLRunSceneIntent * _Nonnull)intent completion:(void (^ _Nonnull)(HDLRunSceneIntentResponse * _Nonnull))completion __attribute__((swift_name("handle(intent:completion:)"))); + // @required -(void)handleHDLRunScene:(HDLRunSceneIntent * _Nonnull)intent completion:(void (^ _Nonnull)(HDLRunSceneIntentResponse * _Nonnull))completion __attribute__((swift_name("handle(intent:completion:)"))); [Abstract] - [Export("handleRunScene:completion:")] - void HandleRunScene(HDLRunSceneIntent intent, Action<HDLRunSceneIntentResponse> completion); + [Export("handleHDLRunScene:completion:")] + void HandleHDLRunScene(HDLRunSceneIntent intent, Action<HDLRunSceneIntentResponse> completion); - // @optional -(void)confirmRunScene:(HDLRunSceneIntent * _Nonnull)intent completion:(void (^ _Nonnull)(HDLRunSceneIntentResponse * _Nonnull))completion __attribute__((swift_name("confirm(intent:completion:)"))); - [Export("confirmRunScene:completion:")] - void ConfirmRunScene(HDLRunSceneIntent intent, Action<HDLRunSceneIntentResponse> completion); + // @optional -(void)confirmHDLRunScene:(HDLRunSceneIntent * _Nonnull)intent completion:(void (^ _Nonnull)(HDLRunSceneIntentResponse * _Nonnull))completion __attribute__((swift_name("confirm(intent:completion:)"))); + [Export("confirmHDLRunScene:completion:")] + void ConfirmHDLRunScene(HDLRunSceneIntent intent, Action<HDLRunSceneIntentResponse> completion); } // @interface HDLRunSceneIntentResponse : INIntentResponse @@ -81,42 +119,5 @@ // @property (readonly, nonatomic) HDLRunSceneIntentResponseCode code; [Export("code")] HDLRunSceneIntentResponseCode Code { get; } - } - - // @interface HDLSiriSceneListViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> - [BaseType(typeof(UIViewController))] - interface HDLSiriSceneListViewController : IUITableViewDataSource, IUITableViewDelegate - { - // @property (assign, nonatomic) UITableViewStyle tableViewStyle; - [Export("tableViewStyle", ArgumentSemantic.Assign)] - UITableViewStyle TableViewStyle { get; set; } - - // @property (nonatomic, strong) UITableView * _Nonnull tableView; - [Export("tableView", ArgumentSemantic.Strong)] - UITableView TableView { get; set; } - - [Wrap("WeakDataSource")] - NSMutableArray DataSource { get; set; } - - // @property (nonatomic, strong) NSMutableArray * _Nonnull dataSource; - [NullAllowed, Export("dataSource", ArgumentSemantic.Strong)] - NSObject WeakDataSource { get; set; } - - // @property (nonatomic, strong) NSString * _Nonnull titleName; - [Export("titleName", ArgumentSemantic.Strong)] - string TitleName { get; set; } - } - - // @interface HDLSiriSceneModel : NSObject - [BaseType(typeof(NSObject))] - interface HDLSiriSceneModel - { - // @property (copy, nonatomic) NSString * _Nonnull userSceneId; - [Export("userSceneId")] - string UserSceneId { get; set; } - - // @property (copy, nonatomic) NSString * _Nonnull name; - [Export("name")] - string Name { get; set; } } } diff --git a/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/Library/libHDLSceneSiri.a b/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/Library/libHDLSceneSiri.a index 39c6b9f..1d0a076 100644 --- a/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/Library/libHDLSceneSiri.a +++ b/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/Library/libHDLSceneSiri.a Binary files differ diff --git a/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/Properties/AssemblyInfo.cs b/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/Properties/AssemblyInfo.cs index 1d7393b..011bc68 100644 --- a/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/Properties/AssemblyInfo.cs +++ b/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/Properties/AssemblyInfo.cs @@ -25,7 +25,7 @@ // The form "{Major}.{Minor}.*" will automatically update the build and revision, // and "{Major}.{Minor}.{Build}.*" will update just the revision. -[assembly: AssemblyVersion("1.0.1")] +[assembly: AssemblyVersion("1.0.2")] // The following attributes are used to specify the signing key for the assembly, // if desired. See the Mono documentation for more information about signing. -- Gitblit v1.8.0