From 926eb65a806096ece5d361e662b8a2d5a5229a9e Mon Sep 17 00:00:00 2001 From: busec0 Date: Tue, 25 Mar 2025 18:50:33 +0200 Subject: [PATCH 1/5] Add maccatalyst platform support --- .../DittoMauiTasksApp.csproj | 4 +-- .../Platforms/MacCatalyst/AppDelegate.cs | 9 ++++++ .../Platforms/MacCatalyst/Info.plist | 30 +++++++++++++++++++ .../Platforms/MacCatalyst/Program.cs | 15 ++++++++++ 4 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 dotnet-maui/DittoMauiTasksApp/Platforms/MacCatalyst/AppDelegate.cs create mode 100644 dotnet-maui/DittoMauiTasksApp/Platforms/MacCatalyst/Info.plist create mode 100644 dotnet-maui/DittoMauiTasksApp/Platforms/MacCatalyst/Program.cs diff --git a/dotnet-maui/DittoMauiTasksApp/DittoMauiTasksApp.csproj b/dotnet-maui/DittoMauiTasksApp/DittoMauiTasksApp.csproj index 96467a387..98540b412 100644 --- a/dotnet-maui/DittoMauiTasksApp/DittoMauiTasksApp.csproj +++ b/dotnet-maui/DittoMauiTasksApp/DittoMauiTasksApp.csproj @@ -1,7 +1,7 @@  - net9.0-android;net9.0-ios; + net9.0-android;net9.0-ios;net9.0-maccatalyst Exe DittoMauiTasksApp true @@ -36,7 +36,7 @@ - + diff --git a/dotnet-maui/DittoMauiTasksApp/Platforms/MacCatalyst/AppDelegate.cs b/dotnet-maui/DittoMauiTasksApp/Platforms/MacCatalyst/AppDelegate.cs new file mode 100644 index 000000000..b2dfc7656 --- /dev/null +++ b/dotnet-maui/DittoMauiTasksApp/Platforms/MacCatalyst/AppDelegate.cs @@ -0,0 +1,9 @@ +using Foundation; + +namespace DittoMauiTasksApp; + +[Register("AppDelegate")] +public class AppDelegate : MauiUIApplicationDelegate +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} \ No newline at end of file diff --git a/dotnet-maui/DittoMauiTasksApp/Platforms/MacCatalyst/Info.plist b/dotnet-maui/DittoMauiTasksApp/Platforms/MacCatalyst/Info.plist new file mode 100644 index 000000000..dd03a24b2 --- /dev/null +++ b/dotnet-maui/DittoMauiTasksApp/Platforms/MacCatalyst/Info.plist @@ -0,0 +1,30 @@ + + + + + UIDeviceFamily + + 1 + 2 + + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + XSAppIconAssets + Assets.xcassets/appicon.appiconset + + diff --git a/dotnet-maui/DittoMauiTasksApp/Platforms/MacCatalyst/Program.cs b/dotnet-maui/DittoMauiTasksApp/Platforms/MacCatalyst/Program.cs new file mode 100644 index 000000000..c252a7fb9 --- /dev/null +++ b/dotnet-maui/DittoMauiTasksApp/Platforms/MacCatalyst/Program.cs @@ -0,0 +1,15 @@ +using ObjCRuntime; +using UIKit; + +namespace DittoMauiTasksApp; + +public class Program +{ + // This is the main entry point of the application. + static void Main(string[] args) + { + // if you want to use a different Application Delegate class from "AppDelegate" + // you can specify it here. + UIApplication.Main(args, null, typeof(AppDelegate)); + } +} \ No newline at end of file From 882ac6fbc7ee67be0cb7766b3cf4aaf33e42dcc4 Mon Sep 17 00:00:00 2001 From: busec0 Date: Tue, 25 Mar 2025 19:08:46 +0200 Subject: [PATCH 2/5] mac-catalyst compatible UI --- .../DittoMauiTasksApp/Views/TasksPage.xaml | 91 ++++++++++--------- 1 file changed, 50 insertions(+), 41 deletions(-) diff --git a/dotnet-maui/DittoMauiTasksApp/Views/TasksPage.xaml b/dotnet-maui/DittoMauiTasksApp/Views/TasksPage.xaml index d6317d41a..cbb93ec18 100644 --- a/dotnet-maui/DittoMauiTasksApp/Views/TasksPage.xaml +++ b/dotnet-maui/DittoMauiTasksApp/Views/TasksPage.xaml @@ -9,7 +9,8 @@ Command="{Binding AddTaskCommand}"/> - + - - + SelectionMode="None"> + - - - - - + + + + + + + + - + + + - + - - - + + + From 2b75ed327035b1091ea9f450fc04d2ed8143b2a3 Mon Sep 17 00:00:00 2001 From: busec0 Date: Tue, 1 Apr 2025 02:54:30 +0300 Subject: [PATCH 3/5] Add appropriate permissions --- .../DittoMauiTasksApp/Platforms/MacCatalyst/Info.plist | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/dotnet-maui/DittoMauiTasksApp/Platforms/MacCatalyst/Info.plist b/dotnet-maui/DittoMauiTasksApp/Platforms/MacCatalyst/Info.plist index dd03a24b2..fac7991bd 100644 --- a/dotnet-maui/DittoMauiTasksApp/Platforms/MacCatalyst/Info.plist +++ b/dotnet-maui/DittoMauiTasksApp/Platforms/MacCatalyst/Info.plist @@ -26,5 +26,15 @@ XSAppIconAssets Assets.xcassets/appicon.appiconset + NSBluetoothAlwaysUsageDescription + Uses Bluetooth to connect and sync with nearby devices + NSBluetoothPeripheralUsageDescription + Uses Bluetooth to connect and sync with nearby devices + NSLocalNetworkUsageDescription + Uses WiFi to connect and sync with nearby devices + NSBonjourServices + + _http-alt._tcp. + From b4376b55d75fecc14a289f4a98d99e68c13d1482 Mon Sep 17 00:00:00 2001 From: busec0 Date: Sat, 17 May 2025 10:49:48 +0300 Subject: [PATCH 4/5] Update to Ditto `4.11.0-preview.2`. Use `DittoSyncPermissions` instead of the old helper. --- .../DittoMauiTasksApp.csproj | 2 +- .../Utils/BluetoothPermissions.cs | 28 ----------- .../Utils/PermissionHelper.cs | 50 ------------------- .../ViewModels/TasksPageviewModel.cs | 2 +- 4 files changed, 2 insertions(+), 80 deletions(-) delete mode 100644 dotnet-maui/DittoMauiTasksApp/Utils/BluetoothPermissions.cs delete mode 100644 dotnet-maui/DittoMauiTasksApp/Utils/PermissionHelper.cs diff --git a/dotnet-maui/DittoMauiTasksApp/DittoMauiTasksApp.csproj b/dotnet-maui/DittoMauiTasksApp/DittoMauiTasksApp.csproj index 98540b412..4c5f6537a 100644 --- a/dotnet-maui/DittoMauiTasksApp/DittoMauiTasksApp.csproj +++ b/dotnet-maui/DittoMauiTasksApp/DittoMauiTasksApp.csproj @@ -36,7 +36,7 @@ - + diff --git a/dotnet-maui/DittoMauiTasksApp/Utils/BluetoothPermissions.cs b/dotnet-maui/DittoMauiTasksApp/Utils/BluetoothPermissions.cs deleted file mode 100644 index 72cf374dd..000000000 --- a/dotnet-maui/DittoMauiTasksApp/Utils/BluetoothPermissions.cs +++ /dev/null @@ -1,28 +0,0 @@ -namespace DittoMauiTasksApp.Utils; - -using static Microsoft.Maui.ApplicationModel.Permissions; - -public class NearbyDevicesPermission : BasePlatformPermission -{ - private readonly List<(string permission, bool isRuntime)> _requiredPermissions; - - public NearbyDevicesPermission() - { - _requiredPermissions = new List<(string permission, bool isRuntime)> - { - ("android.permission.BLUETOOTH_ADVERTISE", true), - ("android.permission.BLUETOOTH_SCAN", true), - ("android.permission.BLUETOOTH_CONNECT", true), - }; - - if (OperatingSystem.IsAndroidVersionAtLeast(33)) - { - _requiredPermissions.Add(("android.permission.NEARBY_WIFI_DEVICES", true)); - } - } - -#if ANDROID31_0_OR_GREATER - public override (string androidPermission, bool isRuntime)[] RequiredPermissions => - _requiredPermissions.ToArray(); -#endif -} diff --git a/dotnet-maui/DittoMauiTasksApp/Utils/PermissionHelper.cs b/dotnet-maui/DittoMauiTasksApp/Utils/PermissionHelper.cs deleted file mode 100644 index 89060b6b1..000000000 --- a/dotnet-maui/DittoMauiTasksApp/Utils/PermissionHelper.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -namespace DittoMauiTasksApp.Utils -{ - public static class PermissionHelper - { - public static async Task CheckPermissions() - { - PermissionStatus bluetoothStatus = await CheckBluetoothPermissions(); - - return IsGranted(bluetoothStatus); - } - - private static async Task CheckBluetoothPermissions() - { - PermissionStatus bluetoothStatus = PermissionStatus.Granted; - - if (DeviceInfo.Platform == DevicePlatform.Android) - { - if (DeviceInfo.Version.Major >= 12) - { - bluetoothStatus = await CheckPermissions(); - } - else - { - bluetoothStatus = await CheckPermissions(); - } - } - - return bluetoothStatus; - } - - private static async Task CheckPermissions() where TPermission : Permissions.BasePermission, new() - { - PermissionStatus status = await Permissions.CheckStatusAsync(); - - if (status != PermissionStatus.Granted) - { - status = await Permissions.RequestAsync(); - } - - return status; - } - - private static bool IsGranted(PermissionStatus status) - { - return status == PermissionStatus.Granted || status == PermissionStatus.Limited; - } - } -} - diff --git a/dotnet-maui/DittoMauiTasksApp/ViewModels/TasksPageviewModel.cs b/dotnet-maui/DittoMauiTasksApp/ViewModels/TasksPageviewModel.cs index ac403f7a8..c9c18afff 100644 --- a/dotnet-maui/DittoMauiTasksApp/ViewModels/TasksPageviewModel.cs +++ b/dotnet-maui/DittoMauiTasksApp/ViewModels/TasksPageviewModel.cs @@ -34,7 +34,7 @@ public TasksPageviewModel( this.popupService = popupService; this.logger = logger; - PermissionHelper.CheckPermissions().ContinueWith(async t => + DittoSyncPermissions.RequestPermissionsAsync().ContinueWith(async t => { try { From f64cee28950772955968114be8b076b0ebf75486 Mon Sep 17 00:00:00 2001 From: busec0 Date: Tue, 10 Jun 2025 14:14:41 +0300 Subject: [PATCH 5/5] update ditto to stable version --- dotnet-maui/DittoMauiTasksApp/DittoMauiTasksApp.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet-maui/DittoMauiTasksApp/DittoMauiTasksApp.csproj b/dotnet-maui/DittoMauiTasksApp/DittoMauiTasksApp.csproj index 4c5f6537a..09b3415a9 100644 --- a/dotnet-maui/DittoMauiTasksApp/DittoMauiTasksApp.csproj +++ b/dotnet-maui/DittoMauiTasksApp/DittoMauiTasksApp.csproj @@ -36,7 +36,7 @@ - +