Skip to content
Shiny.NET
Shiny MAUI Shell v7 - App Links, App Shortcuts, & Navigation Interception!Shortcut me to it

App Support

Frameworks
.NET MAUI

IAppSupport exposes device info, browser/map helpers, and live notifications for changes the user may make in system settings (orientation, locale, time zone). Each event has its own lazy subscription — the native listener spins up when you add the first handler and tears down when the last one detaches.

using Shiny;
builder.AddAppSupport(); // registers IAppSupport

On a macOS (AppKit) head this also calls AddMacOSEssentials() for you. On a Linux (GTK4) head call AddLinuxAppSupport() from Shiny.Extensions.MauiHosting.Linux instead — see Desktop Backends.

public class SettingsViewModel
{
public SettingsViewModel(IAppSupport app)
{
// Snapshot
Version current = app.AppVersion;
DisplayOrientation o = app.CurrentOrientation;
CultureInfo culture = app.CurrentCulture;
TimeZoneInfo tz = app.CurrentTimeZone;
// Live updates
app.OrientationChanged += (s, e) => { /* e is the new orientation */ };
app.CultureChanged += (s, e) => { /* e is the new CultureInfo */ };
app.TimeZoneChanged += (s, e) => { /* e is the new TimeZoneInfo */ };
}
}
Member Notes
AppVersion AppInfo.Version — the running app’s version (CFBundleShortVersionString on iOS, versionName on Android)
DeviceManufacturer, DeviceModel From MAUI DeviceInfo
Platform DeviceInfo.Platform.ToString()"Android", "iOS", "WinUI", "macOS"
DeviceIdiom DeviceInfo.IdiomPhone, Tablet, Desktop, TV, Watch
PlatformVersion DeviceInfo.Version — the OS version
CurrentOrientation + OrientationChanged Surfaced through MAUI’s DeviceDisplay.MainDisplayInfoChanged on iOS/Android/macCatalyst/macOS/Windows
CurrentCulture + CultureChanged Native listeners on every platform; 30-second poller on bare TFMs
CurrentTimeZone + TimeZoneChanged Native listeners on every platform; 30-second poller on bare TFMs
OpenBrowser Wraps Browser.OpenAsync
OpenMap Wraps Map.TryOpenAsync
SetOrientation(DisplayOrientation) Programmatic orientation lock — returns false if the platform can’t honor the request
ResetOrientation() Clears any lock set via SetOrientation
await app.SetOrientation(DisplayOrientation.Landscape); // lock to landscape
await app.ResetOrientation(); // restore system default
Platform Mechanism
Android Activity.RequestedOrientation set to SensorPortrait / SensorLandscape (sensor variants let the device flip between left/right)
iOS 16+ UIWindowScene.RequestGeometryUpdate — the active view controller must permit the mask via supportedInterfaceOrientations or the request is silently dropped
iOS 15 and earlier Not supported — returns false
macCatalyst / macOS (AppKit) / Linux (GTK4) Not supported (desktop windows don’t rotate) — returns false
Windows DisplayInformation.AutoRotationPreferences