.vs/HDL_APP_Project/xs/UserPrefs.xml
@@ -6,25 +6,59 @@ <MonoDevelop.Ide.ItemProperties.SiriIntents> <MonoDevelop.MacDev.AppleDevelopmentTeam /> </MonoDevelop.Ide.ItemProperties.SiriIntents> <MonoDevelop.Ide.Workbench ActiveDocument="SiriBinding/obj/Debug/iOS/HdlSiri/HDLRunSceneIntent.g.cs"> <MonoDevelop.Ide.Workbench ActiveDocument="HDL-ON_iOS/Other/SkipControl.cs"> <Files> <File FileName="HDL_ON/UI/UI1-Login/LoginPage.cs" Line="203" Column="35" /> <File FileName="HDL-ON_iOS/Other/SkipControl.cs" Line="18" Column="36" /> <File FileName="HDL-ON_iOS/Other/Siri/SiriBaseView.cs" Line="34" Column="101" /> <File FileName="SiriBinding/Structs.cs" /> <File FileName="HDL-ON_iOS/Other/Siri/Data/SceneDateManager.cs" Line="10" Column="102" /> <File FileName="HDL-ON_iOS/Other/Siri/UI/Cells.cs" /> <File FileName="HDL-ON_iOS/Other/Siri/HDLRunSceneIntentHandlder.cs" /> <File FileName="SiriIntents/IntentHandler.cs" /> <File FileName="HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs" Line="23" Column="45" /> <File FileName="SiriBinding/obj/Debug/iOS/HdlSiri/HDLRunSceneIntent.g.cs" Line="63" Column="1" /> <File FileName="HDL-ON_iOS/Other/Siri/Support/NSUserActivityHelper.cs" /> <File FileName="HDL_ON/UI/UI1-Login/LoginPage.cs" /> <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs" /> <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs" /> <File FileName="HDL-ON_iOS/Other/Siri/Support/NSUserDefaultsHelper.cs" /> <File FileName="HDL-ON_iOS/Other/Siri/SiriBaseView.cs" /> <File FileName="HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs" /> <File FileName="HDL-ON_iOS/Other/Siri/Data/DataManager.cs" /> <File FileName="HDL-ON_iOS/Other/SkipControl.cs" Line="30" Column="57" /> </Files> <Pads> <Pad Id="ProjectPad"> <State name="__root__"> <Node name="HDL_APP_Project" expanded="True"> <Node name="HDL-ON_iOS" selected="True" /> <Node name="SiriBinding" expanded="True"> <Node name="NativeReferenceFolder" expanded="True" /> <Node name="HDL_ON" expanded="True"> <Node name="DAL" expanded="True"> <Node name="Server" expanded="True" /> </Node> <Node name="UI" expanded="True"> <Node name="CSS" expanded="True" /> <Node name="UI1-Login" expanded="True" /> <Node name="UI2" expanded="True"> <Node name="4-PersonalCenter" expanded="True" /> </Node> </Node> </Node> <Node name="HDL-ON_iOS" expanded="True"> <Node name="Base.lproj" expanded="True" /> <Node name="Other" expanded="True"> <Node name="Siri" expanded="True"> <Node name="Data" expanded="True" /> <Node name="Support" expanded="True" /> </Node> <Node name="SkipControl.cs" selected="True" /> </Node> <Node name="Resources" expanded="True"> <Node name="Phone" expanded="True" /> </Node> </Node> <Node name="SiriIntents" expanded="True" /> <Node name="SiriIntentsUI" expanded="True" /> </Node> </State> </Pad> <Pad Id="MonoDevelop.Debugger.WatchPad"> <State> <Value>GetType().Assembly</Value> </State> </Pad> </Pads> @@ -38,6 +72,7 @@ <String>Shared.Droid.TouchID/Shared.Droid.TouchID.csproj</String> <String>Shared.IOS/Shared.IOS.csproj</String> <String>SiriIntent/SiriIntent.csproj</String> <String>SiriBinding/SiriBinding.csproj</String> </DisabledProjects> <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" /> <MonoDevelop.Ide.ItemProperties.HDL-ON__Android PreferredExecutionTarget="Android.SelectDevice" /> @@ -47,6 +82,11 @@ <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/Entity/Function/Scene.cs" relfile="HDL_ON/Entity/Function/Scene.cs" line="333" column="1" /> <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPageBLL.cs" relfile="HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPageBLL.cs" line="251" column="1" /> <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPageBLL.cs" relfile="HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPageBLL.cs" line="185" column="1" /> <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs" relfile="HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs" line="894" column="1" /> <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs" relfile="HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs" line="62" column="1" /> <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs" relfile="HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs" line="60" column="1" /> <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs" relfile="HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs" line="64" column="1" /> <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL-ON_iOS/Other/Siri/SiriBaseView.cs" relfile="HDL-ON_iOS/Other/Siri/SiriBaseView.cs" line="60" column="1" /> </BreakpointStore> </MonoDevelop.Ide.DebuggingService.Breakpoints> <MultiItemStartupConfigurations /> HDL-ON_iOS/AppDelegate.cs
@@ -10,6 +10,8 @@ using HDL_ON.UI; using HDL_ON.DAL.Server; using Intents; using Other.Siri; using HDLSceneSiri; namespace SharedMethod { @@ -473,6 +475,51 @@ HDL_ON.DriverLayer.Control.Ins.SearchLoaclGateway(); } #region Siri public override bool ContinueUserActivity(UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler) { var intent = userActivity.GetInteraction()?.Intent as HDLRunSceneIntent; if (!(intent is null)) { HandleIntent(intent); return true; } else if (userActivity.ActivityType == NSUserActivityHelper.ViewMenuActivityType) { HandleUserActivity(); return true; } return false; } void HandleIntent(HDLRunSceneIntent intent) { var handler = new HDLRunSceneIntentHandlder(); handler.HandleRunScene(intent, (response) => { if (response.Code != HDLRunSceneIntentResponseCode.Success) { Console.WriteLine("Quantity must be greater than 0 to add to order"); } }); } void HandleUserActivity() { //var rootViewController = Window?.RootViewController as UINavigationController; //var orderHistoryViewController = rootViewController?.ViewControllers?.FirstOrDefault() as OrderHistoryTableViewController; //if (orderHistoryViewController is null) //{ // Console.WriteLine("Failed to access OrderHistoryTableViewController."); // return; //} //var segue = OrderHistoryTableViewController.SegueIdentifiers.SoupMenu; //orderHistoryViewController.PerformSegue(segue, null); } #endregion } } HDL-ON_iOS/Base.lproj/Intents.intentdefinition
New file @@ -0,0 +1,181 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>INEnums</key> <array/> <key>INIntentDefinitionModelVersion</key> <string>1.2</string> <key>INIntentDefinitionNamespace</key> <string>8yVV3C</string> <key>INIntentDefinitionSystemVersion</key> <string>20G165</string> <key>INIntentDefinitionToolsBuildVersion</key> <string>13A233</string> <key>INIntentDefinitionToolsVersion</key> <string>13.0</string> <key>INIntents</key> <array> <dict> <key>INIntentCategory</key> <string>generic</string> <key>INIntentDescription</key> <string>Run Scene</string> <key>INIntentDescriptionID</key> <string>Pe02nj</string> <key>INIntentLastParameterTag</key> <integer>2</integer> <key>INIntentName</key> <string>HDLRunScene</string> <key>INIntentParameterCombinations</key> <dict> <key>sceneName,sceneId</key> <dict> <key>INIntentParameterCombinationIsPrimary</key> <true/> <key>INIntentParameterCombinationSupportsBackgroundExecution</key> <true/> <key>INIntentParameterCombinationTitle</key> <string>执行场景“${sceneName}”</string> <key>INIntentParameterCombinationTitleID</key> <string>oCGdw4</string> </dict> </dict> <key>INIntentParameters</key> <array> <dict> <key>INIntentParameterDisplayName</key> <string>Scene Name</string> <key>INIntentParameterDisplayNameID</key> <string>wC0SgK</string> <key>INIntentParameterDisplayPriority</key> <integer>1</integer> <key>INIntentParameterMetadata</key> <dict> <key>INIntentParameterMetadataCapitalization</key> <string>Sentences</string> <key>INIntentParameterMetadataDefaultValueID</key> <string>xz2KkJ</string> </dict> <key>INIntentParameterName</key> <string>sceneName</string> <key>INIntentParameterTag</key> <integer>1</integer> <key>INIntentParameterType</key> <string>String</string> </dict> <dict> <key>INIntentParameterDisplayName</key> <string>Scene Id</string> <key>INIntentParameterDisplayNameID</key> <string>MtgGtd</string> <key>INIntentParameterDisplayPriority</key> <integer>2</integer> <key>INIntentParameterMetadata</key> <dict> <key>INIntentParameterMetadataCapitalization</key> <string>Sentences</string> <key>INIntentParameterMetadataDefaultValueID</key> <string>hQHCm1</string> </dict> <key>INIntentParameterName</key> <string>sceneId</string> <key>INIntentParameterTag</key> <integer>2</integer> <key>INIntentParameterType</key> <string>String</string> </dict> </array> <key>INIntentResponse</key> <dict> <key>INIntentResponseCodes</key> <array> <dict> <key>INIntentResponseCodeFormatString</key> <string>${sceneName}</string> <key>INIntentResponseCodeFormatStringID</key> <string>Pq8YBC</string> <key>INIntentResponseCodeName</key> <string>success</string> <key>INIntentResponseCodeSuccess</key> <true/> </dict> <dict> <key>INIntentResponseCodeFormatString</key> <string>${errorMessage}</string> <key>INIntentResponseCodeFormatStringID</key> <string>CX5DVI</string> <key>INIntentResponseCodeName</key> <string>failure</string> </dict> <dict> <key>INIntentResponseCodeName</key> <string>error</string> <key>INIntentResponseCodeSuccess</key> <true/> </dict> </array> <key>INIntentResponseLastParameterTag</key> <integer>3</integer> <key>INIntentResponseParameters</key> <array> <dict> <key>INIntentResponseParameterDisplayName</key> <string>Error Message</string> <key>INIntentResponseParameterDisplayNameID</key> <string>HxQb2M</string> <key>INIntentResponseParameterDisplayPriority</key> <integer>1</integer> <key>INIntentResponseParameterName</key> <string>errorMessage</string> <key>INIntentResponseParameterTag</key> <integer>1</integer> <key>INIntentResponseParameterType</key> <string>String</string> </dict> <dict> <key>INIntentResponseParameterDisplayName</key> <string>Success Message</string> <key>INIntentResponseParameterDisplayNameID</key> <string>BaAbSP</string> <key>INIntentResponseParameterDisplayPriority</key> <integer>2</integer> <key>INIntentResponseParameterName</key> <string>successMessage</string> <key>INIntentResponseParameterTag</key> <integer>2</integer> <key>INIntentResponseParameterType</key> <string>String</string> </dict> <dict> <key>INIntentResponseParameterDisplayName</key> <string>Scene Name</string> <key>INIntentResponseParameterDisplayNameID</key> <string>pqg7cb</string> <key>INIntentResponseParameterDisplayPriority</key> <integer>3</integer> <key>INIntentResponseParameterName</key> <string>sceneName</string> <key>INIntentResponseParameterTag</key> <integer>3</integer> <key>INIntentResponseParameterType</key> <string>String</string> </dict> </array> </dict> <key>INIntentRestrictions</key> <integer>1</integer> <key>INIntentTitle</key> <string>Run Scene</string> <key>INIntentTitleID</key> <string>j3jRXP</string> <key>INIntentType</key> <string>Custom</string> <key>INIntentVerb</key> <string>Do</string> </dict> </array> <key>INTypes</key> <array/> </dict> </plist> HDL-ON_iOS/Entitlements.plist
@@ -10,5 +10,9 @@ </array> <key>com.apple.developer.siri</key> <true/> <key>com.apple.security.application-groups</key> <array> <string>group.com.hdl.onpro</string> </array> </dict> </plist> HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -28,6 +28,7 @@ <CodesignKey>iPhone Developer</CodesignKey> <MtouchExtraArgs>-gcc_flags="-dead_strip -ObjC";-w</MtouchExtraArgs> <CodesignProvision>On+Dev-20210616-1</CodesignProvision> <AllowUnsafeBlocks>true</AllowUnsafeBlocks> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' "> <DebugType>none</DebugType> @@ -38,6 +39,7 @@ <MtouchLink>SdkOnly</MtouchLink> <MtouchArch>x86_64</MtouchArch> <CodesignKey>iPhone Developer</CodesignKey> <AllowUnsafeBlocks>true</AllowUnsafeBlocks> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' "> <DebugSymbols>true</DebugSymbols> @@ -56,6 +58,7 @@ <MtouchEnableSGenConc>false</MtouchEnableSGenConc> <CodesignProvision>OnPro211116-1</CodesignProvision> <CodesignEntitlements>Entitlements.plist</CodesignEntitlements> <AllowUnsafeBlocks>true</AllowUnsafeBlocks> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' "> <DebugType>none</DebugType> @@ -70,6 +73,7 @@ <MtouchExtraArgs>-gcc_flags="-dead_strip -ObjC"</MtouchExtraArgs> <MtouchI18n>cjk</MtouchI18n> <CodesignProvision>OnPro-Hoc20211117-1</CodesignProvision> <AllowUnsafeBlocks>true</AllowUnsafeBlocks> </PropertyGroup> <ItemGroup> <Reference Include="System" /> @@ -103,6 +107,9 @@ </Reference> <Reference Include="Shared.IOS.HDLLinphoneSDK"> <HintPath>..\DLL\Linphone\iOS\Shared.IOS.HDLLinphoneSDK.dll</HintPath> </Reference> <Reference Include="Shared.IOS.HDLSceneSiri"> <HintPath>..\..\HDLXamarinSceneSiri\Shared.IOS.HDLSceneSiri\Shared.IOS.HDLSceneSiri\bin\Release\Shared.IOS.HDLSceneSiri.dll</HintPath> </Reference> </ItemGroup> <ItemGroup> @@ -464,6 +471,9 @@ <Folder Include="Resources\Phone\PersonalCenter\FacePassage\" /> <Folder Include="Resources\Phone\FunctionIcon\Electrical\AirSwitch\" /> <Folder Include="Other\Siri\" /> <Folder Include="Other\Siri\Data\" /> <Folder Include="Other\Siri\Support\" /> <Folder Include="Other\Siri\UI\" /> </ItemGroup> <ItemGroup> <InterfaceDefinition Include="LaunchScreen.storyboard" /> @@ -499,6 +509,12 @@ </Compile> <Compile Include="Other\Siri\VoiceShortcutDataManager.cs" /> <Compile Include="Other\Siri\SiriScene.cs" /> <Compile Include="Other\Siri\HDLRunSceneIntentHandlder.cs" /> <Compile Include="Other\Siri\Data\SceneDateManager.cs" /> <Compile Include="Other\Siri\Data\DataManager.cs" /> <Compile Include="Other\Siri\Support\NSUserDefaultsHelper.cs" /> <Compile Include="Other\Siri\Support\NSUserActivityHelper.cs" /> <Compile Include="Other\Siri\UI\Cells.cs" /> </ItemGroup> <ItemGroup> <BundleResource Include="Resources\Phone\LoginIcon\ShowPasswordIcon.png" /> @@ -1366,6 +1382,7 @@ <BundleResource Include="Resources\Phone\FunctionIcon\AirFresh\btnCloseIcon.png" /> <BundleResource Include="Resources\Phone\FunctionIcon\AirFresh\btnInfoIcon.png" /> <BundleResource Include="Resources\Phone\FunctionIcon\AirFresh\HumiOnIcon.png" /> <BundleResource Include="Resources\Phone\PersonalCenter\SiriIcon.png" /> </ItemGroup> <ItemGroup> <ITunesArtwork Include="iTunesArtwork" /> @@ -1410,10 +1427,6 @@ <Project>{2DDF4C3C-6998-432E-9F43-6786D82F0630}</Project> <Name>Blufi</Name> </ProjectReference> <ProjectReference Include="..\SiriBinding\SiriBinding.csproj"> <Project>{77FFAB61-395D-4AD3-863E-C4E32B5038E7}</Project> <Name>SiriBinding</Name> </ProjectReference> <ProjectReference Include="..\SiriIntents\SiriIntents.csproj"> <IsAppExtension>true</IsAppExtension> <Project>{760980F5-1CD3-4F4F-9134-34D87BECD790}</Project> @@ -1425,6 +1438,9 @@ <Name>SiriIntentsUI</Name> </ProjectReference> </ItemGroup> <ItemGroup> <Content Include="Base.lproj\Intents.intentdefinition" /> </ItemGroup> <Import Project="..\HDL_ON\HDL_ON.projitems" Label="Shared" Condition="Exists('..\HDL_ON\HDL_ON.projitems')" /> <Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" /> <ProjectExtensions> HDL-ON_iOS/Other/Siri/Data/DataManager.cs
New file @@ -0,0 +1,202 @@ /* See LICENSE folder for this sample’s licensing information. Abstract: A data manager that manages data conforming to `Codable` and stores it in `UserDefaults`. */ using System; using Foundation; using CoreFoundation; namespace Other.Siri { public struct UserDefaultsStorageDescriptor { public string Key { get; set; } public UserDefaultsStorageDescriptor(string key) { Key = key; } } public static class NotificationKeys { // Clients of `DataManager` that want to know when the data changes can // listen for this notification. public const string DataChanged = "DataChangedNotification"; } public class DataManager<ManagedDataType> : NSObject where ManagedDataType : NSObject, INSCoding { // This sample uses App Groups to share a suite of data between the // main app and the different extensions. protected NSUserDefaults UserDefaults = NSUserDefaultsHelper.DataSuite; // To prevent data races, all access to `UserDefaults` uses this queue. protected DispatchQueue UserDefaultsAccessQueue = new DispatchQueue("User Defaults Access Queue"); // Storage and observation information. protected UserDefaultsStorageDescriptor StorageDescriptor; // A flag to avoid receiving notifications about data this instance just // wrote to `UserDefaults`. protected bool IgnoreLocalUserDefaultsChanges = false; // The observer object handed back after registering to observe a // property. IDisposable UserDefaultsObserver; // The data managed by this `DataManager`. //此“DataManager”管理的数据。 protected ManagedDataType ManagedDataBackingInstance; // Access to `managedDataBackingInstance` needs to occur on a dedicated // queue to avoid data races. protected DispatchQueue DataAccessQueue = new DispatchQueue("Data Access Queue"); // Public access to the managed data for clients of `DataManager` public ManagedDataType ManagedData { get { ManagedDataType data = null; DataAccessQueue.DispatchSync(() => data = ManagedDataBackingInstance); return data; } } // See note below about createInitialData and initialData public DataManager(UserDefaultsStorageDescriptor storageDescriptor, ManagedDataType initialData) { StorageDescriptor = storageDescriptor; LoadData(); if (ManagedDataBackingInstance is null) { ManagedDataBackingInstance = initialData; WriteData(); } ObserveChangesInUserDefaults(); } // createInitialData // // The Swift version of this app has a createInitialData method. // Each child class of the DataManager class overrides this method, and // then the DataManager base class calls the derived versions to get // the initial data. C# gives a compiler warning for this ("Virtual // member call in constructor"). Since in C# the base class constructor // is run before the child class constructor, having the base clas // constructor call out to a method on the derived class is calling // a method on an object that has not yet been fully constructed. // The C# version of this sample works around this problem by passing // in the initial data to the constructor. void ObserveChangesInUserDefaults() { var weakThis = new WeakReference<DataManager<ManagedDataType>>(this); Action<NSObservedChange> changeHandler = (change) => { if (weakThis.TryGetTarget(out var dataManager)) { // Ignore any change notifications coming from data this // instance just saved to `NSUserDefaults`. if (dataManager is null || dataManager.IgnoreLocalUserDefaultsChanges) { return; } // The underlying data changed in `NSUserDefaults`, so // update this instance with the change and notify clients // of the change. dataManager.LoadData(); dataManager.NotifyClientsDataChanged(); } }; UserDefaultsObserver = UserDefaults.AddObserver( StorageDescriptor.Key, NSKeyValueObservingOptions.Initial | NSKeyValueObservingOptions.New, changeHandler ); } // Notifies clients the data changed by posting an `NSNotification` with // the key `NotificationKeys.DataChanged` void NotifyClientsDataChanged() { var notification = NSNotification.FromName(NotificationKeys.DataChanged, this); NSNotificationCenter.DefaultCenter.PostNotification(notification); } protected virtual void FinishUnarchiving(NSObject unarchivedData) { throw new NotImplementedException(); } // Loads the data from `NSUserDefaults`. void LoadData() { UserDefaultsAccessQueue.DispatchSync(() => { NSData archivedData = UserDefaults.DataForKey(StorageDescriptor.Key); try { // Let the derived classes handle the specifics of // putting the unarchived data in the correct format. // This is necessary because the derived classes // (SoupMenuManager, SoupOrderMenuManager) are using // generic data formats (NSMutableSet<T> or NSMutableArray<T>) // and these types cannot be casted directly from the // deserialized data. NSObject unarchivedData = NSKeyedUnarchiver.UnarchiveObject(archivedData); FinishUnarchiving(unarchivedData); } catch (Exception e) { if (!(e is null)) { Console.WriteLine($"Error: {e.Message}"); } } }); } // Writes the data to `NSUserDefaults` protected void WriteData() { UserDefaultsAccessQueue.DispatchAsync(() => { try { NSData encodedData = NSKeyedArchiver.ArchivedDataWithRootObject(ManagedDataBackingInstance); IgnoreLocalUserDefaultsChanges = true; UserDefaults.SetValueForKey(encodedData, (NSString)StorageDescriptor.Key); IgnoreLocalUserDefaultsChanges = false; NotifyClientsDataChanged(); } catch (Exception e) { throw new Exception($"Could not save data. Reason: {e.Message}"); } }); } protected void SetIsLoginValue() { UserDefaults.SetBool(true, NSUserDefaultsHelper.StorageKeys.GLOBAL_GIsLogin); } public void SetAccessTokenValue(string accessToken) { UserDefaults.SetString(accessToken, NSUserDefaultsHelper.StorageKeys.GLOBAL_GAccessToken); } public void SetRefreshTokenValue(string refreshToken) { UserDefaults.SetString(refreshToken, NSUserDefaultsHelper.StorageKeys.GLOBAL_GRefreshToken); } public void SetRegionUrlValue(string regionUrl) { UserDefaults.SetString(regionUrl, NSUserDefaultsHelper.StorageKeys.GLOBAL_GRegionUrl); } } } HDL-ON_iOS/Other/Siri/Data/SceneDateManager.cs
New file @@ -0,0 +1,79 @@ using Foundation; using Intents; using System; using System.Linq; namespace Other.Siri { public class SceneDateManager : DataManager<NSMutableArray<SiriScene>> { public SceneDateManager() : base(new UserDefaultsStorageDescriptor(NSUserDefaultsHelper.StorageKeys.OrderHistory), new NSMutableArray<SiriScene>()) { } // Converts an `Order` into `OrderSoupIntent` and donates it as an // interaction to the system so that this order can be suggested in the // future or turned into a voice shortcut for quickly placing the same // order in the future. void DonateInteraction(SiriScene order) { var interaction = new INInteraction(order.Intent, null); interaction.Identifier = order.Id.ToString(); interaction.DonateInteraction((error) => { if (!(error is null)) { Console.WriteLine($"Interaction donation failed: {error}"); } else { Console.WriteLine("Successfully donated interaction."); } }); } #region Public API for clients of `SoupOrderDataManager` // Convenience method to access the data with a property name that makes // sense in the caller's context. public NSMutableArray<SiriScene> OrderHistory { get { return ManagedData as NSMutableArray<SiriScene>; } } public void PlaceOrder(SiriScene order) { // Access to `ManagedDataBackingInstance` is only valid on // `DataAccessQueue`. DataAccessQueue.DispatchSync(() => { if (ManagedDataBackingInstance.Count == 0) { // Getting an error trying to insert at 0 for an empty // NSMutableArray<Order> ManagedDataBackingInstance.Add(order); } else { ManagedDataBackingInstance.Insert(order, 0); } }); // Access to UserDefaults is gated behind a separate access queue. WriteData(); // Donate an interaction to the system. DonateInteraction(order); } #endregion #region Support methods for unarchiving saved data override protected void FinishUnarchiving(NSObject unarchivedData) { var array = (NSArray)unarchivedData; SiriScene[] orders = NSArray.FromArray<SiriScene>(array); ManagedDataBackingInstance = new NSMutableArray<SiriScene>(orders); } #endregion } } HDL-ON_iOS/Other/Siri/HDLRunSceneIntentHandlder.cs
New file @@ -0,0 +1,26 @@ using System; using HDLSceneSiri; using ObjCRuntime; namespace Other.Siri { public class HDLRunSceneIntentHandlder : HDLRunSceneIntentHandling { public HDLRunSceneIntentHandlder() { } public override void ConfirmRunScene(HDLRunSceneIntent intent, Action<HDLRunSceneIntentResponse> completion) { Console.WriteLine("asjdkfasdfa"); base.ConfirmRunScene(intent, completion); } public override void HandleRunScene(HDLRunSceneIntent intent, Action<HDLRunSceneIntentResponse> completion) { throw new NotImplementedException(); } } } HDL-ON_iOS/Other/Siri/SiriBaseView.cs
@@ -1,6 +1,7 @@ using System; using CoreGraphics; using Foundation; using HDL_ON.Entity; using Intents; using IntentsUI; using UIKit; @@ -9,14 +10,41 @@ { public partial class SiriBaseView : UIViewController, IINUIAddVoiceShortcutViewControllerDelegate, IINUIEditVoiceShortcutViewControllerDelegate { VoiceShortcutDataManager VoiceShortcutDataManager; public SiriBaseView() : base("SiriBaseView", null) { VoiceShortcutDataManager = new VoiceShortcutDataManager(); } public override void ViewWillAppear(bool animated) { base.ViewWillAppear(animated); //HDL_ON_iOS.AppDelegate.rootViewController.NavigationBarHidden = true; HDL_ON_iOS.AppDelegate.rootViewController.SetNavigationBarHidden(false, true); } public override void ViewDidLoad() { base.ViewDidLoad(); // Perform any additional setup after loading the view, typically from a nib. UserActivity = NSUserActivityHelper.ViewMenuActivity; // var btnVS = new INUIAddVoiceShortcutButton(INUIAddVoiceShortcutButtonStyle.White); // btnVS.Frame = new CGRect(20, 500, 280, 44); //btnVS.Shortcut = VoiceShortcutDataManager.FirstTemp().Shortcut ; // View.AddSubview(btnVS); foreach(var localScene in FunctionList.List.scenes) { var cell = new UIView(); cell.Frame = new CGRect(20, 800, 300, 60); } var ddd = Xamarin.Essentials.DeviceInfo.VersionString; @@ -24,14 +52,12 @@ var btn = UIButton.FromType(UIButtonType.System); btn.Frame = new CGRect(20, 200, 280, 44); btn.SetTitle("Click Me", UIControlState.Normal); VoiceShortcutDataManager VoiceShortcutDataManager = new VoiceShortcutDataManager(); btn.TouchUpInside += (sender, e) => { //HDL_ON_iOS.AppDelegate.rootViewController.SetNavigationBarHidden(HDL_ON_iOS.AppDelegate.rootViewController.NavigationBarHidden ? false : true, true); var ss = new SiriScene() { Id = Guid.NewGuid().ToString(), Name = Guid.NewGuid().ToString() }; //INVoiceShortcut existingShortcut = VoiceShortcutDataManager?.VoiceShortcutForOrder(ss); INVoiceShortcut existingShortcut = VoiceShortcutDataManager?.VoiceShortcutForOrder(ss); //if (!(existingShortcut is null)) //{ // var editVoiceShortcutViewController = new INUIEditVoiceShortcutViewController(existingShortcut); @@ -42,6 +68,10 @@ { // Since the app isn't yet managing a voice shortcut for // this order, present the add view controller new SceneDateManager().PlaceOrder(ss); INShortcut newShortcut = new INShortcut(ss.Intent); if (!(newShortcut is null)) { HDL-ON_iOS/Other/Siri/SiriScene.cs
@@ -1,6 +1,7 @@ using System; using Foundation; using HdlSiri; using HDLSceneSiri; //using HdlSiri; using Intents; using UIKit; @@ -25,9 +26,10 @@ { get { var orderSoupIntent = new HDLRunSceneIntent() { SceneId = Id, SceneName = Name }; //orderSoupIntent.Quantity = new NSNumber(Quantity); //orderSoupIntent.Soup = new INObject(MenuItem.ItemNameKey, MenuItem.LocalizedString); var orderSoupIntent = new HDLRunSceneIntent();// { SceneId = Id, SceneName = Name }; orderSoupIntent.SceneId = Id;//orderSoupIntent.Quantity = new NSNumber(Quantity); orderSoupIntent.SceneName = Name;//orderSoupIntent.Soup = new INObject(MenuItem.ItemNameKey, MenuItem.LocalizedString); //var image = UIImage.FromBundle(MenuItem.IconImageName); //if (!(image is null)) HDL-ON_iOS/Other/Siri/Support/NSUserActivityHelper.cs
New file @@ -0,0 +1,56 @@ using System; using Foundation; #if __IOS__ using CoreSpotlight; using UIKit; using System.Linq.Expressions; using System.Xml; #endif namespace Other.Siri { public static class NSUserActivityHelper { public static class ActivityKeys { public const string MenuItems = "menuItems"; public const string SegueId = "segueID"; } static string SearchableItemContentType = "Soup Menu"; public static string ViewMenuActivityType = "com.xamarin.SoupChef.viewMenu"; public static NSUserActivity ViewMenuActivity { get { var userActivity = new NSUserActivity(ViewMenuActivityType) { Title = "测试title", //NSBundleHelper.SoupKitBundle.GetLocalizedString("ORDER_LUNCH_TITLE", "View menu activity title"), EligibleForSearch = true, EligibleForPrediction = true }; var attributes = new CSSearchableItemAttributeSet(NSUserActivityHelper.SearchableItemContentType) { //ThumbnailData = UIImage.FromBundle("tomato").AsPNG(), Keywords = ViewMenuSearchableKeywords, DisplayName = "测试DisplayName",// NSBundleHelper.SoupKitBundle.GetLocalizedString("ORDER_LUNCH_TITLE", "View menu activity title"), ContentDescription = "测试ContentDescription",//NSBundleHelper.SoupKitBundle.GetLocalizedString("VIEW_MENU_CONTENT_DESCRIPTION", "View menu content description") }; userActivity.ContentAttributeSet = attributes; //var phrase = NSBundleHelper.SoupKitBundle.GetLocalizedString("ORDER_LUNCH_SUGGESTED_PHRASE", "Voice shortcut suggested phrase"); userActivity.SuggestedInvocationPhrase = "测试phrase"; return userActivity; } } static string[] ViewMenuSearchableKeywords = new string[] { "Searchable Keyword", "Searchable Keyword", "Searchable Keyword" }; } } HDL-ON_iOS/Other/Siri/Support/NSUserDefaultsHelper.cs
New file @@ -0,0 +1,40 @@ using System; using Foundation; using System.Resources; namespace Other.Siri { public static class NSUserDefaultsHelper { private const string AppGroup = "group.com.hdl.onpro"; public static class StorageKeys { public const string SoupMenu = "soupMenu"; public const string OrderHistory = "orderHistory"; public const string VoiceShortcutHistory = "voiceShortcutHistory"; public const string APP_KEY = "HDL-HOME-APP-TEST"; public const string SECRET_KEY = "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss"; public const string GLOBAL_GIsLogin = "IsLogin"; public const string GLOBAL_GAccessToken = "AccessToken"; public const string GLOBAL_GRefreshToken = "RefreshToken"; public const string GLOBAL_GRegionUrl = "RegionUrl"; } public static NSUserDefaults DataSuite { get { var dataSuite = new NSUserDefaults(AppGroup, NSUserDefaultsType.SuiteName); if( dataSuite is null ) { throw new Exception($"Could not load UserDefaults for app group {AppGroup}"); } return dataSuite; } } } } HDL-ON_iOS/Other/Siri/UI/Cells.cs
New file @@ -0,0 +1,14 @@ using System; using UIKit; namespace Other.Siri.UI { public class Cells : UITableViewCell { public Cells() { } //public string } } HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs
@@ -8,6 +8,7 @@ using System; using Intents; using System.Linq; using HDLSceneSiri; namespace Other.Siri { @@ -20,11 +21,16 @@ UpdateVoiceShortcuts(null); } public VoiceShortcutDataManager(Action action) { UpdateVoiceShortcuts(action); } public INVoiceShortcut VoiceShortcutForOrder(SiriScene ss) { var voiceShortcut = VoiceShortcuts.FirstOrDefault((shortcut) => { var intent = shortcut.Shortcut.Intent as HdlSiri.HDLRunSceneIntent; var intent = shortcut.Shortcut.Intent as HDLRunSceneIntent; if (intent is null) { return false; } var orderFromIntent = SiriScene.FromOrderSoupIntent(intent); if (orderFromIntent is null) { return false; } @@ -33,6 +39,36 @@ return voiceShortcut; } public INVoiceShortcut VoiceShortcutForOrder2(SiriScene ss) { var voiceShortcut = VoiceShortcuts.FirstOrDefault((shortcut) => { var intent = shortcut.Shortcut.Intent as HDLRunSceneIntent; if (intent is null) { return false; } var orderFromIntent = SiriScene.FromOrderSoupIntent(intent); if (orderFromIntent is null) { return false; } return ss.IsEqual(orderFromIntent); }); return voiceShortcut; } public INVoiceShortcut FirstTemp () { try { if(VoiceShortcuts == null) { UpdateVoiceShortcuts(null); } return VoiceShortcuts[0]; } catch { return null; } } public void UpdateVoiceShortcuts(Action completion) { INVoiceShortcutCenter.SharedCenter.GetAllVoiceShortcuts((voiceShortcutsFromCenter, error) => HDL-ON_iOS/Other/SkipControl.cs
@@ -1,5 +1,6 @@ using System; using CoreGraphics; using Foundation; using Intents; using IntentsUI; using Other.Siri; @@ -15,14 +16,27 @@ public void SkipSiriView() { var user = new SiriBaseView(); user.View.BackgroundColor = UIColor.Magenta; //var user = new SiriBaseView(); //user.View.BackgroundColor = new UIColor(242, 243, 247, 1); HDL_ON_iOS.AppDelegate.rootViewController.NavigationBarHidden = true; HDL_ON_iOS.AppDelegate.rootViewController.NavigationBarHidden = false; HDL_ON_iOS.AppDelegate.rootViewController.PushViewController(user, true); //HDL_ON_iOS.AppDelegate.rootViewController.PushViewController(user, true); NSMutableArray list = new NSMutableArray(); foreach (var localScene in HDL_ON.Entity.FunctionList.List.scenes) { list.Add(new HDLSceneSiri.HDLSiriSceneModel() { UserSceneId = localScene.userSceneId, Name = localScene.name, }); } var vc = new HDLSceneSiri.HDLSiriSceneListViewController(); vc.DataSource = list; //vc.TitleName //PresentViewController(vc, true, null); HDL_ON_iOS.AppDelegate.rootViewController.PushViewController(vc, true); } } } HDL-ON_iOS/Resources/Phone/PersonalCenter/SiriIcon.png
HDL_APP_Project.sln
@@ -10,11 +10,11 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Blufi", "HdlBluWi\Blufi.csproj", "{2DDF4C3C-6998-432E-9F43-6786D82F0630}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SiriBinding", "SiriBinding\SiriBinding.csproj", "{77FFAB61-395D-4AD3-863E-C4E32B5038E7}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SiriIntents", "SiriIntents\SiriIntents.csproj", "{760980F5-1CD3-4F4F-9134-34D87BECD790}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SiriIntentsUI", "SiriIntentsUI\SiriIntentsUI.csproj", "{ACC48A7F-250B-4915-A250-9BC399DBD6B3}" EndProject Project("{9344BDBB-3E7F-41FC-A0DD-8665D75EE146}") = "SiriBinding", "SiriBinding\SiriBinding.csproj", "{3ED45164-1242-414A-8B08-2751710F6E05}" EndProject Global GlobalSection(SharedMSBuildProjectFiles) = preSolution @@ -69,18 +69,6 @@ {2DDF4C3C-6998-432E-9F43-6786D82F0630}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {2DDF4C3C-6998-432E-9F43-6786D82F0630}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {2DDF4C3C-6998-432E-9F43-6786D82F0630}.Debug|Any CPU.Build.0 = Debug|Any CPU {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Debug|Any CPU.Build.0 = Debug|Any CPU {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Debug|iPhone.ActiveCfg = Debug|Any CPU {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Debug|iPhone.Build.0 = Debug|Any CPU {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Release|Any CPU.ActiveCfg = Release|Any CPU {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Release|Any CPU.Build.0 = Release|Any CPU {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Release|iPhone.ActiveCfg = Release|Any CPU {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Release|iPhone.Build.0 = Release|Any CPU {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {760980F5-1CD3-4F4F-9134-34D87BECD790}.Debug|Any CPU.ActiveCfg = Debug|iPhone {760980F5-1CD3-4F4F-9134-34D87BECD790}.Debug|Any CPU.Build.0 = Debug|iPhone {760980F5-1CD3-4F4F-9134-34D87BECD790}.Debug|iPhone.ActiveCfg = Debug|iPhone @@ -105,6 +93,18 @@ {ACC48A7F-250B-4915-A250-9BC399DBD6B3}.Release|iPhone.Build.0 = Release|iPhone {ACC48A7F-250B-4915-A250-9BC399DBD6B3}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator {ACC48A7F-250B-4915-A250-9BC399DBD6B3}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator {3ED45164-1242-414A-8B08-2751710F6E05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3ED45164-1242-414A-8B08-2751710F6E05}.Debug|Any CPU.Build.0 = Debug|Any CPU {3ED45164-1242-414A-8B08-2751710F6E05}.Debug|iPhone.ActiveCfg = Debug|Any CPU {3ED45164-1242-414A-8B08-2751710F6E05}.Debug|iPhone.Build.0 = Debug|Any CPU {3ED45164-1242-414A-8B08-2751710F6E05}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU {3ED45164-1242-414A-8B08-2751710F6E05}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU {3ED45164-1242-414A-8B08-2751710F6E05}.Release|Any CPU.ActiveCfg = Release|Any CPU {3ED45164-1242-414A-8B08-2751710F6E05}.Release|Any CPU.Build.0 = Release|Any CPU {3ED45164-1242-414A-8B08-2751710F6E05}.Release|iPhone.ActiveCfg = Release|Any CPU {3ED45164-1242-414A-8B08-2751710F6E05}.Release|iPhone.Build.0 = Release|Any CPU {3ED45164-1242-414A-8B08-2751710F6E05}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {3ED45164-1242-414A-8B08-2751710F6E05}.Release|iPhoneSimulator.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE HDL_ON/UI/UI1-Login/LoginPage.cs
@@ -198,11 +198,6 @@ bool b = false; btnIcon.MouseUpEventHandler += (sender, e) => { #if __IOS__ var dd =new Other.SkipControl(); dd.SkipSiriView(); return; #endif //ESOnVideo.Current.Test(false); HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs
@@ -152,6 +152,10 @@ /// 智能音箱文本 /// </summary> Button btnSmartSpeakerText; /// <summary> /// Siri文本 /// </summary> Button btnSiriText; public PersonalCenterPage() @@ -850,6 +854,78 @@ #endregion #region Siri #if __IOS__ //if (Application.PhoneType >= 12) { //supportView 加高 显示3行 3*44 supportView.Height = Application.GetRealWidth(3 * 44); FrameLayout siriView = new FrameLayout() { Height = Application.GetRealWidth(44), }; supportView.AddChidren(siriView); //住宅为当前账号才显示智能音箱入口 Button btnSiriIcon = new Button() { X = Application.GetRealWidth(12), Y = Application.GetRealWidth(10), Width = Application.GetMinRealAverage(24), Height = Application.GetMinRealAverage(24), UnSelectedImagePath = "PersonalCenter/SiriIcon.png", }; siriView.AddChidren(btnSiriIcon); btnSiriText = new Button() { X = Application.GetRealWidth(48), Width = Application.GetRealWidth(270), Height = Application.GetRealWidth(44), TextColor = CSS_Color.FirstLevelTitleColor, TextAlignment = TextAlignment.CenterLeft, TextSize = CSS_FontSize.TextFontSize }; if(Language.CurrentLanguage == "Chinese") { btnSiriText.Text = "Siri快捷方式"; }else { btnSiriText.Text = "Siri Shortcut"; } siriView.AddChidren(btnSiriText); btnSiriText.MouseUpEventHandler = (sender, e) => { var ddd =new Other.SkipControl(); ddd.SkipSiriView(); }; Button btnSiriRight = new Button() { X = Application.GetRealWidth(315), Y = Application.GetRealWidth(14), Width = Application.GetMinRealAverage(16), Height = Application.GetMinRealAverage(16), UnSelectedImagePath = "Public/Right.png", }; siriView.AddChidren(btnSiriRight); var btnSmartSpeakerViewLine = new Button() { X = Application.GetRealWidth(48), Y = Application.GetRealWidth(43), Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(279), BackgroundColor = CSS_Color.DividingLineColor }; siriView.AddChidren(btnSmartSpeakerViewLine); } #endif #endregion #region 获取支持 //FrameLayout supView = new FrameLayout() //{ SiriIntents/Entitlements.plist
@@ -1,6 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.security.application-groups</key> <array> <string>group.com.hdl.onpro</string> </array> </dict> </plist> SiriIntents/Info.plist
@@ -7,7 +7,7 @@ <key>CFBundleName</key> <string>SiriIntents</string> <key>CFBundleIdentifier</key> <string>com.hdl.onpro.SiriIntents</string> <string>com.hdl.onpro.siri</string> <key>CFBundleDevelopmentRegion</key> <string>en</string> <key>CFBundleInfoDictionaryVersion</key> @@ -28,11 +28,10 @@ <array/> <key>IntentsSupported</key> <array> <string>INSendMessageIntent</string> <string>INSearchForMessagesIntent</string> <string>INSetMessageAttributeIntent</string> <string>HDLRunSceneIntent</string> </array> <key>IntentsRestrictedWhileProtectedDataUnavailable</key> <array/> </dict> <key>NSExtensionPointIdentifier</key> <string>com.apple.intents-service</string> SiriIntents/SiriIntents.csproj
@@ -79,12 +79,16 @@ <MtouchArch>ARM64</MtouchArch> <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler> <MtouchVerbosity></MtouchVerbosity> <CodesignProvision>OnproSiri211116-1</CodesignProvision> </PropertyGroup> <ItemGroup> <Reference Include="System" /> <Reference Include="System.Xml" /> <Reference Include="System.Core" /> <Reference Include="Xamarin.iOS" /> <Reference Include="Shared.IOS.HDLSceneSiri"> <HintPath>..\..\HDLXamarinSceneSiri\Shared.IOS.HDLSceneSiri\Shared.IOS.HDLSceneSiri\bin\Release\Shared.IOS.HDLSceneSiri.dll</HintPath> </Reference> </ItemGroup> <ItemGroup> <Folder Include="Resources\" /> SiriIntentsUI/Entitlements.plist
@@ -1,6 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.security.application-groups</key> <array> <string>group.com.hdl.onpro</string> </array> </dict> </plist> SiriIntentsUI/Info.plist
@@ -7,7 +7,7 @@ <key>CFBundleName</key> <string>SiriIntentsUI</string> <key>CFBundleIdentifier</key> <string>com.hdl.onpro.SiriIntentsui</string> <string>com.hdl.onpro.siriui</string> <key>CFBundleDevelopmentRegion</key> <string>en</string> <key>CFBundleInfoDictionaryVersion</key> @@ -19,16 +19,19 @@ <key>CFBundleVersion</key> <string>1.3.11171</string> <key>MinimumOSVersion</key> <string>15.0</string> <string>12.0</string> <key>NSExtension</key> <dict> <key>NSExtensionAttributes</key> <dict> <key>IntentsSupported</key> <array> <string>INSendMessageIntent</string> <string>HDLRunSceneIntent</string> </array> <key>IntentsRestrictedWhileLocked</key> <array/> <key>IntentsRestrictedWhileProtectedDataUnavailable</key> <array/> </dict> <key>NSExtensionMainStoryboard</key> <string>MainInterface</string> SiriIntentsUI/SiriIntentsUI.csproj
@@ -79,12 +79,16 @@ <MtouchArch>ARM64</MtouchArch> <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler> <MtouchVerbosity></MtouchVerbosity> <CodesignProvision>OnproSiriUI211116-1</CodesignProvision> </PropertyGroup> <ItemGroup> <Reference Include="System" /> <Reference Include="System.Xml" /> <Reference Include="System.Core" /> <Reference Include="Xamarin.iOS" /> <Reference Include="Shared.IOS.HDLSceneSiri"> <HintPath>..\..\HDLXamarinSceneSiri\Shared.IOS.HDLSceneSiri\Shared.IOS.HDLSceneSiri\bin\Release\Shared.IOS.HDLSceneSiri.dll</HintPath> </Reference> </ItemGroup> <ItemGroup> <Folder Include="Resources\" />