v2.2.0 (July 30, 2021)


  • [BREAKING] Shiny now uses it's own logger factory for Microsoft.Extension.Logging to provide a huge startup performance boost though this may break 3rd party providers. Shiny comes with Debug, Sqlite, and AppCenter out-of-the-box and they all work! GH0625
  • [Enhancement] Source generators will initialize Dan Siegel's excellent Mobile.BuildTools.Configuration if present
  • [Enhancement] Add the necessary constructor to ShinyStartup to register xplat services
  • [Enhancement][Android] Xamarin.Essentials is now wired in automatically by the source generators for Activity OnResume and OnNewIntent GH-620
  • [Enhancement][iOS] Xamarin.Essentials is now wired in automatically by the source generators for AppDelegate OpenUrl (if MSAL is not present) and PerformActionForShortcutItem
  • [Enhancement] New startup helper (services.ClearJobQueueBeforeRegistration) - this will clear any previously registered jobs before registering new startup jobs - this is useful if you only use startup jobs and you want to clean up potentially old versions of jobs
  • [Fix] Ensure global is generated in front of startup and XF app type names to ensure there is no collisions with other types
  • [Fix][Android] Activity handler was not sending out proper resume state GH-640
  • [Fix][Android] Platform state was not monitoring properly GH-640
  • [Fix] Job foregrounding won't run your job multiple times on startup
  • [Fix] BgTaskJobManager now calls the proper tasked jobs
  • [Fix] Ensure all state bindables are completed before startup tasks


  • [BREAKING] IBleManager.WhenAccessStatusChanged & IBleManager.Status removed - RequestAccess is a one stop shop
  • [Fix][Android] IBleManager.WhenStateChanged now responds properly on Android 10+
  • [Fix][Android] Pairing response now responds properly to accept and cancel of a request
  • [Fix] Device Info extension method was not returning properly


  • [BREAKING] IGpsManager/IGeofenceManager.WhenAccessStatusChanged & IGpsManager/IGeofenceManager.Status removed - RequestAccess is a one stop shop
  • [Enhancement] New extensions IGpsManager.GetCurrentPosition or IGpsManager.GetLastReadingOrCurrentPosition
  • [Enhancement] NEW GetCurrentPosition will now engage the GPS and wait for a reading as opposed to GetLastReading which will only give the last reading if available
  • [Fix][Android] Automatically ensure notifications are registered for foreground service GH-653
  • [Fix] GetLastReading will now request a reading if no location is current set on all platforms


  • [BREAKING][Android] BeaconMonitorConfig is now a required parameter and requires you set the ScanServiceUuids property to allow for proper background scanning. Check your beacon provider for what this value should be.
  • [Fix][Android][UWP] Allow multiple beacon regions to be ranged at once
  • [Fix][Android][UWP] Allow additional beacon packet sizes
  • [Enhancement][Android][UWP] Non-standard iBeacons are now supported


  • [BREAKING] Heart rate sensor has been removed - too many people were having issues with linker and iOS "health" permission request
  • [Enhancement][Android] Compass accuracy is now implemented