From 2e82c7f03b0833e3a149d02453d66d8db133b2ce Mon Sep 17 00:00:00 2001
From: JLChen <551775569@qq.com>
Date: 星期一, 29 十一月 2021 13:36:20 +0800
Subject: [PATCH] 2021-11-29 1.实现ON+设计的UI

---
 Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/ApiDefinition.cs                |  152 +++++--
 HDLSceneSiri/HDLSceneSiri/HDLRunSceneIntent.h                                   |   12 
 HDLSceneSiri/HDLSceneSiri/HDLRunSceneIntent.m                                   |    8 
 HDLSceneSiri/HDLSceneSiri/HDLSectionHeaderView.h                                |   19 +
 HDLSceneSiriDemo/HDLSceneSiriDemo/Info.plist                                    |    8 
 HDLSceneSiri/HDLSceneSiri/HDLSectionHeaderView.m                                |   71 +++
 HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSectionHeaderView.h           |   19 +
 HDLSceneSiriDemo/HDLSceneSiriDemo/Intents.intentdefinition                      |  106 +++++
 HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSectionHeaderView.m           |   71 +++
 HDLSceneSiriDemo/HDLSceneSiri/HDLSceneHandler.m                                 |   19 
 HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListViewController.h |    5 
 Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/Library/libHDLSceneSiri.a       |    0 
 HDLSceneSiri/HDLSceneSiri/HDLSceneSiri.h                                        |    4 
 HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListCell.m           |   58 +-
 /dev/null                                                                       |   12 
 HDLSceneSiri/HDLSceneSiri/HDLSiriShortcutModel.h                                |   29 +
 HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriShortcutModel.m           |   16 
 HDLSceneSiri/HDLSceneSiri/HDLSiriShortcutModel.m                                |   16 
 HDLSceneSiriDemo/HDLSceneSiriDemo/ViewController.m                              |   43 ++
 HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListCell.h           |   10 
 HDLSceneSiri/HDLSceneSiri.xcodeproj/project.pbxproj                             |   32 +
 HDLSceneSiri/HDLSceneSiri/TopBarView.m                                          |    2 
 HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListCell.h                                |   10 
 HDLSceneSiriDemo/HDLSceneSiri/Info.plist                                        |    4 
 HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListViewController.m |  138 +++++-
 HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListViewController.m                      |  138 +++++-
 HDLSceneSiriDemo/HDLSceneSiriDemo.xcodeproj/project.pbxproj                     |   18 
 HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriShortcutModel.h           |   29 +
 HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListCell.m                                |   58 +-
 HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSceneSiri.h                   |    2 
 Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/Properties/AssemblyInfo.cs      |    2 
 HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListViewController.h                      |    5 
 HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/TopBarView.m                     |    2 
 33 files changed, 891 insertions(+), 227 deletions(-)

diff --git a/HDLSceneSiri/HDLSceneSiri.xcodeproj/project.pbxproj b/HDLSceneSiri/HDLSceneSiri.xcodeproj/project.pbxproj
index 8be1600..4f8b898 100644
--- a/HDLSceneSiri/HDLSceneSiri.xcodeproj/project.pbxproj
+++ b/HDLSceneSiri/HDLSceneSiri.xcodeproj/project.pbxproj
@@ -11,14 +11,16 @@
 		B9D2528C2744ECAA0053C15F /* HDLSceneSiri.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = B9D252892744ECAA0053C15F /* HDLSceneSiri.h */; };
 		B9D2529C2744ECCB0053C15F /* TopBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9D252942744ECCB0053C15F /* TopBarView.m */; };
 		B9D2529D2744ECCB0053C15F /* HDLSiriSceneListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B9D252952744ECCB0053C15F /* HDLSiriSceneListCell.m */; };
-		B9D2529E2744ECCB0053C15F /* HDLSiriSceneModel.m in Sources */ = {isa = PBXBuildFile; fileRef = B9D252962744ECCB0053C15F /* HDLSiriSceneModel.m */; };
 		B9D2529F2744ECCB0053C15F /* HDLSiriSceneListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B9D252972744ECCB0053C15F /* HDLSiriSceneListViewController.m */; };
 		B9D252A02744ECCB0053C15F /* HDLRunSceneIntent.m in Sources */ = {isa = PBXBuildFile; fileRef = B9D2529B2744ECCB0053C15F /* HDLRunSceneIntent.m */; };
 		B9D252A22744ED2E0053C15F /* HDLRunSceneIntent.h in Headers */ = {isa = PBXBuildFile; fileRef = B9D252922744ECCB0053C15F /* HDLRunSceneIntent.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		B9D252A32744ED350053C15F /* HDLSiriSceneListViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = B9D252992744ECCB0053C15F /* HDLSiriSceneListViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		B9D252A42744ED380053C15F /* HDLSiriSceneModel.h in Headers */ = {isa = PBXBuildFile; fileRef = B9D252982744ECCB0053C15F /* HDLSiriSceneModel.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		B9D252A82744ED860053C15F /* IntentsUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9D252A62744ED860053C15F /* IntentsUI.framework */; };
 		B9D252A92744ED860053C15F /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9D252A72744ED860053C15F /* Intents.framework */; };
+		B9F52EA72754792F0049014D /* HDLSiriShortcutModel.h in Headers */ = {isa = PBXBuildFile; fileRef = B9F52EA32754792F0049014D /* HDLSiriShortcutModel.h */; };
+		B9F52EA82754792F0049014D /* HDLSiriShortcutModel.m in Sources */ = {isa = PBXBuildFile; fileRef = B9F52EA42754792F0049014D /* HDLSiriShortcutModel.m */; };
+		B9F52EA92754792F0049014D /* HDLSectionHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9F52EA52754792F0049014D /* HDLSectionHeaderView.m */; };
+		B9F52EAA2754792F0049014D /* HDLSectionHeaderView.h in Headers */ = {isa = PBXBuildFile; fileRef = B9F52EA62754792F0049014D /* HDLSectionHeaderView.h */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXCopyFilesBuildPhase section */
@@ -42,14 +44,16 @@
 		B9D252932744ECCB0053C15F /* HDLSiriSceneListCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDLSiriSceneListCell.h; sourceTree = "<group>"; };
 		B9D252942744ECCB0053C15F /* TopBarView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TopBarView.m; sourceTree = "<group>"; };
 		B9D252952744ECCB0053C15F /* HDLSiriSceneListCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HDLSiriSceneListCell.m; sourceTree = "<group>"; };
-		B9D252962744ECCB0053C15F /* HDLSiriSceneModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HDLSiriSceneModel.m; sourceTree = "<group>"; };
 		B9D252972744ECCB0053C15F /* HDLSiriSceneListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HDLSiriSceneListViewController.m; sourceTree = "<group>"; };
-		B9D252982744ECCB0053C15F /* HDLSiriSceneModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDLSiriSceneModel.h; sourceTree = "<group>"; };
 		B9D252992744ECCB0053C15F /* HDLSiriSceneListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDLSiriSceneListViewController.h; sourceTree = "<group>"; };
 		B9D2529A2744ECCB0053C15F /* TopBarView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TopBarView.h; sourceTree = "<group>"; };
 		B9D2529B2744ECCB0053C15F /* HDLRunSceneIntent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HDLRunSceneIntent.m; sourceTree = "<group>"; };
 		B9D252A62744ED860053C15F /* IntentsUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IntentsUI.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk/System/iOSSupport/System/Library/Frameworks/IntentsUI.framework; sourceTree = DEVELOPER_DIR; };
 		B9D252A72744ED860053C15F /* Intents.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Intents.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk/System/Library/Frameworks/Intents.framework; sourceTree = DEVELOPER_DIR; };
+		B9F52EA32754792F0049014D /* HDLSiriShortcutModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDLSiriShortcutModel.h; sourceTree = "<group>"; };
+		B9F52EA42754792F0049014D /* HDLSiriShortcutModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HDLSiriShortcutModel.m; sourceTree = "<group>"; };
+		B9F52EA52754792F0049014D /* HDLSectionHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HDLSectionHeaderView.m; sourceTree = "<group>"; };
+		B9F52EA62754792F0049014D /* HDLSectionHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDLSectionHeaderView.h; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -85,18 +89,20 @@
 		B9D252882744ECAA0053C15F /* HDLSceneSiri */ = {
 			isa = PBXGroup;
 			children = (
+				B9D252892744ECAA0053C15F /* HDLSceneSiri.h */,
+				B9D2528A2744ECAA0053C15F /* HDLSceneSiri.m */,
+				B9F52EA32754792F0049014D /* HDLSiriShortcutModel.h */,
+				B9F52EA42754792F0049014D /* HDLSiriShortcutModel.m */,
+				B9D252992744ECCB0053C15F /* HDLSiriSceneListViewController.h */,
+				B9D252972744ECCB0053C15F /* HDLSiriSceneListViewController.m */,
+				B9F52EA62754792F0049014D /* HDLSectionHeaderView.h */,
+				B9F52EA52754792F0049014D /* HDLSectionHeaderView.m */,
 				B9D252922744ECCB0053C15F /* HDLRunSceneIntent.h */,
 				B9D2529B2744ECCB0053C15F /* HDLRunSceneIntent.m */,
 				B9D252932744ECCB0053C15F /* HDLSiriSceneListCell.h */,
 				B9D252952744ECCB0053C15F /* HDLSiriSceneListCell.m */,
-				B9D252992744ECCB0053C15F /* HDLSiriSceneListViewController.h */,
-				B9D252972744ECCB0053C15F /* HDLSiriSceneListViewController.m */,
-				B9D252982744ECCB0053C15F /* HDLSiriSceneModel.h */,
-				B9D252962744ECCB0053C15F /* HDLSiriSceneModel.m */,
 				B9D2529A2744ECCB0053C15F /* TopBarView.h */,
 				B9D252942744ECCB0053C15F /* TopBarView.m */,
-				B9D252892744ECAA0053C15F /* HDLSceneSiri.h */,
-				B9D2528A2744ECAA0053C15F /* HDLSceneSiri.m */,
 			);
 			path = HDLSceneSiri;
 			sourceTree = "<group>";
@@ -118,8 +124,9 @@
 			buildActionMask = 2147483647;
 			files = (
 				B9D252A22744ED2E0053C15F /* HDLRunSceneIntent.h in Headers */,
-				B9D252A42744ED380053C15F /* HDLSiriSceneModel.h in Headers */,
+				B9F52EAA2754792F0049014D /* HDLSectionHeaderView.h in Headers */,
 				B9D252A32744ED350053C15F /* HDLSiriSceneListViewController.h in Headers */,
+				B9F52EA72754792F0049014D /* HDLSiriShortcutModel.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -181,10 +188,11 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				B9D2529E2744ECCB0053C15F /* HDLSiriSceneModel.m in Sources */,
 				B9D252A02744ECCB0053C15F /* HDLRunSceneIntent.m in Sources */,
 				B9D2529D2744ECCB0053C15F /* HDLSiriSceneListCell.m in Sources */,
 				B9D2529F2744ECCB0053C15F /* HDLSiriSceneListViewController.m in Sources */,
+				B9F52EA92754792F0049014D /* HDLSectionHeaderView.m in Sources */,
+				B9F52EA82754792F0049014D /* HDLSiriShortcutModel.m in Sources */,
 				B9D2529C2744ECCB0053C15F /* TopBarView.m in Sources */,
 				B9D2528B2744ECAA0053C15F /* HDLSceneSiri.m in Sources */,
 			);
diff --git a/HDLSceneSiri/HDLSceneSiri/HDLRunSceneIntent.h b/HDLSceneSiri/HDLSceneSiri/HDLRunSceneIntent.h
index 59b23b5..e045e16 100644
--- a/HDLSceneSiri/HDLSceneSiri/HDLRunSceneIntent.h
+++ b/HDLSceneSiri/HDLSceneSiri/HDLRunSceneIntent.h
@@ -13,8 +13,12 @@
 API_AVAILABLE(ios(12.0), macos(10.16), watchos(5.0)) API_UNAVAILABLE(tvos)
 @interface HDLRunSceneIntent : INIntent
 
-@property (readwrite, copy, nullable, nonatomic) NSString *sceneName;
-@property (readwrite, copy, nullable, nonatomic) NSString *sceneId;
+@property (readwrite, copy, nullable, nonatomic) NSString *controlName;
+@property (readwrite, copy, nullable, nonatomic) NSString *controlId;
+@property (readwrite, copy, nullable, nonatomic) NSString *homeId;
+@property (readwrite, copy, nullable, nonatomic) NSString *controlType;
+@property (readwrite, copy, nullable, nonatomic) NSString *controlJSONStr;
+@property (readwrite, copy, nullable, nonatomic) NSString *actionName;
 
 @end
 
@@ -86,7 +90,7 @@
 /*!
  @abstract Initializes and returns the response object with the success code.
  */
-+ (instancetype)successIntentResponseWithSceneName:(NSString *)sceneName NS_SWIFT_NAME(success(sceneName:));
++ (instancetype)successIntentResponseWithControlName:(NSString *)controlName NS_SWIFT_NAME(success(controlName:));
 /*!
  @abstract Initializes and returns the response object with the failure code.
  */
@@ -94,7 +98,7 @@
 
 @property (readwrite, copy, nullable, nonatomic) NSString *errorMessage;
 @property (readwrite, copy, nullable, nonatomic) NSString *successMessage;
-@property (readwrite, copy, nullable, nonatomic) NSString *sceneName;
+@property (readwrite, copy, nullable, nonatomic) NSString *controlName;
 
 /*!
  @abstract The response code indicating your success or failure in confirming or handling the intent.
diff --git a/HDLSceneSiri/HDLSceneSiri/HDLRunSceneIntent.m b/HDLSceneSiri/HDLSceneSiri/HDLRunSceneIntent.m
index 67bc037..6e42df7 100644
--- a/HDLSceneSiri/HDLSceneSiri/HDLRunSceneIntent.m
+++ b/HDLSceneSiri/HDLSceneSiri/HDLRunSceneIntent.m
@@ -10,7 +10,7 @@
 
 @implementation HDLRunSceneIntent
 
-@dynamic sceneName, sceneId;
+@dynamic controlName, controlId, homeId, controlType, controlJSONStr, actionName;
 
 @end
 
@@ -24,7 +24,7 @@
 
 @synthesize code = _code;
 
-@dynamic errorMessage, successMessage, sceneName;
+@dynamic errorMessage, successMessage, controlName;
 
 - (instancetype)initWithCode:(HDLRunSceneIntentResponseCode)code userActivity:(nullable NSUserActivity *)userActivity {
     self = [super init];
@@ -35,9 +35,9 @@
     return self;
 }
 
-+ (instancetype)successIntentResponseWithSceneName:(NSString *)sceneName {
++ (instancetype)successIntentResponseWithControlName:(NSString *)controlName {
     HDLRunSceneIntentResponse *intentResponse = [[HDLRunSceneIntentResponse alloc] initWithCode:HDLRunSceneIntentResponseCodeSuccess userActivity:nil];
-    intentResponse.sceneName = sceneName;
+    intentResponse.controlName = controlName;
     return intentResponse;
 }
 
diff --git a/HDLSceneSiri/HDLSceneSiri/HDLSceneSiri.h b/HDLSceneSiri/HDLSceneSiri/HDLSceneSiri.h
index 5ed8fd4..3074a0b 100644
--- a/HDLSceneSiri/HDLSceneSiri/HDLSceneSiri.h
+++ b/HDLSceneSiri/HDLSceneSiri/HDLSceneSiri.h
@@ -30,7 +30,7 @@
 #define WEAKSELF_AT __weak __typeof(&*self)weakSelf_AT = self;
 #define HEXCOLORA(rgbValue, a) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16)) / 255.0 green:((float)((rgbValue & 0xFF00) >> 8)) / 255.0 blue:((float)(rgbValue & 0xFF)) / 255.0 alpha:a]
 // 瀛椾綋棰滆壊
-#define COLOR_TEXT HEXCOLORA(0x222222,1.0)
+#define COLOR_TEXT HEXCOLORA(0x1B2D4D,1.0)
 
 // APP_UIFont
 #define APP_UIFont            @"PingFangSC-Regular"//鑻规柟-绠� 甯歌浣�
@@ -40,6 +40,8 @@
 #define Get_FontBoldWithSize(s) [UIFont fontWithName:APP_UIFont_BOLD size:s]
 #define Get_FontMediumWithSize(s) [UIFont fontWithName:APP_UIFont_Medium size:s]
 
+
+
 @interface HDLSceneSiri : NSObject
 
 @end
diff --git a/HDLSceneSiri/HDLSceneSiri/HDLSectionHeaderView.h b/HDLSceneSiri/HDLSceneSiri/HDLSectionHeaderView.h
new file mode 100644
index 0000000..15aed6c
--- /dev/null
+++ b/HDLSceneSiri/HDLSceneSiri/HDLSectionHeaderView.h
@@ -0,0 +1,19 @@
+//
+//  HDLSectionHeaderView.h
+//  HDLSceneSiriDemo
+//
+//  Created by 闄堝槈涔� on 2021/11/26.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+@interface HDLSectionHeaderView : UIView
+
+@property (nonatomic, strong) UILabel       *titleLabel;//鏍囬
+@property (nonatomic, strong) UILabel       *messageLabel;//鍐呭
+@property (nonatomic, strong) UIView        *lineView;//鍒嗗壊绾縑iew
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/HDLSceneSiri/HDLSceneSiri/HDLSectionHeaderView.m b/HDLSceneSiri/HDLSceneSiri/HDLSectionHeaderView.m
new file mode 100644
index 0000000..67b3371
--- /dev/null
+++ b/HDLSceneSiri/HDLSceneSiri/HDLSectionHeaderView.m
@@ -0,0 +1,71 @@
+//
+//  HDLSectionHeaderView.m
+//  HDLSceneSiriDemo
+//
+//  Created by 闄堝槈涔� on 2021/11/26.
+//
+
+#import "HDLSectionHeaderView.h"
+#import "HDLSceneSiri.h"
+
+@implementation HDLSectionHeaderView
+
+- (id)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+        self.frame = CGRectMake(0, 0, APP_SCREEN_WIDTH, 65);
+        self.backgroundColor = UIColor.whiteColor;
+        [self addSubview:self.titleLabel];
+        [self addSubview:self.messageLabel];
+        [self addSubview:self.lineView];
+    }
+    return self;
+}
+
+
+- (UILabel *)titleLabel{
+    if (!_titleLabel) {
+        _titleLabel = [self NewLabel:CGRectMake(16, 11, APP_SCREEN_WIDTH - 32, 22) font:Get_FontBoldWithSize(16) textColor:HEXCOLORA(0x4484F4, 1.0) text:@""];
+        _titleLabel.textAlignment = NSTextAlignmentLeft;
+    }
+    return _titleLabel;
+}
+
+- (UILabel *)messageLabel{
+    if (!_messageLabel) {
+        _messageLabel = [self NewLabel:CGRectMake(16, 37, APP_SCREEN_WIDTH - 32, 17) font:Get_FontWithSize(12) textColor:HEXCOLORA(0xC0C7D4, 1.0) text:@""];
+        _messageLabel.textAlignment = NSTextAlignmentLeft;
+    }
+    return _messageLabel;
+}
+
+-(UIView*)lineView{
+    if(!_lineView){
+        _lineView = [[UIView alloc]initWithFrame:CGRectMake(16, 64, APP_SCREEN_WIDTH - 16, 1)];
+        _lineView.backgroundColor = HEXCOLORA(0xECEDEE , 1.0);
+    }
+    return _lineView;
+}
+
+- (UILabel *)NewLabel:(CGRect)frame font:(UIFont *)font textColor:(UIColor *)color text:(NSString *)text{
+    UILabel *label = [[UILabel alloc] initWithFrame:frame];
+    label.backgroundColor = [UIColor clearColor];
+    label.font = font;
+    if (color != nil) {
+        label.textColor = color;
+    }
+    label.text = text;
+    
+    return label;
+}
+
+//
+-(void)backButtonClick{
+    
+}
+
+-(void)setTitle:(NSString *)title{
+    self.titleLabel.text = title;
+}
+@end
diff --git a/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListCell.h b/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListCell.h
index 7bd9ecc..23936c8 100644
--- a/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListCell.h
+++ b/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListCell.h
@@ -8,8 +8,8 @@
 #import <UIKit/UIKit.h>
 #import <Intents/Intents.h>
 #import <IntentsUI/IntentsUI.h>
+#import "HDLSiriShortcutModel.h"
 #import "HDLRunSceneIntent.h"
-#import "HDLSiriSceneModel.h"
 
 //#import <HDLSmartKit/HDLSceneModel.h>
 
@@ -18,13 +18,15 @@
 
 @interface HDLSiriSceneListCell : UITableViewCell
 
-@property (nonatomic, strong) UIView        *bgView;//鑳屾櫙View
+//@property (nonatomic, strong) UIView        *bgView;//鑳屾櫙View
 @property (nonatomic, strong) UILabel       *titleLabel;//鍦烘櫙鏍囬
+@property (nonatomic, strong) UIView        *lineView;//鍒嗗壊绾縑iew
 @property (nonatomic, strong) INUIAddVoiceShortcutButton API_AVAILABLE(ios(12.0)) *shortcutButton;//蹇嵎鎸囦护鎸夐挳
 
-@property (nonatomic, strong) HDLSiriSceneModel  *model;//鍦烘櫙model
+@property (nonatomic, strong) HDLSiriControlModel  *model;//鍦烘櫙model
+@property (nonatomic, strong) NSString *homeId;
 
--(void)initModel:(HDLSiriSceneModel *)model intent:(HDLRunSceneIntent*)intent API_AVAILABLE(ios(12.0));
+-(void)initModel:(HDLSiriControlModel *)model intent:(HDLRunSceneIntent*)intent API_AVAILABLE(ios(12.0));
 
 @end
 
diff --git a/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListCell.m b/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListCell.m
index 6640151..3400286 100644
--- a/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListCell.m
+++ b/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListCell.m
@@ -26,30 +26,39 @@
 
 ///
 - (void)addAllChildView{
-    self.backgroundColor = [UIColor clearColor];
-    self.contentView.backgroundColor = [UIColor clearColor];
-    [self.contentView addSubview:self.bgView];
-    [self.bgView addSubview:self.titleLabel];
+    self.backgroundColor = [UIColor whiteColor];
+    self.contentView.backgroundColor = [UIColor whiteColor];
+//    [self.contentView addSubview:self.bgView];
+    [self.contentView addSubview:self.titleLabel];
     if (@available(iOS 12.0, *)) {
-        [self.bgView addSubview:self.shortcutButton];
+        [self.contentView addSubview:self.shortcutButton];
     }
+    [self.contentView addSubview:self.lineView];
 }
 
--(UIView*)bgView{
-    if(!_bgView){
-        _bgView = [[UIView alloc]initWithFrame:CGRectMake(20, 6, APP_SCREEN_WIDTH - 40, 60)];
-        _bgView.backgroundColor = UIColor.whiteColor;
-        _bgView.layer.cornerRadius = 12;
-        _bgView.layer.masksToBounds = YES;// 闅愯棌杈圭晫
+//-(UIView*)bgView{
+//    if(!_bgView){
+//        _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, APP_SCREEN_WIDTH, 50)];
+//        _bgView.backgroundColor = UIColor.whiteColor;
+////        _bgView.layer.cornerRadius = 12;
+////        _bgView.layer.masksToBounds = YES;// 闅愯棌杈圭晫
+//    }
+//    return _bgView;
+//}
+-(UIView*)lineView{
+    if(!_lineView){
+        _lineView = [[UIView alloc]initWithFrame:CGRectMake(16, 49, APP_SCREEN_WIDTH - 32, 1)];
+        _lineView.backgroundColor = HEXCOLORA(0xECEDEE , 1.0);
     }
-    return _bgView;
+    return _lineView;
 }
+
 
 -(UILabel*)titleLabel{
     if(!_titleLabel){
-        _titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(6, 10, APP_SCREEN_WIDTH - 40 - 206, 40)];
+        _titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(16, 0, APP_SCREEN_WIDTH - 32 - 180, 50)];
         _titleLabel.textColor = COLOR_TEXT;
-        _titleLabel.font = Get_FontMediumWithSize(16);
+        _titleLabel.font = Get_FontMediumWithSize(14);
         _titleLabel.textAlignment = NSTextAlignmentLeft;
         _titleLabel.numberOfLines = 2;
     }
@@ -59,9 +68,10 @@
 - (INUIAddVoiceShortcutButton*)shortcutButton{
     if(!_shortcutButton){
         _shortcutButton = [[INUIAddVoiceShortcutButton alloc] initWithStyle:INUIAddVoiceShortcutButtonStyleWhite];
+//        _shortcutButton.backgroundColor = UIColor.redColor;
 //        _shortcutButton.shortcut = [[INShortcut alloc] initWithIntent:self.intent];
         _shortcutButton.translatesAutoresizingMaskIntoConstraints = YES;
-        _shortcutButton.frame = CGRectMake(APP_SCREEN_WIDTH - 40 - 150, 6, 150, 48);
+        _shortcutButton.frame = CGRectMake(APP_SCREEN_WIDTH - 160, 2, 160, 46);
         [_shortcutButton setEnabled:NO];
 //        _shortcutButton.delegate = self;
     }
@@ -76,25 +86,29 @@
 //    self.titleLabel.text = model.name;
 //}
 
--(void)initModel:(HDLSiriSceneModel *)model intent:(HDLRunSceneIntent*)intent API_AVAILABLE(ios(12.0)){
+-(void)initModel:(HDLSiriControlModel *)model intent:(HDLRunSceneIntent*)intent API_AVAILABLE(ios(12.0)){
     _model = model;
     //鍒ょ┖
     if (_model == nil) return;
     //澶勭悊model鏁版嵁
-    self.titleLabel.text = model.name;
+    self.titleLabel.text = model.controlName;
     if(intent == nil){
-        _shortcutButton.shortcut = [self getINShortcut];
+        _shortcutButton.shortcut = [self getINShortcut:_model];
     }else{
         _shortcutButton.shortcut = [[INShortcut alloc] initWithIntent:intent];
     }
 }
 
-- (INShortcut *) getINShortcut API_AVAILABLE(ios(12.0)){
-    NSString *title = _model.name;
+- (INShortcut *) getINShortcut:(HDLSiriControlModel*)sceneModel  API_AVAILABLE(ios(12.0)){
+    NSString *title = sceneModel.controlName;
     HDLRunSceneIntent *intent = [[HDLRunSceneIntent alloc] init];
-    intent.sceneId = _model.userSceneId;
     intent.suggestedInvocationPhrase = title;   //鍦⊿iri璇煶璁剧疆鏃舵樉绀虹殑寤鸿璁剧疆鍞よ捣鏂囧瓧
-    intent.sceneName = title;
+    intent.controlId = sceneModel.controlId;
+    intent.controlName = title;
+    intent.homeId = self.homeId;
+    intent.actionName = 
+    intent.controlType = sceneModel.controlType;
+    intent.controlJSONStr = sceneModel.controlJSONStr;
     INShortcut *shortCut = [[INShortcut alloc] initWithIntent:intent];
     return shortCut;
 }
diff --git a/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListViewController.h b/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListViewController.h
index 7048b2e..5ad102e 100644
--- a/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListViewController.h
+++ b/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListViewController.h
@@ -13,8 +13,11 @@
 
 @property (nonatomic, assign) UITableViewStyle       tableViewStyle;
 @property (nonatomic, strong) UITableView            *tableView;
-@property (nonatomic, strong) NSMutableArray         *dataSource;
+@property (nonatomic, strong) NSMutableArray         *dataSource;//NSArray<HDLSiriShortcutModel *>
 @property (nonatomic, strong) NSString               *titleName;
+@property (nonatomic, strong) NSString               *homeId;//浣忓畢ID
+
+
 @end
 
 NS_ASSUME_NONNULL_END
diff --git a/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListViewController.m b/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListViewController.m
index 4f27f84..1af37b7 100644
--- a/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListViewController.m
+++ b/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneListViewController.m
@@ -10,9 +10,11 @@
 #import <IntentsUI/IntentsUI.h>
 #import "HDLRunSceneIntent.h"   //涓婃柟鈥滆缃瓹ustom Intents鈥濆浘涓彸杈圭澶存寚鐨勨�淐lass Name鈥�
 #import "HDLSiriSceneListCell.h"
-#import "HDLSiriSceneModel.h"
+#import "HDLSectionHeaderView.h"
 #import "HDLSceneSiri.h"
 #import "TopBarView.h"
+#import "HDLSiriShortcutModel.h"
+
 
 NSString * const HDLSiriSceneListCellIdentifier  = @"HDLSiriSceneListCellIdentifier";
 
@@ -37,17 +39,33 @@
 - (void)viewDidLoad {
     [super viewDidLoad];
     [self.navigationController setNavigationBarHidden:YES animated:YES];
-    self.view.backgroundColor = HEXCOLORA(0xF7F7FC,1.0);
+    self.view.backgroundColor = HEXCOLORA(0xF2F3F7,1.0);
     [self initView];
     // Do any additional setup after loading the view.
 }
 
+-(void)initLlanguage{
+    NSString *languageName = [[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"] objectAtIndex:0];
+    
+    // 绠�浣撲腑鏂�
+    if ([languageName rangeOfString:@"zh-Hans"].location != NSNotFound) {
+        //鏍囬
+        if(self.titleName == nil || [self.titleName isEqual:@""]){
+            self.titleName = @"Siri蹇嵎鎸囦护";
+        }
+        
+    }else{
+        //鏍囬
+        if(self.titleName == nil || [self.titleName isEqual:@""]){
+            self.titleName = @"Siri Shortcuts";
+        }
+        
+    }
+}
+
 /// initView
 - (void)initView{
-    //鏍囬
-    if(self.titleName == nil || [self.titleName isEqual:@""]){
-        self.titleName = @"Siri蹇嵎鎸囦护";
-    }
+    [self initLlanguage];
     [self setTopBarViewWithTitle:self.titleName];
     [self initTableView];
     [self refreshSiri];
@@ -64,7 +82,7 @@
 //璁剧疆鏍囬鍜岃繑鍥炴寜閽�
 - (void)setTopBarViewWithTitle:(NSString *)title{
     [self.view addSubview:self.topBarView];
-    self.topBarView.backgroundColor = UIColor.whiteColor;
+    self.topBarView.backgroundColor = HEXCOLORA(0xF7F7F7, 1.0);
     self.topBarView.titleLabel.text = title;
 }
 //杩斿洖
@@ -74,8 +92,15 @@
     }
     else {
         [self.navigationController popViewControllerAnimated:YES];
-//        [self.navigationController popToRootViewControllerAnimated:YES];
     }
+}
+
+#pragma NSMutableArray
+- (NSMutableArray *)dataSource {
+    if (!_dataSource) {
+        _dataSource = [NSMutableArray new];
+    }
+    return _dataSource;
 }
 
 #pragma mark - UITableView
@@ -96,16 +121,59 @@
     return _tableView;
 }
 - (void)initTableView{
-    self.tableView.frame = CGRectMake(0, APP_TOP_BAR_HEIGHT + 12, APP_SCREEN_WIDTH, APP_VISIBLE_HEIGHT - APP_TAB_BOTTOM_HEIGHT-12);
+    self.tableView.frame = CGRectMake(0, APP_TOP_BAR_HEIGHT , APP_SCREEN_WIDTH, APP_VISIBLE_HEIGHT - APP_TAB_BOTTOM_HEIGHT);
 //    self.tableView.backgroundColor = HEXCOLORA(0xF7F7FC,1.0);
     [self.view addSubview:self.tableView];
     //    [self.tableView reloadData];
     
 }
+#pragma mark - 璁﹖ableView鐨勬瘡涓猻ection鐨刪eaderview闅弔ableview涓�璧锋粴鍔�
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+    if (scrollView == self.tableView)
+    {
+        CGFloat sectionHeaderHeight = 65.0f;
+        if (scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0) {
+            scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
+        } else if (scrollView.contentOffset.y>=sectionHeaderHeight) {
+            scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);
+        }
+    }
+}
 
 #pragma mark - UITableViewDataSourceXW
-- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return self.dataSource.count;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
+    return 65.0f;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
+    HDLSectionHeaderView *view = [[HDLSectionHeaderView alloc]init];
+    HDLSiriShortcutModel *model = self.dataSource[section];
+    if(model){
+        view.titleLabel.text = model.title;
+        view.messageLabel.text = model.content;
+    }
+    return view;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
+    return 8.0f;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
+    return [[UIView alloc]init];
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    HDLSiriShortcutModel *model = self.dataSource[section];
+    if(model && model.list){
+        return model.list.count;
+    }
+    return 0;
 }
 
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
@@ -114,11 +182,11 @@
     if (cell == nil) {
         cell = [[HDLSiriSceneListCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:HDLSiriSceneListCellIdentifier];
     }
-    
-    HDLSiriSceneModel *model = self.dataSource[indexPath.row];
+    cell.homeId = self.homeId;
+    HDLSiriControlModel *model = [self getModelWithNSIndexPath:indexPath];
     if(model){
         if (@available(iOS 12.0, *)) {
-            HDLRunSceneIntent *intent = [self getSceneIntent: model.userSceneId];
+            HDLRunSceneIntent *intent = [self getSceneIntent: model.controlId];
             [cell initModel:model intent:intent];
         }
     }
@@ -126,18 +194,17 @@
 }
 
 #pragma mark - UITableViewDelegate
-
 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
-    return 72;
+    return 50;
 }
 
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     [tableView deselectRowAtIndexPath:indexPath animated:YES];
     
     if (@available(iOS 12.0, *)) {
-        HDLSiriSceneModel *model = self.dataSource[indexPath.row];
+        HDLSiriControlModel *model = [self getModelWithNSIndexPath:indexPath];
         if(model){
-            INVoiceShortcut *voiceShortcut = [self getSceneINVoiceShortcut:model.userSceneId];
+            INVoiceShortcut *voiceShortcut = [self getSceneINVoiceShortcut:model.controlId];
             [self addOrEditVoiceShortcut:voiceShortcut model:model];
         }
         
@@ -145,11 +212,21 @@
     
 }
 
+/// 鏍规嵁NSIndexPath 鑾峰彇model
+/// @param indexPath indexPath
+-(HDLSiriControlModel *)getModelWithNSIndexPath:(NSIndexPath *)indexPath {
+    HDLSiriControlModel *model = nil;
+    HDLSiriShortcutModel *ssModel = self.dataSource[indexPath.section];
+    if(ssModel && ssModel.list && (ssModel.list.count > indexPath.row)){
+        model = ssModel.list[indexPath.row];
+    }
+    return model;
+}
 
 /// 娣诲姞鎴栬�呯紪杈戝揩鎹锋寚浠�
 /// @param voiceShortcut 蹇嵎鎸囦护
 /// @param model 鍦烘櫙
--(void)addOrEditVoiceShortcut:(INVoiceShortcut *)voiceShortcut model:(HDLSiriSceneModel*)model API_AVAILABLE(ios(12.0)){
+-(void)addOrEditVoiceShortcut:(INVoiceShortcut *)voiceShortcut model:(HDLSiriControlModel*)model API_AVAILABLE(ios(12.0)){
  
     if(voiceShortcut==nil){
         //1.濡傛灉涓嶅瓨鍦ㄥ垯娣诲姞
@@ -173,24 +250,29 @@
 }
 
 
-- (INShortcut *) getINShortcut:(HDLSiriSceneModel*)model API_AVAILABLE(ios(12.0)){
-    NSString *title = model.name;
+- (INShortcut *) getINShortcut:(HDLSiriControlModel*)sceneModel  API_AVAILABLE(ios(12.0)){
+    NSString *title = sceneModel.controlName;
     HDLRunSceneIntent *intent = [[HDLRunSceneIntent alloc] init];
-    intent.sceneId = model.userSceneId;
     intent.suggestedInvocationPhrase = title;   //鍦⊿iri璇煶璁剧疆鏃舵樉绀虹殑寤鸿璁剧疆鍞よ捣鏂囧瓧
-    intent.sceneName = title;
+    intent.controlId = sceneModel.controlId;
+    intent.controlName = title;
+    intent.homeId = self.homeId;
+    intent.controlType = sceneModel.controlType;
+    intent.controlJSONStr = sceneModel.controlJSONStr;
+    intent.actionName = sceneModel.actionName;
     INShortcut *shortCut = [[INShortcut alloc] initWithIntent:intent];
     return shortCut;
 }
 
+
 /// 鏍规嵁鍦烘櫙ID鎴栬�呬箣鍓嶉厤缃繃浣庡揩鎹锋寚浠�
-/// @param sceneId 鍦烘櫙ID
-- (HDLRunSceneIntent*)getSceneIntent:(NSString *)sceneId API_AVAILABLE(ios(12.0)){
+/// @param controlId 鍞竴鏍囪瘑ID
+- (HDLRunSceneIntent*)getSceneIntent:(NSString *)controlId API_AVAILABLE(ios(12.0)){
     HDLRunSceneIntent *intentFind = nil;
     for (INVoiceShortcut *voiceShortcut in self.siriShortcutList) {
         HDLRunSceneIntent *intent = (HDLRunSceneIntent *)voiceShortcut.shortcut.intent;
         if(intent){
-            if([intent.sceneId isEqualToString:sceneId]){
+            if([intent.controlId isEqualToString:controlId]){
                 intentFind = intent;
                 break;
             }
@@ -200,13 +282,13 @@
 }
 
 /// 鏍规嵁鍦烘櫙ID鎴栬�呬箣鍓嶉厤缃繃浣庡揩鎹锋寚浠�
-/// @param sceneId 鍦烘櫙ID
-- (INVoiceShortcut*)getSceneINVoiceShortcut:(NSString *)sceneId API_AVAILABLE(ios(12.0)){
+/// @param controlId 鍞竴鏍囪瘑ID
+- (INVoiceShortcut*)getSceneINVoiceShortcut:(NSString *)controlId API_AVAILABLE(ios(12.0)){
     INVoiceShortcut *voiceShortcutFind = nil;
     for (INVoiceShortcut *voiceShortcut in self.siriShortcutList) {
         HDLRunSceneIntent *intent = (HDLRunSceneIntent *)voiceShortcut.shortcut.intent;
         if(intent){
-            if([intent.sceneId isEqualToString:sceneId]){
+            if([intent.controlId isEqualToString:controlId]){
                 voiceShortcutFind = voiceShortcut;
                 break;
             }
diff --git a/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneModel.h b/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneModel.h
deleted file mode 100644
index 83ac099..0000000
--- a/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneModel.h
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-//  HDLSiriSceneModel.h
-//  HDLSceneSiriDemo
-//
-//  Created by 闄堝槈涔� on 2021/11/17.
-//
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface HDLSiriSceneModel : NSObject
-@property (nonatomic, copy)   NSString *userSceneId;
-@property (nonatomic, copy)   NSString *name;
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneModel.m b/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneModel.m
deleted file mode 100644
index 67b738f..0000000
--- a/HDLSceneSiri/HDLSceneSiri/HDLSiriSceneModel.m
+++ /dev/null
@@ -1,12 +0,0 @@
-//
-//  HDLSiriSceneModel.m
-//  HDLSceneSiriDemo
-//
-//  Created by 闄堝槈涔� on 2021/11/17.
-//
-
-#import "HDLSiriSceneModel.h"
-
-@implementation HDLSiriSceneModel
-
-@end
diff --git a/HDLSceneSiri/HDLSceneSiri/HDLSiriShortcutModel.h b/HDLSceneSiri/HDLSceneSiri/HDLSiriShortcutModel.h
new file mode 100644
index 0000000..2700d72
--- /dev/null
+++ b/HDLSceneSiri/HDLSceneSiri/HDLSiriShortcutModel.h
@@ -0,0 +1,29 @@
+//
+//  HDLSiriShortcutModel.h
+//  HDLSceneSiriDemo
+//
+//  Created by 闄堝槈涔� on 2021/11/29.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+@class HDLSiriControlModel;
+@class HDLSiriShortcutModel;
+typedef NSArray<HDLSiriShortcutModel *> HDLSiriShortcutModelList;
+
+@interface HDLSiriShortcutModel : NSObject
+@property (nonatomic, copy) NSString *title;//section Head 鐨勬爣棰�
+@property (nonatomic, copy) NSString *content;//section 鍐呭璇存槑
+@property (nonatomic, copy) NSArray<HDLSiriControlModel *> *list;//row鏁版嵁
+@end
+
+@interface HDLSiriControlModel : NSObject
+@property (nonatomic, copy) NSString *controlName;//鍦烘櫙鍚嶃�佸畨闃插悕绛�
+@property (nonatomic, copy) NSString *controlId;//鍦烘櫙ID锛屽畨闃睮D绛夊敮涓�ID
+@property (nonatomic, copy) NSString *controlType;//鍦烘櫙1锛屽畨闃�2
+@property (nonatomic, copy) NSString *controlJSONStr;//鑷畾涔夊璞SONStr
+@property (nonatomic, copy) NSString *actionName;//鍔ㄤ綔鍚嶇О锛�"鎵ц"
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/HDLSceneSiri/HDLSceneSiri/HDLSiriShortcutModel.m b/HDLSceneSiri/HDLSceneSiri/HDLSiriShortcutModel.m
new file mode 100644
index 0000000..82239af
--- /dev/null
+++ b/HDLSceneSiri/HDLSceneSiri/HDLSiriShortcutModel.m
@@ -0,0 +1,16 @@
+//
+//  HDLSiriShortcutModel.m
+//  HDLSceneSiriDemo
+//
+//  Created by 闄堝槈涔� on 2021/11/29.
+//
+
+#import "HDLSiriShortcutModel.h"
+
+@implementation HDLSiriShortcutModel
+
+@end
+
+@implementation HDLSiriControlModel
+
+@end
diff --git a/HDLSceneSiri/HDLSceneSiri/TopBarView.m b/HDLSceneSiri/HDLSceneSiri/TopBarView.m
index b41fa2d..ba0720c 100644
--- a/HDLSceneSiri/HDLSceneSiri/TopBarView.m
+++ b/HDLSceneSiri/HDLSceneSiri/TopBarView.m
@@ -40,7 +40,7 @@
 
 - (UILabel *)titleLabel{
     if (!_titleLabel) {
-        _titleLabel = [self NewLabel:CGRectMake(40, APP_STATUS_BAR_HEIGHT, APP_SCREEN_WIDTH - 80, 44) font:Get_FontMediumWithSize(16) textColor:COLOR_TEXT text:@""];
+        _titleLabel = [self NewLabel:CGRectMake(40, APP_STATUS_BAR_HEIGHT, APP_SCREEN_WIDTH - 80, 44) font:Get_FontWithSize(18) textColor:COLOR_TEXT text:@""];
         _titleLabel.textAlignment = NSTextAlignmentCenter;
     }
     return _titleLabel;
diff --git a/HDLSceneSiriDemo/HDLSceneSiri/HDLSceneHandler.m b/HDLSceneSiriDemo/HDLSceneSiri/HDLSceneHandler.m
index 8f18005..39b9b2a 100644
--- a/HDLSceneSiriDemo/HDLSceneSiri/HDLSceneHandler.m
+++ b/HDLSceneSiriDemo/HDLSceneSiri/HDLSceneHandler.m
@@ -17,6 +17,8 @@
 // 寤鸿锛氬彧鐢╮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);
@@ -24,10 +26,23 @@
 
 - (void)handleHDLRunScene:(nonnull HDLRunSceneIntent *)intent completion:(nonnull void (^)(HDLRunSceneIntentResponse * _Nonnull))completion {
     NSLog(@"HDL handleRunScene");
+    NSString *text = @"鎵ц鎴愬姛";
+  
+ 
+    NSData *jsonData = [intent.controlJSONStr dataUsingEncoding:NSUTF8StringEncoding];
+    NSError *error;
+    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
+    if (error) {
+      //瑙f瀽鍑洪敊
+    }
+    NSLog(@"dic :%@",dic);
+    text = [NSString stringWithFormat:@"%@ %@",text,intent.controlJSONStr];
+
+    
     //鎵ц鎴愬姛
     HDLRunSceneIntentResponse *rsp = [[HDLRunSceneIntentResponse alloc] initWithCode:HDLRunSceneIntentResponseCodeSuccess userActivity:nil];
-    rsp.sceneName = intent.sceneName;
-    rsp.successMessage = @"鎵ц鎴愬姛";
+    rsp.controlName = intent.controlName;
+    rsp.successMessage = text;
     completion(rsp);
     
 }
diff --git a/HDLSceneSiriDemo/HDLSceneSiri/Info.plist b/HDLSceneSiriDemo/HDLSceneSiri/Info.plist
index 0e75ceb..db11241 100644
--- a/HDLSceneSiriDemo/HDLSceneSiri/Info.plist
+++ b/HDLSceneSiriDemo/HDLSceneSiri/Info.plist
@@ -7,6 +7,10 @@
 		<key>NSExtensionAttributes</key>
 		<dict>
 			<key>IntentsRestrictedWhileLocked</key>
+			<array>
+				<string>HDLRunSceneIntent</string>
+			</array>
+			<key>IntentsRestrictedWhileProtectedDataUnavailable</key>
 			<array/>
 			<key>IntentsSupported</key>
 			<array>
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo.xcodeproj/project.pbxproj b/HDLSceneSiriDemo/HDLSceneSiriDemo.xcodeproj/project.pbxproj
index 5601df4..b77e62e 100644
--- a/HDLSceneSiriDemo/HDLSceneSiriDemo.xcodeproj/project.pbxproj
+++ b/HDLSceneSiriDemo/HDLSceneSiriDemo.xcodeproj/project.pbxproj
@@ -16,7 +16,6 @@
 		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 */; };
-		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 */; };
@@ -32,6 +31,8 @@
 		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 */; };
+		B9F52E9F2750DFE60049014D /* HDLSectionHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9F52E9E2750DFE60049014D /* HDLSectionHeaderView.m */; };
+		B9F52EA2275468950049014D /* HDLSiriShortcutModel.m in Sources */ = {isa = PBXBuildFile; fileRef = B9F52EA1275468950049014D /* HDLSiriShortcutModel.m */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -83,8 +84,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>"; };
-		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; };
 		B9595E822744DC8F00948DB9 /* HDLSceneSiri.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HDLSceneSiri.h; sourceTree = "<group>"; };
 		B9595E832744DC8F00948DB9 /* HDLSceneSiri.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HDLSceneSiri.m; sourceTree = "<group>"; };
@@ -104,6 +103,10 @@
 		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>"; };
+		B9F52E9D2750DFE60049014D /* HDLSectionHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HDLSectionHeaderView.h; sourceTree = "<group>"; };
+		B9F52E9E2750DFE60049014D /* HDLSectionHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HDLSectionHeaderView.m; sourceTree = "<group>"; };
+		B9F52EA0275468950049014D /* HDLSiriShortcutModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HDLSiriShortcutModel.h; sourceTree = "<group>"; };
+		B9F52EA1275468950049014D /* HDLSiriShortcutModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HDLSiriShortcutModel.m; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -186,10 +189,12 @@
 				B9595E682744D80400948DB9 /* HDLSiriSceneListCell.m */,
 				B9595E692744D80400948DB9 /* HDLSiriSceneListViewController.h */,
 				B9595E6A2744D80400948DB9 /* HDLSiriSceneListViewController.m */,
-				B9595E7C2744DA3B00948DB9 /* HDLSiriSceneModel.h */,
-				B9595E7D2744DA3B00948DB9 /* HDLSiriSceneModel.m */,
 				B9595E822744DC8F00948DB9 /* HDLSceneSiri.h */,
 				B9595E832744DC8F00948DB9 /* HDLSceneSiri.m */,
+				B9F52E9D2750DFE60049014D /* HDLSectionHeaderView.h */,
+				B9F52E9E2750DFE60049014D /* HDLSectionHeaderView.m */,
+				B9F52EA0275468950049014D /* HDLSiriShortcutModel.h */,
+				B9F52EA1275468950049014D /* HDLSiriShortcutModel.m */,
 			);
 			path = HDLSceneSiri;
 			sourceTree = "<group>";
@@ -356,14 +361,15 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				B9F52E9F2750DFE60049014D /* HDLSectionHeaderView.m in Sources */,
 				B9595E842744DC9000948DB9 /* HDLSceneSiri.m in Sources */,
 				B9595E552744D77800948DB9 /* ViewController.m in Sources */,
-				B9595E7E2744DA3B00948DB9 /* HDLSiriSceneModel.m in Sources */,
 				B9595E4F2744D77800948DB9 /* AppDelegate.m in Sources */,
 				B9595E602744D77D00948DB9 /* main.m in Sources */,
 				B9595E522744D77800948DB9 /* SceneDelegate.m in Sources */,
 				B9595E6C2744D80400948DB9 /* HDLSiriSceneListViewController.m in Sources */,
 				B9595E9A2744E00100948DB9 /* TopBarView.m in Sources */,
+				B9F52EA2275468950049014D /* HDLSiriShortcutModel.m in Sources */,
 				B9DD87EB274F7B8200E37C32 /* Intents.intentdefinition in Sources */,
 				B9595E6B2744D80400948DB9 /* HDLSiriSceneListCell.m in Sources */,
 			);
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLRunSceneIntent.h b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLRunSceneIntent.h
deleted file mode 100644
index 86ad44c..0000000
--- a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLRunSceneIntent.h
+++ /dev/null
@@ -1,108 +0,0 @@
-//
-// HDLRunSceneIntent.h
-//
-// This file was automatically generated and should not be edited.
-//
-
-#if __has_include(<Intents/Intents.h>)
-
-#import <Intents/Intents.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-API_AVAILABLE(ios(12.0), macos(10.16), watchos(5.0)) API_UNAVAILABLE(tvos)
-@interface HDLRunSceneIntent : INIntent
-
-@property (readwrite, copy, nullable, nonatomic) NSString *sceneName;
-@property (readwrite, copy, nullable, nonatomic) NSString *sceneId;
-
-@end
-
-@class HDLRunSceneIntentResponse;
-
-/*!
- @abstract Protocol to declare support for handling a HDLRunSceneIntent. By implementing this protocol, a class can provide logic for resolving, confirming and handling the intent.
- @discussion The minimum requirement for an implementing class is that it should be able to handle the intent. The confirmation method is optional. The handling method is always called last, after confirming the intent.
- */
-API_AVAILABLE(ios(12.0), macos(10.16), watchos(5.0)) API_UNAVAILABLE(tvos)
-@protocol HDLRunSceneIntentHandling <NSObject>
-
-@required
-
-/*!
- @abstract Handling method - Execute the task represented by the HDLRunSceneIntent that's passed in
- @discussion Called to actually execute the intent. The app must return a response for this intent.
-
- @param  intent The input intent
- @param  completion The response handling block takes a HDLRunSceneIntentResponse containing the details of the result of having executed the intent
-
- @see  HDLRunSceneIntentResponse
- */
-- (void)handleRunScene:(HDLRunSceneIntent *)intent completion:(void (^)(HDLRunSceneIntentResponse *response))completion NS_SWIFT_NAME(handle(intent:completion:));
-
-@optional
-
-/*!
- @abstract Confirmation method - Validate that this intent is ready for the next step (i.e. handling)
- @discussion Called prior to asking the app to handle the intent. The app should return a response object that contains additional information about the intent, which may be relevant for the system to show the user prior to handling. If unimplemented, the system will assume the intent is valid, and will assume there is no additional information relevant to this intent.
-
- @param  intent The input intent
- @param  completion The response block contains a HDLRunSceneIntentResponse containing additional details about the intent that may be relevant for the system to show the user prior to handling.
-
- @see HDLRunSceneIntentResponse
- */
-- (void)confirmRunScene:(HDLRunSceneIntent *)intent completion:(void (^)(HDLRunSceneIntentResponse *response))completion NS_SWIFT_NAME(confirm(intent:completion:));
-
-@end
-
-/*!
- @abstract Constants indicating the state of the response.
- */
-typedef NS_ENUM(NSInteger, HDLRunSceneIntentResponseCode) {
-    HDLRunSceneIntentResponseCodeUnspecified = 0,
-    HDLRunSceneIntentResponseCodeReady,
-    HDLRunSceneIntentResponseCodeContinueInApp,
-    HDLRunSceneIntentResponseCodeInProgress,
-    HDLRunSceneIntentResponseCodeSuccess,
-    HDLRunSceneIntentResponseCodeFailure,
-    HDLRunSceneIntentResponseCodeFailureRequiringAppLaunch,
-    HDLRunSceneIntentResponseCodeError = 100
-} API_AVAILABLE(ios(12.0), macos(10.16), watchos(5.0)) API_UNAVAILABLE(tvos);
-
-API_AVAILABLE(ios(12.0), macos(10.16), watchos(5.0)) API_UNAVAILABLE(tvos)
-@interface HDLRunSceneIntentResponse : INIntentResponse
-
-- (instancetype)init NS_UNAVAILABLE;
-
-/*!
- @abstract Initializes the response object with the specified code and user activity object.
- @discussion The app extension has the option of capturing its private state as an NSUserActivity and returning it as the 'currentActivity'. If the app is launched, an NSUserActivity will be passed in with the private state. The NSUserActivity may also be used to query the app's UI extension (if provided) for a view controller representing the current intent handling state. In the case of app launch, the NSUserActivity will have its activityType set to the name of the intent. This intent object will also be available in the NSUserActivity.interaction property.
-
- @param  code The response code indicating your success or failure in confirming or handling the intent.
- @param  userActivity The user activity object to use when launching your app. Provide an object if you want to add information that is specific to your app. If you specify nil, the system automatically creates a user activity object for you, sets its type to the class name of the intent being handled, and fills it with an INInteraction object containing the intent and your response.
- */
-- (instancetype)initWithCode:(HDLRunSceneIntentResponseCode)code userActivity:(nullable NSUserActivity *)userActivity NS_DESIGNATED_INITIALIZER;
-
-/*!
- @abstract Initializes and returns the response object with the success code.
- */
-+ (instancetype)successIntentResponseWithSceneName:(NSString *)sceneName NS_SWIFT_NAME(success(sceneName:));
-/*!
- @abstract Initializes and returns the response object with the failure code.
- */
-+ (instancetype)failureIntentResponseWithErrorMessage:(NSString *)errorMessage NS_SWIFT_NAME(failure(errorMessage:));
-
-@property (readwrite, copy, nullable, nonatomic) NSString *errorMessage;
-@property (readwrite, copy, nullable, nonatomic) NSString *successMessage;
-@property (readwrite, copy, nullable, nonatomic) NSString *sceneName;
-
-/*!
- @abstract The response code indicating your success or failure in confirming or handling the intent.
- */
-@property (readonly, NS_NONATOMIC_IOSONLY) HDLRunSceneIntentResponseCode code;
-
-@end
-
-NS_ASSUME_NONNULL_END
-
-#endif
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLRunSceneIntent.m b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLRunSceneIntent.m
deleted file mode 100644
index 67bc037..0000000
--- a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLRunSceneIntent.m
+++ /dev/null
@@ -1,52 +0,0 @@
-//
-// HDLRunSceneIntent.m
-//
-// This file was automatically generated and should not be edited.
-//
-
-#import "HDLRunSceneIntent.h"
-
-#if __has_include(<Intents/Intents.h>) && !TARGET_OS_TV
-
-@implementation HDLRunSceneIntent
-
-@dynamic sceneName, sceneId;
-
-@end
-
-@interface HDLRunSceneIntentResponse ()
-
-@property (readwrite, NS_NONATOMIC_IOSONLY) HDLRunSceneIntentResponseCode code;
-
-@end
-
-@implementation HDLRunSceneIntentResponse
-
-@synthesize code = _code;
-
-@dynamic errorMessage, successMessage, sceneName;
-
-- (instancetype)initWithCode:(HDLRunSceneIntentResponseCode)code userActivity:(nullable NSUserActivity *)userActivity {
-    self = [super init];
-    if (self) {
-        _code = code;
-        self.userActivity = userActivity;
-    }
-    return self;
-}
-
-+ (instancetype)successIntentResponseWithSceneName:(NSString *)sceneName {
-    HDLRunSceneIntentResponse *intentResponse = [[HDLRunSceneIntentResponse alloc] initWithCode:HDLRunSceneIntentResponseCodeSuccess userActivity:nil];
-    intentResponse.sceneName = sceneName;
-    return intentResponse;
-}
-
-+ (instancetype)failureIntentResponseWithErrorMessage:(NSString *)errorMessage {
-    HDLRunSceneIntentResponse *intentResponse = [[HDLRunSceneIntentResponse alloc] initWithCode:HDLRunSceneIntentResponseCodeFailure userActivity:nil];
-    intentResponse.errorMessage = errorMessage;
-    return intentResponse;
-}
-
-@end
-
-#endif
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSceneSiri.h b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSceneSiri.h
index 51650ab..3074a0b 100644
--- a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSceneSiri.h
+++ b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSceneSiri.h
@@ -30,7 +30,7 @@
 #define WEAKSELF_AT __weak __typeof(&*self)weakSelf_AT = self;
 #define HEXCOLORA(rgbValue, a) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16)) / 255.0 green:((float)((rgbValue & 0xFF00) >> 8)) / 255.0 blue:((float)(rgbValue & 0xFF)) / 255.0 alpha:a]
 // 瀛椾綋棰滆壊
-#define COLOR_TEXT HEXCOLORA(0x222222,1.0)
+#define COLOR_TEXT HEXCOLORA(0x1B2D4D,1.0)
 
 // APP_UIFont
 #define APP_UIFont            @"PingFangSC-Regular"//鑻规柟-绠� 甯歌浣�
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSectionHeaderView.h b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSectionHeaderView.h
new file mode 100644
index 0000000..15aed6c
--- /dev/null
+++ b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSectionHeaderView.h
@@ -0,0 +1,19 @@
+//
+//  HDLSectionHeaderView.h
+//  HDLSceneSiriDemo
+//
+//  Created by 闄堝槈涔� on 2021/11/26.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+@interface HDLSectionHeaderView : UIView
+
+@property (nonatomic, strong) UILabel       *titleLabel;//鏍囬
+@property (nonatomic, strong) UILabel       *messageLabel;//鍐呭
+@property (nonatomic, strong) UIView        *lineView;//鍒嗗壊绾縑iew
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSectionHeaderView.m b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSectionHeaderView.m
new file mode 100644
index 0000000..67b3371
--- /dev/null
+++ b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSectionHeaderView.m
@@ -0,0 +1,71 @@
+//
+//  HDLSectionHeaderView.m
+//  HDLSceneSiriDemo
+//
+//  Created by 闄堝槈涔� on 2021/11/26.
+//
+
+#import "HDLSectionHeaderView.h"
+#import "HDLSceneSiri.h"
+
+@implementation HDLSectionHeaderView
+
+- (id)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+        self.frame = CGRectMake(0, 0, APP_SCREEN_WIDTH, 65);
+        self.backgroundColor = UIColor.whiteColor;
+        [self addSubview:self.titleLabel];
+        [self addSubview:self.messageLabel];
+        [self addSubview:self.lineView];
+    }
+    return self;
+}
+
+
+- (UILabel *)titleLabel{
+    if (!_titleLabel) {
+        _titleLabel = [self NewLabel:CGRectMake(16, 11, APP_SCREEN_WIDTH - 32, 22) font:Get_FontBoldWithSize(16) textColor:HEXCOLORA(0x4484F4, 1.0) text:@""];
+        _titleLabel.textAlignment = NSTextAlignmentLeft;
+    }
+    return _titleLabel;
+}
+
+- (UILabel *)messageLabel{
+    if (!_messageLabel) {
+        _messageLabel = [self NewLabel:CGRectMake(16, 37, APP_SCREEN_WIDTH - 32, 17) font:Get_FontWithSize(12) textColor:HEXCOLORA(0xC0C7D4, 1.0) text:@""];
+        _messageLabel.textAlignment = NSTextAlignmentLeft;
+    }
+    return _messageLabel;
+}
+
+-(UIView*)lineView{
+    if(!_lineView){
+        _lineView = [[UIView alloc]initWithFrame:CGRectMake(16, 64, APP_SCREEN_WIDTH - 16, 1)];
+        _lineView.backgroundColor = HEXCOLORA(0xECEDEE , 1.0);
+    }
+    return _lineView;
+}
+
+- (UILabel *)NewLabel:(CGRect)frame font:(UIFont *)font textColor:(UIColor *)color text:(NSString *)text{
+    UILabel *label = [[UILabel alloc] initWithFrame:frame];
+    label.backgroundColor = [UIColor clearColor];
+    label.font = font;
+    if (color != nil) {
+        label.textColor = color;
+    }
+    label.text = text;
+    
+    return label;
+}
+
+//
+-(void)backButtonClick{
+    
+}
+
+-(void)setTitle:(NSString *)title{
+    self.titleLabel.text = title;
+}
+@end
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListCell.h b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListCell.h
index 7bd9ecc..23936c8 100644
--- a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListCell.h
+++ b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListCell.h
@@ -8,8 +8,8 @@
 #import <UIKit/UIKit.h>
 #import <Intents/Intents.h>
 #import <IntentsUI/IntentsUI.h>
+#import "HDLSiriShortcutModel.h"
 #import "HDLRunSceneIntent.h"
-#import "HDLSiriSceneModel.h"
 
 //#import <HDLSmartKit/HDLSceneModel.h>
 
@@ -18,13 +18,15 @@
 
 @interface HDLSiriSceneListCell : UITableViewCell
 
-@property (nonatomic, strong) UIView        *bgView;//鑳屾櫙View
+//@property (nonatomic, strong) UIView        *bgView;//鑳屾櫙View
 @property (nonatomic, strong) UILabel       *titleLabel;//鍦烘櫙鏍囬
+@property (nonatomic, strong) UIView        *lineView;//鍒嗗壊绾縑iew
 @property (nonatomic, strong) INUIAddVoiceShortcutButton API_AVAILABLE(ios(12.0)) *shortcutButton;//蹇嵎鎸囦护鎸夐挳
 
-@property (nonatomic, strong) HDLSiriSceneModel  *model;//鍦烘櫙model
+@property (nonatomic, strong) HDLSiriControlModel  *model;//鍦烘櫙model
+@property (nonatomic, strong) NSString *homeId;
 
--(void)initModel:(HDLSiriSceneModel *)model intent:(HDLRunSceneIntent*)intent API_AVAILABLE(ios(12.0));
+-(void)initModel:(HDLSiriControlModel *)model intent:(HDLRunSceneIntent*)intent API_AVAILABLE(ios(12.0));
 
 @end
 
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListCell.m b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListCell.m
index 6640151..3400286 100644
--- a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListCell.m
+++ b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListCell.m
@@ -26,30 +26,39 @@
 
 ///
 - (void)addAllChildView{
-    self.backgroundColor = [UIColor clearColor];
-    self.contentView.backgroundColor = [UIColor clearColor];
-    [self.contentView addSubview:self.bgView];
-    [self.bgView addSubview:self.titleLabel];
+    self.backgroundColor = [UIColor whiteColor];
+    self.contentView.backgroundColor = [UIColor whiteColor];
+//    [self.contentView addSubview:self.bgView];
+    [self.contentView addSubview:self.titleLabel];
     if (@available(iOS 12.0, *)) {
-        [self.bgView addSubview:self.shortcutButton];
+        [self.contentView addSubview:self.shortcutButton];
     }
+    [self.contentView addSubview:self.lineView];
 }
 
--(UIView*)bgView{
-    if(!_bgView){
-        _bgView = [[UIView alloc]initWithFrame:CGRectMake(20, 6, APP_SCREEN_WIDTH - 40, 60)];
-        _bgView.backgroundColor = UIColor.whiteColor;
-        _bgView.layer.cornerRadius = 12;
-        _bgView.layer.masksToBounds = YES;// 闅愯棌杈圭晫
+//-(UIView*)bgView{
+//    if(!_bgView){
+//        _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, APP_SCREEN_WIDTH, 50)];
+//        _bgView.backgroundColor = UIColor.whiteColor;
+////        _bgView.layer.cornerRadius = 12;
+////        _bgView.layer.masksToBounds = YES;// 闅愯棌杈圭晫
+//    }
+//    return _bgView;
+//}
+-(UIView*)lineView{
+    if(!_lineView){
+        _lineView = [[UIView alloc]initWithFrame:CGRectMake(16, 49, APP_SCREEN_WIDTH - 32, 1)];
+        _lineView.backgroundColor = HEXCOLORA(0xECEDEE , 1.0);
     }
-    return _bgView;
+    return _lineView;
 }
+
 
 -(UILabel*)titleLabel{
     if(!_titleLabel){
-        _titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(6, 10, APP_SCREEN_WIDTH - 40 - 206, 40)];
+        _titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(16, 0, APP_SCREEN_WIDTH - 32 - 180, 50)];
         _titleLabel.textColor = COLOR_TEXT;
-        _titleLabel.font = Get_FontMediumWithSize(16);
+        _titleLabel.font = Get_FontMediumWithSize(14);
         _titleLabel.textAlignment = NSTextAlignmentLeft;
         _titleLabel.numberOfLines = 2;
     }
@@ -59,9 +68,10 @@
 - (INUIAddVoiceShortcutButton*)shortcutButton{
     if(!_shortcutButton){
         _shortcutButton = [[INUIAddVoiceShortcutButton alloc] initWithStyle:INUIAddVoiceShortcutButtonStyleWhite];
+//        _shortcutButton.backgroundColor = UIColor.redColor;
 //        _shortcutButton.shortcut = [[INShortcut alloc] initWithIntent:self.intent];
         _shortcutButton.translatesAutoresizingMaskIntoConstraints = YES;
-        _shortcutButton.frame = CGRectMake(APP_SCREEN_WIDTH - 40 - 150, 6, 150, 48);
+        _shortcutButton.frame = CGRectMake(APP_SCREEN_WIDTH - 160, 2, 160, 46);
         [_shortcutButton setEnabled:NO];
 //        _shortcutButton.delegate = self;
     }
@@ -76,25 +86,29 @@
 //    self.titleLabel.text = model.name;
 //}
 
--(void)initModel:(HDLSiriSceneModel *)model intent:(HDLRunSceneIntent*)intent API_AVAILABLE(ios(12.0)){
+-(void)initModel:(HDLSiriControlModel *)model intent:(HDLRunSceneIntent*)intent API_AVAILABLE(ios(12.0)){
     _model = model;
     //鍒ょ┖
     if (_model == nil) return;
     //澶勭悊model鏁版嵁
-    self.titleLabel.text = model.name;
+    self.titleLabel.text = model.controlName;
     if(intent == nil){
-        _shortcutButton.shortcut = [self getINShortcut];
+        _shortcutButton.shortcut = [self getINShortcut:_model];
     }else{
         _shortcutButton.shortcut = [[INShortcut alloc] initWithIntent:intent];
     }
 }
 
-- (INShortcut *) getINShortcut API_AVAILABLE(ios(12.0)){
-    NSString *title = _model.name;
+- (INShortcut *) getINShortcut:(HDLSiriControlModel*)sceneModel  API_AVAILABLE(ios(12.0)){
+    NSString *title = sceneModel.controlName;
     HDLRunSceneIntent *intent = [[HDLRunSceneIntent alloc] init];
-    intent.sceneId = _model.userSceneId;
     intent.suggestedInvocationPhrase = title;   //鍦⊿iri璇煶璁剧疆鏃舵樉绀虹殑寤鸿璁剧疆鍞よ捣鏂囧瓧
-    intent.sceneName = title;
+    intent.controlId = sceneModel.controlId;
+    intent.controlName = title;
+    intent.homeId = self.homeId;
+    intent.actionName = 
+    intent.controlType = sceneModel.controlType;
+    intent.controlJSONStr = sceneModel.controlJSONStr;
     INShortcut *shortCut = [[INShortcut alloc] initWithIntent:intent];
     return shortCut;
 }
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListViewController.h b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListViewController.h
index 7048b2e..5ad102e 100644
--- a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListViewController.h
+++ b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListViewController.h
@@ -13,8 +13,11 @@
 
 @property (nonatomic, assign) UITableViewStyle       tableViewStyle;
 @property (nonatomic, strong) UITableView            *tableView;
-@property (nonatomic, strong) NSMutableArray         *dataSource;
+@property (nonatomic, strong) NSMutableArray         *dataSource;//NSArray<HDLSiriShortcutModel *>
 @property (nonatomic, strong) NSString               *titleName;
+@property (nonatomic, strong) NSString               *homeId;//浣忓畢ID
+
+
 @end
 
 NS_ASSUME_NONNULL_END
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListViewController.m b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListViewController.m
index 4f27f84..1af37b7 100644
--- a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListViewController.m
+++ b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneListViewController.m
@@ -10,9 +10,11 @@
 #import <IntentsUI/IntentsUI.h>
 #import "HDLRunSceneIntent.h"   //涓婃柟鈥滆缃瓹ustom Intents鈥濆浘涓彸杈圭澶存寚鐨勨�淐lass Name鈥�
 #import "HDLSiriSceneListCell.h"
-#import "HDLSiriSceneModel.h"
+#import "HDLSectionHeaderView.h"
 #import "HDLSceneSiri.h"
 #import "TopBarView.h"
+#import "HDLSiriShortcutModel.h"
+
 
 NSString * const HDLSiriSceneListCellIdentifier  = @"HDLSiriSceneListCellIdentifier";
 
@@ -37,17 +39,33 @@
 - (void)viewDidLoad {
     [super viewDidLoad];
     [self.navigationController setNavigationBarHidden:YES animated:YES];
-    self.view.backgroundColor = HEXCOLORA(0xF7F7FC,1.0);
+    self.view.backgroundColor = HEXCOLORA(0xF2F3F7,1.0);
     [self initView];
     // Do any additional setup after loading the view.
 }
 
+-(void)initLlanguage{
+    NSString *languageName = [[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"] objectAtIndex:0];
+    
+    // 绠�浣撲腑鏂�
+    if ([languageName rangeOfString:@"zh-Hans"].location != NSNotFound) {
+        //鏍囬
+        if(self.titleName == nil || [self.titleName isEqual:@""]){
+            self.titleName = @"Siri蹇嵎鎸囦护";
+        }
+        
+    }else{
+        //鏍囬
+        if(self.titleName == nil || [self.titleName isEqual:@""]){
+            self.titleName = @"Siri Shortcuts";
+        }
+        
+    }
+}
+
 /// initView
 - (void)initView{
-    //鏍囬
-    if(self.titleName == nil || [self.titleName isEqual:@""]){
-        self.titleName = @"Siri蹇嵎鎸囦护";
-    }
+    [self initLlanguage];
     [self setTopBarViewWithTitle:self.titleName];
     [self initTableView];
     [self refreshSiri];
@@ -64,7 +82,7 @@
 //璁剧疆鏍囬鍜岃繑鍥炴寜閽�
 - (void)setTopBarViewWithTitle:(NSString *)title{
     [self.view addSubview:self.topBarView];
-    self.topBarView.backgroundColor = UIColor.whiteColor;
+    self.topBarView.backgroundColor = HEXCOLORA(0xF7F7F7, 1.0);
     self.topBarView.titleLabel.text = title;
 }
 //杩斿洖
@@ -74,8 +92,15 @@
     }
     else {
         [self.navigationController popViewControllerAnimated:YES];
-//        [self.navigationController popToRootViewControllerAnimated:YES];
     }
+}
+
+#pragma NSMutableArray
+- (NSMutableArray *)dataSource {
+    if (!_dataSource) {
+        _dataSource = [NSMutableArray new];
+    }
+    return _dataSource;
 }
 
 #pragma mark - UITableView
@@ -96,16 +121,59 @@
     return _tableView;
 }
 - (void)initTableView{
-    self.tableView.frame = CGRectMake(0, APP_TOP_BAR_HEIGHT + 12, APP_SCREEN_WIDTH, APP_VISIBLE_HEIGHT - APP_TAB_BOTTOM_HEIGHT-12);
+    self.tableView.frame = CGRectMake(0, APP_TOP_BAR_HEIGHT , APP_SCREEN_WIDTH, APP_VISIBLE_HEIGHT - APP_TAB_BOTTOM_HEIGHT);
 //    self.tableView.backgroundColor = HEXCOLORA(0xF7F7FC,1.0);
     [self.view addSubview:self.tableView];
     //    [self.tableView reloadData];
     
 }
+#pragma mark - 璁﹖ableView鐨勬瘡涓猻ection鐨刪eaderview闅弔ableview涓�璧锋粴鍔�
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+    if (scrollView == self.tableView)
+    {
+        CGFloat sectionHeaderHeight = 65.0f;
+        if (scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0) {
+            scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
+        } else if (scrollView.contentOffset.y>=sectionHeaderHeight) {
+            scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);
+        }
+    }
+}
 
 #pragma mark - UITableViewDataSourceXW
-- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return self.dataSource.count;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
+    return 65.0f;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
+    HDLSectionHeaderView *view = [[HDLSectionHeaderView alloc]init];
+    HDLSiriShortcutModel *model = self.dataSource[section];
+    if(model){
+        view.titleLabel.text = model.title;
+        view.messageLabel.text = model.content;
+    }
+    return view;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
+    return 8.0f;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
+    return [[UIView alloc]init];
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    HDLSiriShortcutModel *model = self.dataSource[section];
+    if(model && model.list){
+        return model.list.count;
+    }
+    return 0;
 }
 
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
@@ -114,11 +182,11 @@
     if (cell == nil) {
         cell = [[HDLSiriSceneListCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:HDLSiriSceneListCellIdentifier];
     }
-    
-    HDLSiriSceneModel *model = self.dataSource[indexPath.row];
+    cell.homeId = self.homeId;
+    HDLSiriControlModel *model = [self getModelWithNSIndexPath:indexPath];
     if(model){
         if (@available(iOS 12.0, *)) {
-            HDLRunSceneIntent *intent = [self getSceneIntent: model.userSceneId];
+            HDLRunSceneIntent *intent = [self getSceneIntent: model.controlId];
             [cell initModel:model intent:intent];
         }
     }
@@ -126,18 +194,17 @@
 }
 
 #pragma mark - UITableViewDelegate
-
 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
-    return 72;
+    return 50;
 }
 
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     [tableView deselectRowAtIndexPath:indexPath animated:YES];
     
     if (@available(iOS 12.0, *)) {
-        HDLSiriSceneModel *model = self.dataSource[indexPath.row];
+        HDLSiriControlModel *model = [self getModelWithNSIndexPath:indexPath];
         if(model){
-            INVoiceShortcut *voiceShortcut = [self getSceneINVoiceShortcut:model.userSceneId];
+            INVoiceShortcut *voiceShortcut = [self getSceneINVoiceShortcut:model.controlId];
             [self addOrEditVoiceShortcut:voiceShortcut model:model];
         }
         
@@ -145,11 +212,21 @@
     
 }
 
+/// 鏍规嵁NSIndexPath 鑾峰彇model
+/// @param indexPath indexPath
+-(HDLSiriControlModel *)getModelWithNSIndexPath:(NSIndexPath *)indexPath {
+    HDLSiriControlModel *model = nil;
+    HDLSiriShortcutModel *ssModel = self.dataSource[indexPath.section];
+    if(ssModel && ssModel.list && (ssModel.list.count > indexPath.row)){
+        model = ssModel.list[indexPath.row];
+    }
+    return model;
+}
 
 /// 娣诲姞鎴栬�呯紪杈戝揩鎹锋寚浠�
 /// @param voiceShortcut 蹇嵎鎸囦护
 /// @param model 鍦烘櫙
--(void)addOrEditVoiceShortcut:(INVoiceShortcut *)voiceShortcut model:(HDLSiriSceneModel*)model API_AVAILABLE(ios(12.0)){
+-(void)addOrEditVoiceShortcut:(INVoiceShortcut *)voiceShortcut model:(HDLSiriControlModel*)model API_AVAILABLE(ios(12.0)){
  
     if(voiceShortcut==nil){
         //1.濡傛灉涓嶅瓨鍦ㄥ垯娣诲姞
@@ -173,24 +250,29 @@
 }
 
 
-- (INShortcut *) getINShortcut:(HDLSiriSceneModel*)model API_AVAILABLE(ios(12.0)){
-    NSString *title = model.name;
+- (INShortcut *) getINShortcut:(HDLSiriControlModel*)sceneModel  API_AVAILABLE(ios(12.0)){
+    NSString *title = sceneModel.controlName;
     HDLRunSceneIntent *intent = [[HDLRunSceneIntent alloc] init];
-    intent.sceneId = model.userSceneId;
     intent.suggestedInvocationPhrase = title;   //鍦⊿iri璇煶璁剧疆鏃舵樉绀虹殑寤鸿璁剧疆鍞よ捣鏂囧瓧
-    intent.sceneName = title;
+    intent.controlId = sceneModel.controlId;
+    intent.controlName = title;
+    intent.homeId = self.homeId;
+    intent.controlType = sceneModel.controlType;
+    intent.controlJSONStr = sceneModel.controlJSONStr;
+    intent.actionName = sceneModel.actionName;
     INShortcut *shortCut = [[INShortcut alloc] initWithIntent:intent];
     return shortCut;
 }
 
+
 /// 鏍规嵁鍦烘櫙ID鎴栬�呬箣鍓嶉厤缃繃浣庡揩鎹锋寚浠�
-/// @param sceneId 鍦烘櫙ID
-- (HDLRunSceneIntent*)getSceneIntent:(NSString *)sceneId API_AVAILABLE(ios(12.0)){
+/// @param controlId 鍞竴鏍囪瘑ID
+- (HDLRunSceneIntent*)getSceneIntent:(NSString *)controlId API_AVAILABLE(ios(12.0)){
     HDLRunSceneIntent *intentFind = nil;
     for (INVoiceShortcut *voiceShortcut in self.siriShortcutList) {
         HDLRunSceneIntent *intent = (HDLRunSceneIntent *)voiceShortcut.shortcut.intent;
         if(intent){
-            if([intent.sceneId isEqualToString:sceneId]){
+            if([intent.controlId isEqualToString:controlId]){
                 intentFind = intent;
                 break;
             }
@@ -200,13 +282,13 @@
 }
 
 /// 鏍规嵁鍦烘櫙ID鎴栬�呬箣鍓嶉厤缃繃浣庡揩鎹锋寚浠�
-/// @param sceneId 鍦烘櫙ID
-- (INVoiceShortcut*)getSceneINVoiceShortcut:(NSString *)sceneId API_AVAILABLE(ios(12.0)){
+/// @param controlId 鍞竴鏍囪瘑ID
+- (INVoiceShortcut*)getSceneINVoiceShortcut:(NSString *)controlId API_AVAILABLE(ios(12.0)){
     INVoiceShortcut *voiceShortcutFind = nil;
     for (INVoiceShortcut *voiceShortcut in self.siriShortcutList) {
         HDLRunSceneIntent *intent = (HDLRunSceneIntent *)voiceShortcut.shortcut.intent;
         if(intent){
-            if([intent.sceneId isEqualToString:sceneId]){
+            if([intent.controlId isEqualToString:controlId]){
                 voiceShortcutFind = voiceShortcut;
                 break;
             }
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneModel.h b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneModel.h
deleted file mode 100644
index 83ac099..0000000
--- a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneModel.h
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-//  HDLSiriSceneModel.h
-//  HDLSceneSiriDemo
-//
-//  Created by 闄堝槈涔� on 2021/11/17.
-//
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface HDLSiriSceneModel : NSObject
-@property (nonatomic, copy)   NSString *userSceneId;
-@property (nonatomic, copy)   NSString *name;
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneModel.m b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneModel.m
deleted file mode 100644
index 67b738f..0000000
--- a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriSceneModel.m
+++ /dev/null
@@ -1,12 +0,0 @@
-//
-//  HDLSiriSceneModel.m
-//  HDLSceneSiriDemo
-//
-//  Created by 闄堝槈涔� on 2021/11/17.
-//
-
-#import "HDLSiriSceneModel.h"
-
-@implementation HDLSiriSceneModel
-
-@end
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriShortcutModel.h b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriShortcutModel.h
new file mode 100644
index 0000000..2700d72
--- /dev/null
+++ b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriShortcutModel.h
@@ -0,0 +1,29 @@
+//
+//  HDLSiriShortcutModel.h
+//  HDLSceneSiriDemo
+//
+//  Created by 闄堝槈涔� on 2021/11/29.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+@class HDLSiriControlModel;
+@class HDLSiriShortcutModel;
+typedef NSArray<HDLSiriShortcutModel *> HDLSiriShortcutModelList;
+
+@interface HDLSiriShortcutModel : NSObject
+@property (nonatomic, copy) NSString *title;//section Head 鐨勬爣棰�
+@property (nonatomic, copy) NSString *content;//section 鍐呭璇存槑
+@property (nonatomic, copy) NSArray<HDLSiriControlModel *> *list;//row鏁版嵁
+@end
+
+@interface HDLSiriControlModel : NSObject
+@property (nonatomic, copy) NSString *controlName;//鍦烘櫙鍚嶃�佸畨闃插悕绛�
+@property (nonatomic, copy) NSString *controlId;//鍦烘櫙ID锛屽畨闃睮D绛夊敮涓�ID
+@property (nonatomic, copy) NSString *controlType;//鍦烘櫙1锛屽畨闃�2
+@property (nonatomic, copy) NSString *controlJSONStr;//鑷畾涔夊璞SONStr
+@property (nonatomic, copy) NSString *actionName;//鍔ㄤ綔鍚嶇О锛�"鎵ц"
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriShortcutModel.m b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriShortcutModel.m
new file mode 100644
index 0000000..82239af
--- /dev/null
+++ b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/HDLSiriShortcutModel.m
@@ -0,0 +1,16 @@
+//
+//  HDLSiriShortcutModel.m
+//  HDLSceneSiriDemo
+//
+//  Created by 闄堝槈涔� on 2021/11/29.
+//
+
+#import "HDLSiriShortcutModel.h"
+
+@implementation HDLSiriShortcutModel
+
+@end
+
+@implementation HDLSiriControlModel
+
+@end
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/TopBarView.m b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/TopBarView.m
index b41fa2d..ba0720c 100644
--- a/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/TopBarView.m
+++ b/HDLSceneSiriDemo/HDLSceneSiriDemo/HDLSceneSiri/TopBarView.m
@@ -40,7 +40,7 @@
 
 - (UILabel *)titleLabel{
     if (!_titleLabel) {
-        _titleLabel = [self NewLabel:CGRectMake(40, APP_STATUS_BAR_HEIGHT, APP_SCREEN_WIDTH - 80, 44) font:Get_FontMediumWithSize(16) textColor:COLOR_TEXT text:@""];
+        _titleLabel = [self NewLabel:CGRectMake(40, APP_STATUS_BAR_HEIGHT, APP_SCREEN_WIDTH - 80, 44) font:Get_FontWithSize(18) textColor:COLOR_TEXT text:@""];
         _titleLabel.textAlignment = NSTextAlignmentCenter;
     }
     return _titleLabel;
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/Info.plist b/HDLSceneSiriDemo/HDLSceneSiriDemo/Info.plist
index 001e4c2..1a2dcbe 100644
--- a/HDLSceneSiriDemo/HDLSceneSiriDemo/Info.plist
+++ b/HDLSceneSiriDemo/HDLSceneSiriDemo/Info.plist
@@ -2,6 +2,10 @@
 <!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>HDLRunSceneIntent</string>
+	</array>
 	<key>UIApplicationSceneManifest</key>
 	<dict>
 		<key>UIApplicationSupportsMultipleScenes</key>
@@ -21,9 +25,5 @@
 			</array>
 		</dict>
 	</dict>
-	<key>NSUserActivityTypes</key>
-	<array>
-		<string>HDLRunSceneIntent</string>
-	</array>
 </dict>
 </plist>
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/Intents.intentdefinition b/HDLSceneSiriDemo/HDLSceneSiriDemo/Intents.intentdefinition
index f49bdce..fbbcd16 100644
--- a/HDLSceneSiriDemo/HDLSceneSiriDemo/Intents.intentdefinition
+++ b/HDLSceneSiriDemo/HDLSceneSiriDemo/Intents.intentdefinition
@@ -24,28 +24,28 @@
 			<key>INIntentDescriptionID</key>
 			<string>Pe02nj</string>
 			<key>INIntentLastParameterTag</key>
-			<integer>2</integer>
+			<integer>22</integer>
 			<key>INIntentName</key>
 			<string>HDLRunScene</string>
 			<key>INIntentParameterCombinations</key>
 			<dict>
-				<key>sceneName,sceneId</key>
+				<key>controlName,controlId,controlType,controlJSONStr,actionName,homeId</key>
 				<dict>
 					<key>INIntentParameterCombinationIsPrimary</key>
 					<true/>
 					<key>INIntentParameterCombinationSupportsBackgroundExecution</key>
 					<true/>
 					<key>INIntentParameterCombinationTitle</key>
-					<string>鎵ц鍦烘櫙鈥�${sceneName}鈥�</string>
+					<string>${actionName}鈥�${controlName}鈥�</string>
 					<key>INIntentParameterCombinationTitleID</key>
-					<string>oCGdw4</string>
+					<string>3GPMaH</string>
 				</dict>
 			</dict>
 			<key>INIntentParameters</key>
 			<array>
 				<dict>
 					<key>INIntentParameterDisplayName</key>
-					<string>Scene Name</string>
+					<string>Control Name</string>
 					<key>INIntentParameterDisplayNameID</key>
 					<string>wC0SgK</string>
 					<key>INIntentParameterDisplayPriority</key>
@@ -58,7 +58,7 @@
 						<string>xz2KkJ</string>
 					</dict>
 					<key>INIntentParameterName</key>
-					<string>sceneName</string>
+					<string>controlName</string>
 					<key>INIntentParameterTag</key>
 					<integer>1</integer>
 					<key>INIntentParameterType</key>
@@ -66,7 +66,7 @@
 				</dict>
 				<dict>
 					<key>INIntentParameterDisplayName</key>
-					<string>Scene Id</string>
+					<string>Control Id</string>
 					<key>INIntentParameterDisplayNameID</key>
 					<string>MtgGtd</string>
 					<key>INIntentParameterDisplayPriority</key>
@@ -79,9 +79,93 @@
 						<string>hQHCm1</string>
 					</dict>
 					<key>INIntentParameterName</key>
-					<string>sceneId</string>
+					<string>controlId</string>
 					<key>INIntentParameterTag</key>
 					<integer>2</integer>
+					<key>INIntentParameterType</key>
+					<string>String</string>
+				</dict>
+				<dict>
+					<key>INIntentParameterDisplayName</key>
+					<string>Home Id</string>
+					<key>INIntentParameterDisplayNameID</key>
+					<string>Re9KKp</string>
+					<key>INIntentParameterDisplayPriority</key>
+					<integer>3</integer>
+					<key>INIntentParameterMetadata</key>
+					<dict>
+						<key>INIntentParameterMetadataCapitalization</key>
+						<string>Sentences</string>
+						<key>INIntentParameterMetadataDefaultValueID</key>
+						<string>mQMSns</string>
+					</dict>
+					<key>INIntentParameterName</key>
+					<string>homeId</string>
+					<key>INIntentParameterTag</key>
+					<integer>12</integer>
+					<key>INIntentParameterType</key>
+					<string>String</string>
+				</dict>
+				<dict>
+					<key>INIntentParameterDisplayName</key>
+					<string>Control Type</string>
+					<key>INIntentParameterDisplayNameID</key>
+					<string>TBoK4E</string>
+					<key>INIntentParameterDisplayPriority</key>
+					<integer>4</integer>
+					<key>INIntentParameterMetadata</key>
+					<dict>
+						<key>INIntentParameterMetadataCapitalization</key>
+						<string>Sentences</string>
+						<key>INIntentParameterMetadataDefaultValueID</key>
+						<string>Yg2EJK</string>
+					</dict>
+					<key>INIntentParameterName</key>
+					<string>controlType</string>
+					<key>INIntentParameterTag</key>
+					<integer>14</integer>
+					<key>INIntentParameterType</key>
+					<string>String</string>
+				</dict>
+				<dict>
+					<key>INIntentParameterDisplayName</key>
+					<string>Control JSON Str</string>
+					<key>INIntentParameterDisplayNameID</key>
+					<string>WYEDs9</string>
+					<key>INIntentParameterDisplayPriority</key>
+					<integer>5</integer>
+					<key>INIntentParameterMetadata</key>
+					<dict>
+						<key>INIntentParameterMetadataCapitalization</key>
+						<string>Sentences</string>
+						<key>INIntentParameterMetadataDefaultValueID</key>
+						<string>WXdhpn</string>
+					</dict>
+					<key>INIntentParameterName</key>
+					<string>controlJSONStr</string>
+					<key>INIntentParameterTag</key>
+					<integer>21</integer>
+					<key>INIntentParameterType</key>
+					<string>String</string>
+				</dict>
+				<dict>
+					<key>INIntentParameterDisplayName</key>
+					<string>Action Name</string>
+					<key>INIntentParameterDisplayNameID</key>
+					<string>sB0JdL</string>
+					<key>INIntentParameterDisplayPriority</key>
+					<integer>6</integer>
+					<key>INIntentParameterMetadata</key>
+					<dict>
+						<key>INIntentParameterMetadataCapitalization</key>
+						<string>Sentences</string>
+						<key>INIntentParameterMetadataDefaultValueID</key>
+						<string>nGpmbm</string>
+					</dict>
+					<key>INIntentParameterName</key>
+					<string>actionName</string>
+					<key>INIntentParameterTag</key>
+					<integer>22</integer>
 					<key>INIntentParameterType</key>
 					<string>String</string>
 				</dict>
@@ -92,7 +176,7 @@
 				<array>
 					<dict>
 						<key>INIntentResponseCodeFormatString</key>
-						<string>${sceneName}</string>
+						<string>${controlName}</string>
 						<key>INIntentResponseCodeFormatStringID</key>
 						<string>Pq8YBC</string>
 						<key>INIntentResponseCodeName</key>
@@ -149,13 +233,13 @@
 					</dict>
 					<dict>
 						<key>INIntentResponseParameterDisplayName</key>
-						<string>Scene Name</string>
+						<string>Control Name</string>
 						<key>INIntentResponseParameterDisplayNameID</key>
 						<string>pqg7cb</string>
 						<key>INIntentResponseParameterDisplayPriority</key>
 						<integer>3</integer>
 						<key>INIntentResponseParameterName</key>
-						<string>sceneName</string>
+						<string>controlName</string>
 						<key>INIntentResponseParameterTag</key>
 						<integer>3</integer>
 						<key>INIntentResponseParameterType</key>
diff --git a/HDLSceneSiriDemo/HDLSceneSiriDemo/ViewController.m b/HDLSceneSiriDemo/HDLSceneSiriDemo/ViewController.m
index fbdc1ab..d9884f6 100644
--- a/HDLSceneSiriDemo/HDLSceneSiriDemo/ViewController.m
+++ b/HDLSceneSiriDemo/HDLSceneSiriDemo/ViewController.m
@@ -7,7 +7,7 @@
 
 #import "ViewController.h"
 #import "HDLSiriSceneListViewController.h"
-#import "HDLSiriSceneModel.h"
+#import "HDLSiriShortcutModel.h"
 
 @interface ViewController ()
 
@@ -21,16 +21,49 @@
 }
 
 -(void)gotoSiriSceneListViewController{
+    
+    
+    NSMutableArray *dataList =  [NSMutableArray new];
+    //1.鍦烘櫙
+    HDLSiriShortcutModel *sceneModel = [[HDLSiriShortcutModel alloc] init];
+    sceneModel.title = @"鍦烘櫙";
+    sceneModel.content = @"灏嗗満鏅坊鍔犲埌Siri鎹峰緞锛屽嵆鍙�氳繃Siri璇煶鎵ц";
     NSMutableArray *list =  [NSMutableArray new];
     for(int i = 0; i<10; i++){
-        HDLSiriSceneModel *model = [[HDLSiriSceneModel alloc] init];
-        model.name = [NSString stringWithFormat:@"鍥炲妯″紡%d",i];
-        model.userSceneId = [NSString stringWithFormat:@"userSceneId%d",i];
+        HDLSiriControlModel *model = [[HDLSiriControlModel alloc] init];
+        model.controlType = @"1";
+        model.controlName = [NSString stringWithFormat:@"鍥炲妯″紡%d",i];
+        model.controlId = [NSString stringWithFormat:@"userSceneId%d",i];
+        model.actionName = @"鎵ц鍦烘櫙";
+        model.controlJSONStr = @"2";
         [list addObject:model];
     }
+    sceneModel.list = [NSArray arrayWithArray:list];
+    [dataList addObject:sceneModel];
+
+    //2.瀹夐槻
+    HDLSiriShortcutModel *securityModel = [[HDLSiriShortcutModel alloc] init];
+    securityModel.title = @"瀹夐槻";
+    securityModel.content =@"灏嗗畨闃叉坊鍔犲埌Siri鎹峰緞锛屽嵆鍙�氳繃Siri璇煶鎵ц";
+    NSMutableArray *list2 =  [NSMutableArray new];
+    for(int i = 0; i<10; i++){
+        HDLSiriControlModel *model = [[HDLSiriControlModel alloc] init];
+        model.controlType = @"2";
+        model.controlName = [NSString stringWithFormat:@"澶栧嚭甯冮槻%d",i];
+        model.controlId = [NSString stringWithFormat:@"usecurityId%d",i];
+        model.actionName = @"鎵ц瀹夐槻";
+        model.controlJSONStr = @"{\"userSecurityId\":\"111111111\",\"gatewayId\":\"2222222\",\"sid\":\"333333\",\"status\":\"enable\"}";
+//        model.sid = [NSString stringWithFormat:@"securityId%d",i];
+        [list2 addObject:model];
+    }
+    securityModel.list = [NSArray arrayWithArray:list2];
+    [dataList addObject:securityModel];
+    
+
     
     HDLSiriSceneListViewController *vc = [[HDLSiriSceneListViewController alloc] init];
-    vc.dataSource = list;
+    vc.dataSource = dataList;
+    vc.homeId = @"000000";
     [self.navigationController pushViewController:vc animated:YES];
     
 }
diff --git a/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/ApiDefinition.cs b/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/ApiDefinition.cs
index 38b1264..c334d7e 100644
--- a/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/ApiDefinition.cs
+++ b/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/ApiDefinition.cs
@@ -6,56 +6,35 @@
 
 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))]
 	interface HDLRunSceneIntent
 	{
-		// @property (readwrite, copy, nonatomic) NSString * _Nullable sceneName;
-		[NullAllowed, Export("sceneName")]
-		string SceneName { get; set; }
+		// @property (readwrite, copy, nonatomic) NSString * _Nullable controlName;
+		[NullAllowed, Export("controlName")]
+		string ControlName { get; set; }
 
-		// @property (readwrite, copy, nonatomic) NSString * _Nullable sceneId;
-		[NullAllowed, Export("sceneId")]
-		string SceneId { get; set; }
+		// @property (readwrite, copy, nonatomic) NSString * _Nullable controlId;
+		[NullAllowed, Export("controlId")]
+		string ControlId { get; set; }
+
+		// @property (readwrite, copy, nonatomic) NSString * _Nullable homeId;
+		[NullAllowed, Export("homeId")]
+		string HomeId { get; set; }
+
+		// @property (readwrite, copy, nonatomic) NSString * _Nullable controlType;
+		[NullAllowed, Export("controlType")]
+		string ControlType { get; set; }
+
+		// @property (readwrite, copy, nonatomic) NSString * _Nullable controlJSONStr;
+		[NullAllowed, Export("controlJSONStr")]
+		string ControlJSONStr { get; set; }
+
+		// @property (readwrite, copy, nonatomic) NSString * _Nullable actionName;
+		[NullAllowed, Export("actionName")]
+		string ActionName { get; set; }
 	}
 
 	// @protocol HDLRunSceneIntentHandling <NSObject>
@@ -68,11 +47,10 @@
   protocol, then [Model] is redundant and will generate code that will never
   be used.
 */
-
 	//[Watch(5, 0), NoTV, Mac(11, 0), iOS(12, 0)]
 	//[Protocol]
-    [Protocol, Model]
-    [BaseType(typeof(NSObject))]
+	[Protocol, Model]
+	[BaseType(typeof(NSObject))]
 	interface HDLRunSceneIntentHandling
 	{
 		// @required -(void)handleHDLRunScene:(HDLRunSceneIntent * _Nonnull)intent completion:(void (^ _Nonnull)(HDLRunSceneIntentResponse * _Nonnull))completion __attribute__((swift_name("handle(intent:completion:)")));
@@ -96,10 +74,10 @@
 		[DesignatedInitializer]
 		IntPtr Constructor(HDLRunSceneIntentResponseCode code, [NullAllowed] NSUserActivity userActivity);
 
-		// +(instancetype _Nonnull)successIntentResponseWithSceneName:(NSString * _Nonnull)sceneName __attribute__((swift_name("success(sceneName:)")));
+		// +(instancetype _Nonnull)successIntentResponseWithControlName:(NSString * _Nonnull)controlName __attribute__((swift_name("success(controlName:)")));
 		[Static]
-		[Export("successIntentResponseWithSceneName:")]
-		HDLRunSceneIntentResponse SuccessIntentResponseWithSceneName(string sceneName);
+		[Export("successIntentResponseWithControlName:")]
+		HDLRunSceneIntentResponse SuccessIntentResponseWithControlName(string controlName);
 
 		// +(instancetype _Nonnull)failureIntentResponseWithErrorMessage:(NSString * _Nonnull)errorMessage __attribute__((swift_name("failure(errorMessage:)")));
 		[Static]
@@ -114,12 +92,82 @@
 		[NullAllowed, Export("successMessage")]
 		string SuccessMessage { get; set; }
 
-		// @property (readwrite, copy, nonatomic) NSString * _Nullable sceneName;
-		[NullAllowed, Export("sceneName")]
-		string SceneName { get; set; }
+		// @property (readwrite, copy, nonatomic) NSString * _Nullable controlName;
+		[NullAllowed, Export("controlName")]
+		string ControlName { get; set; }
 
 		// @property (readonly, nonatomic) HDLRunSceneIntentResponseCode code;
 		[Export("code")]
 		HDLRunSceneIntentResponseCode Code { get; }
 	}
+
+	// @interface HDLSiriShortcutModel : NSObject
+	[BaseType(typeof(NSObject))]
+	interface HDLSiriShortcutModel
+	{
+		// @property (copy, nonatomic) NSString * _Nonnull title;
+		[Export("title")]
+		string Title { get; set; }
+
+		// @property (copy, nonatomic) NSString * _Nonnull content;
+		[Export("content")]
+		string Content { get; set; }
+
+		// @property (copy, nonatomic) NSArray<HDLSiriControlModel *> * _Nonnull list;
+		[Export("list", ArgumentSemantic.Copy)]
+		HDLSiriControlModel[] List { get; set; }
+	}
+
+	// @interface HDLSiriControlModel : NSObject
+	[BaseType(typeof(NSObject))]
+	interface HDLSiriControlModel
+	{
+		// @property (copy, nonatomic) NSString * _Nonnull controlName;
+		[Export("controlName")]
+		string ControlName { get; set; }
+
+		// @property (copy, nonatomic) NSString * _Nonnull controlId;
+		[Export("controlId")]
+		string ControlId { get; set; }
+
+		// @property (copy, nonatomic) NSString * _Nonnull controlType;
+		[Export("controlType")]
+		string ControlType { get; set; }
+
+		// @property (copy, nonatomic) NSString * _Nonnull controlJSONStr;
+		[Export("controlJSONStr")]
+		string ControlJSONStr { get; set; }
+
+		// @property (copy, nonatomic) NSString * _Nonnull actionName;
+		[Export("actionName")]
+		string ActionName { get; set; }
+	}
+
+	// @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; }
+
+		// @property (nonatomic, strong) NSString * _Nonnull homeId;
+		[Export("homeId", ArgumentSemantic.Strong)]
+		string HomeId { 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 6242ce8..9e7787d 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 011bc68..8bab462 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.2")]
+[assembly: AssemblyVersion("1.1.0")]
 
 // 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