diff --git a/Marechai.App/App.xaml b/Marechai.App/App.xaml new file mode 100644 index 00000000..e430aa6d --- /dev/null +++ b/Marechai.App/App.xaml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + diff --git a/Marechai.App/App.xaml.cs b/Marechai.App/App.xaml.cs new file mode 100644 index 00000000..211a604e --- /dev/null +++ b/Marechai.App/App.xaml.cs @@ -0,0 +1,114 @@ +using System.Net.Http; +using Microsoft.UI.Xaml; +using Uno.Extensions; +using Uno.Extensions.Configuration; +using Uno.Extensions.Hosting; +using Uno.Extensions.Localization; +using Uno.Extensions.Navigation; +using Uno.Resizetizer; +using Uno.UI; + +namespace Marechai.App; + +public partial class App : Application +{ + /// + /// Initializes the singleton application object. This is the first line of authored code + /// executed, and as such is the logical equivalent of main() or WinMain(). + /// + public App() + { + this.InitializeComponent(); + } + + protected Window? MainWindow { get; private set; } + protected IHost? Host { get; private set; } + + protected async override void OnLaunched(LaunchActivatedEventArgs args) + { + var builder = this.CreateBuilder(args) + // Add navigation support for toolkit controls such as TabBar and NavigationView + .UseToolkitNavigation() + .Configure(host => host +#if DEBUG + // Switch to Development environment when running in DEBUG + .UseEnvironment(Environments.Development) +#endif + .UseLogging(configure: (context, logBuilder) => + { + // Configure log levels for different categories of logging + logBuilder + .SetMinimumLevel( + context.HostingEnvironment.IsDevelopment() ? LogLevel.Information : LogLevel.Warning) + + // Default filters for core Uno Platform namespaces + .CoreLogLevel(LogLevel.Warning); + + // Uno Platform namespace filter groups + // Uncomment individual methods to see more detailed logging + //// Generic Xaml events + //logBuilder.XamlLogLevel(LogLevel.Debug); + //// Layout specific messages + //logBuilder.XamlLayoutLogLevel(LogLevel.Debug); + //// Storage messages + //logBuilder.StorageLogLevel(LogLevel.Debug); + //// Binding related messages + //logBuilder.XamlBindingLogLevel(LogLevel.Debug); + //// Binder memory references tracking + //logBuilder.BinderMemoryReferenceLogLevel(LogLevel.Debug); + //// DevServer and HotReload related + //logBuilder.HotReloadCoreLogLevel(LogLevel.Information); + //// Debug JS interop + //logBuilder.WebAssemblyLogLevel(LogLevel.Debug); + }, enableUnoLogging: true) + .UseSerilog(consoleLoggingEnabled: true, fileLoggingEnabled: true) + .UseConfiguration(configure: configBuilder => + configBuilder + .EmbeddedSource() + .Section() + ) + // Enable localization (see appsettings.json for supported languages) + .UseLocalization() + .UseHttp((context, services) => + { +#if DEBUG + // DelegatingHandler will be automatically injected + services.AddTransient(); +#endif + }) + .ConfigureServices((context, services) => + { + // TODO: Register your services + //services.AddSingleton(); + }) + .UseNavigation(RegisterRoutes) + ); + MainWindow = builder.Window; + +#if DEBUG + MainWindow.UseStudio(); +#endif + MainWindow.SetWindowIcon(); + + Host = await builder.NavigateAsync(); + } + + private static void RegisterRoutes(IViewRegistry views, IRouteRegistry routes) + { + views.Register( + new ViewMap(ViewModel: typeof(ShellViewModel)), + new ViewMap(), + new DataViewMap() + ); + + routes.Register( + new RouteMap("", View: views.FindByViewModel(), + Nested: + [ + new("Main", View: views.FindByViewModel(), IsDefault: true), + new("Second", View: views.FindByViewModel()), + ] + ) + ); + } +} diff --git a/Marechai.App/Assets/Icons/icon.svg b/Marechai.App/Assets/Icons/icon.svg new file mode 100644 index 00000000..a15af53a --- /dev/null +++ b/Marechai.App/Assets/Icons/icon.svg @@ -0,0 +1,42 @@ + + + + + + diff --git a/Marechai.App/Assets/Icons/icon_foreground.svg b/Marechai.App/Assets/Icons/icon_foreground.svg new file mode 100644 index 00000000..8ffc41ae --- /dev/null +++ b/Marechai.App/Assets/Icons/icon_foreground.svg @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Marechai.App/Assets/SharedAssets.md b/Marechai.App/Assets/SharedAssets.md new file mode 100644 index 00000000..b1cc4e76 --- /dev/null +++ b/Marechai.App/Assets/SharedAssets.md @@ -0,0 +1,32 @@ +# Shared Assets + +See documentation about assets here: https://github.com/unoplatform/uno/blob/master/doc/articles/features/working-with-assets.md + +## Here is a cheat sheet + +1. Add the image file to the `Assets` directory of a shared project. +2. Set the build action to `Content`. +3. (Recommended) Provide an asset for various scales/dpi + +### Examples + +```text +\Assets\Images\logo.scale-100.png +\Assets\Images\logo.scale-200.png +\Assets\Images\logo.scale-400.png + +\Assets\Images\scale-100\logo.png +\Assets\Images\scale-200\logo.png +\Assets\Images\scale-400\logo.png +``` + +### Table of scales + +| Scale | WinUI | iOS | Android | +|-------|:-----------:|:---------------:|:-------:| +| `100` | scale-100 | @1x | mdpi | +| `125` | scale-125 | N/A | N/A | +| `150` | scale-150 | N/A | hdpi | +| `200` | scale-200 | @2x | xhdpi | +| `300` | scale-300 | @3x | xxhdpi | +| `400` | scale-400 | N/A | xxxhdpi | diff --git a/Marechai.App/Assets/Splash/splash_screen.svg b/Marechai.App/Assets/Splash/splash_screen.svg new file mode 100644 index 00000000..8ffc41ae --- /dev/null +++ b/Marechai.App/Assets/Splash/splash_screen.svg @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Marechai.App/GlobalUsings.cs b/Marechai.App/GlobalUsings.cs new file mode 100644 index 00000000..8abee770 --- /dev/null +++ b/Marechai.App/GlobalUsings.cs @@ -0,0 +1,13 @@ +global using System.Collections.Immutable; +global using Microsoft.Extensions.DependencyInjection; +global using Microsoft.Extensions.Hosting; +global using Microsoft.Extensions.Localization; +global using Microsoft.Extensions.Logging; +global using Microsoft.Extensions.Options; +global using Marechai.App.Models; +global using Marechai.App.Presentation; +global using Marechai.App.Services.Endpoints; +global using Uno.Extensions.Http.Kiota; +global using ApplicationExecutionState = Windows.ApplicationModel.Activation.ApplicationExecutionState; +global using CommunityToolkit.Mvvm.ComponentModel; +global using CommunityToolkit.Mvvm.Input; diff --git a/Marechai.App/Marechai.App.csproj b/Marechai.App/Marechai.App.csproj new file mode 100644 index 00000000..5fedfef5 --- /dev/null +++ b/Marechai.App/Marechai.App.csproj @@ -0,0 +1,42 @@ + + + net10.0-android;net10.0-browserwasm;net10.0-desktop + $(TargetFrameworks);net10.0-ios + + Exe + true + + + Marechai.App + + net.marechai.app + + 1.0 + 1 + + O=Marechai.App + + Marechai.App powered by Uno Platform. + + + + Lottie; + Hosting; + Toolkit; + Logging; + LoggingSerilog; + Mvvm; + Configuration; + HttpKiota; + Serialization; + Localization; + Navigation; + ThemeService; + SkiaRenderer; + + + + diff --git a/Marechai.App/Models/AppConfig.cs b/Marechai.App/Models/AppConfig.cs new file mode 100644 index 00000000..6a43cf7c --- /dev/null +++ b/Marechai.App/Models/AppConfig.cs @@ -0,0 +1,6 @@ +namespace Marechai.App.Models; + +public record AppConfig +{ + public string? Environment { get; init; } +} diff --git a/Marechai.App/Models/Entity.cs b/Marechai.App/Models/Entity.cs new file mode 100644 index 00000000..1550bcd8 --- /dev/null +++ b/Marechai.App/Models/Entity.cs @@ -0,0 +1,3 @@ +namespace Marechai.App.Models; + +public record Entity(string Name); diff --git a/Marechai.App/Package.appxmanifest b/Marechai.App/Package.appxmanifest new file mode 100644 index 00000000..9ef38146 --- /dev/null +++ b/Marechai.App/Package.appxmanifest @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Marechai.App/Platforms/Android/AndroidManifest.xml b/Marechai.App/Platforms/Android/AndroidManifest.xml new file mode 100644 index 00000000..95ae0753 --- /dev/null +++ b/Marechai.App/Platforms/Android/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + diff --git a/Marechai.App/Platforms/Android/Assets/AboutAssets.txt b/Marechai.App/Platforms/Android/Assets/AboutAssets.txt new file mode 100644 index 00000000..89ab409d --- /dev/null +++ b/Marechai.App/Platforms/Android/Assets/AboutAssets.txt @@ -0,0 +1,22 @@ +To add cross-platform image assets for your Uno Platform app, use the Assets folder +in the shared project instead. Assets in this folder are Android-only assets. + +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories) and given a Build Action of "AndroidAsset". + +These files will be deployed with your package and will be accessible using Android's +AssetManager, like this: + +public class ReadAsset : Activity +{ + protected override void OnCreate (Bundle bundle) + { + base.OnCreate (bundle); + + InputStream input = Assets.Open ("my_asset.txt"); + } +} + +Additionally, some Android functions will automatically load asset files: + +Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); diff --git a/Marechai.App/Platforms/Android/Main.Android.cs b/Marechai.App/Platforms/Android/Main.Android.cs new file mode 100644 index 00000000..b6550644 --- /dev/null +++ b/Marechai.App/Platforms/Android/Main.Android.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Android.App; +using Android.Content; +using Android.OS; +using Android.Runtime; +using Android.Views; +using Android.Widget; +using Microsoft.UI.Xaml.Media; + +namespace Marechai.App.Droid; + +[global::Android.App.ApplicationAttribute( + Label = "@string/ApplicationName", + Icon = "@mipmap/icon", + LargeHeap = true, + HardwareAccelerated = true, + Theme = "@style/Theme.App.Starting" +)] +public class Application : Microsoft.UI.Xaml.NativeApplication +{ + public Application(IntPtr javaReference, JniHandleOwnership transfer) + : base(() => new App(), javaReference, transfer) + { + } +} diff --git a/Marechai.App/Platforms/Android/MainActivity.Android.cs b/Marechai.App/Platforms/Android/MainActivity.Android.cs new file mode 100644 index 00000000..0e9218a6 --- /dev/null +++ b/Marechai.App/Platforms/Android/MainActivity.Android.cs @@ -0,0 +1,22 @@ +using Android.App; +using Android.Content.PM; +using Android.OS; +using Android.Views; +using Android.Widget; + +namespace Marechai.App.Droid; + +[Activity( + MainLauncher = true, + ConfigurationChanges = global::Uno.UI.ActivityHelper.AllConfigChanges, + WindowSoftInputMode = SoftInput.AdjustNothing | SoftInput.StateHidden +)] +public class MainActivity : Microsoft.UI.Xaml.ApplicationActivity +{ + protected override void OnCreate(Bundle? savedInstanceState) + { + global::AndroidX.Core.SplashScreen.SplashScreen.InstallSplashScreen(this); + + base.OnCreate(savedInstanceState); + } +} diff --git a/Marechai.App/Platforms/Android/Resources/AboutResources.txt b/Marechai.App/Platforms/Android/Resources/AboutResources.txt new file mode 100644 index 00000000..17e3b133 --- /dev/null +++ b/Marechai.App/Platforms/Android/Resources/AboutResources.txt @@ -0,0 +1,47 @@ +To add cross-platform image assets for your Uno Platform app, use the Assets folder +in the shared project instead. Resources in this folder are Android-only. + +Images, layout descriptions, binary blobs and string dictionaries can be included +in your application as resource files. Various Android APIs are designed to +operate on the resource IDs instead of dealing with images, strings or binary blobs +directly. + +For example, a sample Android app that contains a user interface layout (main.axml), +an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) +would keep its resources in the "Resources" directory of the application: + +Resources/ + drawable/ + icon.png + + layout/ + main.axml + + values/ + strings.xml + +In order to get the build system to recognize Android resources, set the build action to +"AndroidResource". The native Android APIs do not operate directly with filenames, but +instead operate on resource IDs. When you compile an Android application that uses resources, +the build system will package the resources for distribution and generate a class called "R" +(this is an Android convention) that contains the tokens for each one of the resources +included. For example, for the above Resources layout, this is what the R class would expose: + +public class R { + public class drawable { + public const int icon = 0x123; + } + + public class layout { + public const int main = 0x456; + } + + public class strings { + public const int first_string = 0xabc; + public const int second_string = 0xbcd; + } +} + +You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main +to reference the layout/main.axml file, or R.strings.first_string to reference the first +string in the dictionary file values/strings.xml. diff --git a/Marechai.App/Platforms/Android/Resources/values/Strings.xml b/Marechai.App/Platforms/Android/Resources/values/Strings.xml new file mode 100644 index 00000000..f3b06fcd --- /dev/null +++ b/Marechai.App/Platforms/Android/Resources/values/Strings.xml @@ -0,0 +1,5 @@ + + + Hello World, Click Me! + Marechai.App + diff --git a/Marechai.App/Platforms/Android/Resources/values/Styles.xml b/Marechai.App/Platforms/Android/Resources/values/Styles.xml new file mode 100644 index 00000000..f47dcf36 --- /dev/null +++ b/Marechai.App/Platforms/Android/Resources/values/Styles.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/Marechai.App/Platforms/Android/environment.conf b/Marechai.App/Platforms/Android/environment.conf new file mode 100644 index 00000000..d8c10645 --- /dev/null +++ b/Marechai.App/Platforms/Android/environment.conf @@ -0,0 +1,2 @@ +# See this for more details: http://developer.xamarin.com/guides/android/advanced_topics/garbage_collection/ +MONO_GC_PARAMS=bridge-implementation=new,nursery-size=32m,soft-heap-limit=256m \ No newline at end of file diff --git a/Marechai.App/Platforms/Desktop/Program.cs b/Marechai.App/Platforms/Desktop/Program.cs new file mode 100644 index 00000000..1bc38775 --- /dev/null +++ b/Marechai.App/Platforms/Desktop/Program.cs @@ -0,0 +1,21 @@ +using System; +using Uno.UI.Hosting; + +namespace Marechai.App; + +internal class Program +{ + [STAThread] + public static void Main(string[] args) + { + var host = UnoPlatformHostBuilder.Create() + .App(() => new App()) + .UseX11() + .UseLinuxFrameBuffer() + .UseMacOS() + .UseWin32() + .Build(); + + host.Run(); + } +} diff --git a/Marechai.App/Platforms/WebAssembly/LinkerConfig.xml b/Marechai.App/Platforms/WebAssembly/LinkerConfig.xml new file mode 100644 index 00000000..83f467ad --- /dev/null +++ b/Marechai.App/Platforms/WebAssembly/LinkerConfig.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/Marechai.App/Platforms/WebAssembly/Program.cs b/Marechai.App/Platforms/WebAssembly/Program.cs new file mode 100644 index 00000000..6c8c48e4 --- /dev/null +++ b/Marechai.App/Platforms/WebAssembly/Program.cs @@ -0,0 +1,17 @@ +using System.Threading.Tasks; +using Uno.UI.Hosting; + +namespace Marechai.App; + +public class Program +{ + public static async Task Main(string[] args) + { + var host = UnoPlatformHostBuilder.Create() + .App(() => new App()) + .UseWebAssembly() + .Build(); + + await host.RunAsync(); + } +} diff --git a/Marechai.App/Platforms/WebAssembly/WasmCSS/Fonts.css b/Marechai.App/Platforms/WebAssembly/WasmCSS/Fonts.css new file mode 100644 index 00000000..4fdd6055 --- /dev/null +++ b/Marechai.App/Platforms/WebAssembly/WasmCSS/Fonts.css @@ -0,0 +1,28 @@ +/** + When adding fonts here, make sure to add them using a base64 data uri, otherwise + fonts loading are delayed, and text may get displayed incorrectly. +*/ + +/* https://github.com/unoplatform/uno/issues/3954 */ +@font-face { + font-family: 'Segoe UI'; + src: local('Segoe UI'), local('-apple-system'), local('BlinkMacSystemFont'), local('Inter'), local('Cantarell'), local('Ubuntu'), local('Roboto'), local('Open Sans'), local('Noto Sans'), local('Helvetica Neue'), local('sans-serif'); +} + +@font-face { + font-family: 'Roboto'; + src: url(./Uno.Fonts.Roboto/Fonts/Roboto-Light.ttf) format('truetype'); + font-weight: 300; +} + +@font-face { + font-family: 'Roboto'; + src: url(./Uno.Fonts.Roboto/Fonts/Roboto-Regular.ttf) format('truetype'); + font-weight: 400; +} + +@font-face { + font-family: 'Roboto'; + src: url(./Uno.Fonts.Roboto/Fonts/Roboto-Medium.ttf) format('truetype'); + font-weight: 500; +} diff --git a/Marechai.App/Platforms/WebAssembly/WasmScripts/AppManifest.js b/Marechai.App/Platforms/WebAssembly/WasmScripts/AppManifest.js new file mode 100644 index 00000000..d3077021 --- /dev/null +++ b/Marechai.App/Platforms/WebAssembly/WasmScripts/AppManifest.js @@ -0,0 +1,3 @@ +var UnoAppManifest = { + displayName: "Marechai.App" +} diff --git a/Marechai.App/Platforms/WebAssembly/manifest.webmanifest b/Marechai.App/Platforms/WebAssembly/manifest.webmanifest new file mode 100644 index 00000000..d48c991a --- /dev/null +++ b/Marechai.App/Platforms/WebAssembly/manifest.webmanifest @@ -0,0 +1,10 @@ +{ + "background_color": "#ffffff", + "description": "Marechai.App", + "display": "standalone", + "name": "Marechai.App", + "short_name": "Marechai.App", + "start_url": "/index.html", + "theme_color": "#ffffff", + "scope": "/" +} diff --git a/Marechai.App/Platforms/WebAssembly/wwwroot/staticwebapp.config.json b/Marechai.App/Platforms/WebAssembly/wwwroot/staticwebapp.config.json new file mode 100644 index 00000000..79c1b17c --- /dev/null +++ b/Marechai.App/Platforms/WebAssembly/wwwroot/staticwebapp.config.json @@ -0,0 +1,30 @@ +{ + "navigationFallback": { + "rewrite": "/index.html", + "exclude": [ + "*.{css,js}", + "*.{png}", + "*.{c,h,wasm,clr,pdb,dat,txt}" + ] + }, + "routes": [ + { + "route": "/package_*", + "headers": { + "cache-control": "public, immutable, max-age=31536000" + } + }, + { + "route": "/*.ttf", + "headers": { + "cache-control": "public, immutable, max-age=31536000" + } + }, + { + "route": "/*", + "headers": { + "cache-control": "must-revalidate, max-age=3600" + } + } + ] +} diff --git a/Marechai.App/Platforms/WebAssembly/wwwroot/web.config b/Marechai.App/Platforms/WebAssembly/wwwroot/web.config new file mode 100644 index 00000000..8f5a860f --- /dev/null +++ b/Marechai.App/Platforms/WebAssembly/wwwroot/web.config @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Marechai.App/Platforms/iOS/Entitlements.plist b/Marechai.App/Platforms/iOS/Entitlements.plist new file mode 100644 index 00000000..24c31036 --- /dev/null +++ b/Marechai.App/Platforms/iOS/Entitlements.plist @@ -0,0 +1,6 @@ + + + + + + diff --git a/Marechai.App/Platforms/iOS/Info.plist b/Marechai.App/Platforms/iOS/Info.plist new file mode 100644 index 00000000..ea3dcb4b --- /dev/null +++ b/Marechai.App/Platforms/iOS/Info.plist @@ -0,0 +1,43 @@ + + + + + LSRequiresIPhoneOS + + UIDeviceFamily + + 1 + 2 + + UIRequiredDeviceCapabilities + + armv7 + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + XSAppIconAssets + Assets.xcassets/icon.appiconset + UIApplicationSupportsIndirectInputEvents + + + + + diff --git a/Marechai.App/Platforms/iOS/Main.iOS.cs b/Marechai.App/Platforms/iOS/Main.iOS.cs new file mode 100644 index 00000000..57618e7b --- /dev/null +++ b/Marechai.App/Platforms/iOS/Main.iOS.cs @@ -0,0 +1,18 @@ +using UIKit; +using Uno.UI.Hosting; + +namespace Marechai.App.iOS; + +public class EntryPoint +{ + // This is the main entry point of the application. + public static void Main(string[] args) + { + var host = UnoPlatformHostBuilder.Create() + .App(() => new App()) + .UseAppleUIKit() + .Build(); + + host.Run(); + } +} diff --git a/Marechai.App/Platforms/iOS/Media.xcassets/LaunchImages.launchimage/Contents.json b/Marechai.App/Platforms/iOS/Media.xcassets/LaunchImages.launchimage/Contents.json new file mode 100644 index 00000000..69555e44 --- /dev/null +++ b/Marechai.App/Platforms/iOS/Media.xcassets/LaunchImages.launchimage/Contents.json @@ -0,0 +1,58 @@ +{ + "images": [ + { + "orientation": "portrait", + "extent": "full-screen", + "minimum-system-version": "7.0", + "scale": "2x", + "size": "640x960", + "idiom": "iphone" + }, + { + "orientation": "portrait", + "extent": "full-screen", + "minimum-system-version": "7.0", + "subtype": "retina4", + "scale": "2x", + "size": "640x1136", + "idiom": "iphone" + }, + { + "orientation": "portrait", + "extent": "full-screen", + "minimum-system-version": "7.0", + "scale": "1x", + "size": "768x1024", + "idiom": "ipad" + }, + { + "orientation": "landscape", + "extent": "full-screen", + "minimum-system-version": "7.0", + "scale": "1x", + "size": "1024x768", + "idiom": "ipad" + }, + { + "orientation": "portrait", + "extent": "full-screen", + "minimum-system-version": "7.0", + "scale": "2x", + "size": "1536x2048", + "idiom": "ipad" + }, + { + "orientation": "landscape", + "extent": "full-screen", + "minimum-system-version": "7.0", + "scale": "2x", + "size": "2048x1536", + "idiom": "ipad" + } + ], + "properties": {}, + "info": { + "version": 1, + "author": "" + } +} \ No newline at end of file diff --git a/Marechai.App/Platforms/iOS/PrivacyInfo.xcprivacy b/Marechai.App/Platforms/iOS/PrivacyInfo.xcprivacy new file mode 100644 index 00000000..902abb05 --- /dev/null +++ b/Marechai.App/Platforms/iOS/PrivacyInfo.xcprivacy @@ -0,0 +1,41 @@ + + + + + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryDiskSpace + NSPrivacyAccessedAPITypeReasons + + E174.1 + + + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + diff --git a/Marechai.App/Presentation/MainPage.xaml b/Marechai.App/Presentation/MainPage.xaml new file mode 100644 index 00000000..300d2e95 --- /dev/null +++ b/Marechai.App/Presentation/MainPage.xaml @@ -0,0 +1,29 @@ + + + + + + + + + + + +