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

MAUI Hosting Release Notes

Feature
macOS (AppKit) support for the dotnet/maui-labs backend. The net10.0-macos asset now carries IAppSupport and IAppStore alongside IStartupServiceAddAppSupport()/AddAppStore() call AddMacOSEssentials() themselves, so the static MAUI Essentials APIs resolve to the AppKit implementations. Culture and time-zone changes come through NSNotificationCenter, and IAppStore scopes the iTunes lookup to entity=macSoftware with macappstore:// deep links and StoreKit.AppStore.RequestReview for the in-app prompt
Feature
New package Shiny.Extensions.MauiHosting.Linux for the maui-labs GTK4 backend. AddLinuxAppSupport() provides IAppSupport over the GTK4 Essentials services (the static Essentials APIs throw on Linux), with an inotify watch on /etc/localtime for time-zone changes. AddLinuxAppStore() provides IAppStore over Flatpak and Snap — flatpak remote-info / snap info for the published version, and appstream:// deep links into GNOME Software, Plasma Discover or the Snap Store
Enhancement
AppStoreOptions.LinuxAppId — the AppStream component / Flatpak application ID, auto-detected from FLATPAK_ID or SNAP_NAME inside a sandbox
Chore
MAUI dependencies moved to 10.0.41, the minimum the maui-labs backends require
Fix
IAppStore.RequestReview() now uses the non-obsolete StoreKit.AppStore.RequestReview API on iOS/macCatalyst 16+, falling back to SKStoreReviewController only on older OS versions (resolves the CA1422 obsolete-API warning)
Enhancement
IAppSupport gains Platform (DeviceInfo.Platform.ToString()"Android", "iOS", "WinUI", "macOS") and DeviceIdiom (DeviceInfo.IdiomPhone, Tablet, Desktop, TV, Watch) properties
Enhancement
IAppSupport.OpenSettings - helper to deep-link to the app’s system settings page. Android uses Intent.ActionApplicationDetailsSettings; iOS/macCatalyst uses UIApplication.OpenSettingsUrlString; Windows opens the app’s “Manage my device” page in the Settings app
Enhancement
Bindable store objects are now more easily testable through CreateTestScope
BREAKINGFeature
The static host accessor Host has been renamed to ShinyHost. Update Host.Services references to ShinyHost.Services
Feature
IAppStore.RequestReview() — presents the platform’s native in-app review prompt without leaving the app (iOS/macCatalyst SKStoreReviewController, Windows StoreContext). The OS may throttle or silently suppress the prompt, so a true result means the prompt was requested, not that the user saw or completed it. Android has no dependency-free in-app review API and falls back to OpenReviewPage()
BREAKINGFeature
AddInfrastructureModules no longer auto-wires AppSupport or AppStore. Opt into each piece explicitly via AddAppSupport() and AddAppStore() so apps only pay for what they use
BREAKINGFeature
Removed AddPlatformLifecycle(), ILifecycleExecutor, and the per-platform lifecycle interfaces (IAppForeground, IAppBackground, IContinueActivity, IOnFinishedLaunching, IOnApplicationCreated, IOnActivityOnCreate, IOnActivityRequestPermissionsResult, IOnActivityNewIntent, IOnActivityResult). Platform lifecycle is dispatched by UseShiny() from Shiny.Hosting.Maui; register handlers against Shiny.Core’s IIosLifecycle.*, IMacLifecycle.*, and IAndroidLifecycle.* interfaces instead
Feature
IAppSupport — device info (AppVersion, DeviceManufacturer, DeviceModel, PlatformVersion), OpenBrowser and OpenMap helpers, plus the change-detection services below
Feature
IAppSupport.CurrentOrientation and OrientationChanged event surfaced through MAUI’s DeviceDisplay on iOS, Android, macCatalyst, and Windows
Feature
IAppSupport.SetOrientation / ResetOrientation — programmatic orientation lock. Android uses Activity.RequestedOrientation (sensor variants); iOS 16+ uses UIWindowScene.RequestGeometryUpdate; Windows uses DisplayInformation.AutoRotationPreferences
Feature
IAppSupport.CurrentCulture and CultureChanged event. iOS/macCatalyst hooks NSLocale.CurrentLocaleDidChangeNotification; Android registers a BroadcastReceiver on Intent.ActionLocaleChanged; Windows uses SystemEvents.UserPreferenceChanged; bare TFMs poll on a 30-second timer
Feature
IAppSupport.CurrentTimeZone and TimeZoneChanged event. iOS/macCatalyst hooks NSSystemTimeZoneDidChangeNotification; Android registers a BroadcastReceiver on Intent.ActionTimezoneChanged; Windows uses SystemEvents.TimeChanged; bare TFMs poll on a 30-second timer
Feature
IAppStore — cross-platform store info and deep links. GetCurrent returns store version, release notes, ratings, release date, and minimum OS version where supported. OpenStore and OpenReviewPage deep-link via itms-apps://, market://, or ms-windows-store://
FeatureiOS
App Store lookups via the iTunes Search API (itunes.apple.com/lookup?bundleId=…). Auto-caches the discovered trackId back into options so OpenStore works without configuration after the first lookup
FeatureAndroid
Play Store lookups via HTML scrape of play.google.com/store/apps/details with two GeneratedRegex strategies (JSON-LD softwareVersion plus legacy AF_initDataCallback pattern)
FeatureWindows
Microsoft Store lookups via the DisplayCatalog API (displaycatalog.mp.microsoft.com/v7.0/products)
Feature
AddAppStore(Action<AppStoreOptions>? configure = null) and convenience overload AddAppStore(string? appleAppId, string? androidPackageName, string? windowsProductId, string? countryCode) for inline configuration
Enhancement
Bundle / package identifiers now resolved via Microsoft.Maui.ApplicationModel.AppInfo.PackageName instead of native APIs — fewer #if branches and a single cross-platform code path
Feature
Initial release of Shiny.Extensions.MauiHosting
Feature
IMauiModule interface for modular MAUI app configuration — Add(MauiAppBuilder) for service registration, Use(IPlatformApplication) for post-build initialization
Feature
Static Host.Services property for accessing the service provider from anywhere after app initialization
Feature
ILifecycleExecutor for dispatching platform lifecycle events to registered handlers with error handling and logging
Feature
Shared lifecycle interfaces: IAppForeground and IAppBackground
FeatureiOS
Apple lifecycle interfaces: IContinueActivity, IOnFinishedLaunching
FeatureAndroid
Android lifecycle interfaces: IOnApplicationCreated, IOnActivityOnCreate, IOnActivityRequestPermissionsResult, IOnActivityNewIntent, IOnActivityResult