• Mobile
  • Extensions
  • Releases
  • GitHub
  • Blog
  • Sponsor
Show / Hide Table of Contents
  • Mobile
    • v3.0 ALPHA
    • v2.7.0 (Stable)
    • v2.x
    • v1.x
  • Extensions
    • v1.3.0

2.6.3 September 25, 2022

BluetoothLE

  • [Android] Removing BLUETOOTH_PRIVILEGED permission

Push - Firebase

  • [Android][Fix] Delegate method was no longer being detected

2.6.2 August 25, 2022

NFC

  • [Fix][iOS] Read errors on certain tag/ndef types

BluetoothLE

  • [Enhancement][Android] Improved error messaging with regards to missing manifest permissions

2.6.1 August 15, 2022

Bluetooth LE

  • [Fix][Android] Remove another old permission that is only needed for everything before Android 12

2.6.0 August 9, 2022

Core

  • [Fix] InvokeTaskOnMainThread separated from InvokeOnMainThreadAsync to fix wrong signatures being used internally

BluetoothLE

  • [Enhancement][Android] Now only requests BLUETOOTH_SCAN and BLUETOOTH_CONNECT if necessary for API level 31 GH-1060

BluetoothLE Hosting

  • [BREAKING][Enhancement] All characteristic hooks are now async
  • [BREAKING][Android] All android specific properties and manufacturer data advertising options have been removed
  • [Enhancement][Android] IBleHostingManager.RequestAccess(bool advertise = true, bool connect = true) allows user to request appropriate permissions
  • [Enhancement][Android] Now only uses the appropriate on API level 31
  • [Enhancement][Android] LocalName is now advertised

Notifications

  • [BREAKING][Fix] Attachment (FileInfo) is now LocalAttachmentPath (string) to prevent confusion
  • [BREAKING] Notification.Sound is now an enum with the following values:
    • High
    • Default
    • Custom
    • None
  • [iOS][BREAKING][Enhancement] Time Sensitive notifications are no longer used by default as they require an extra entitlement being setup, thus you must now specify NotificationManager.UseTimeSensitiveAlerts = true; on iOS in order to enable them
  • [iOS][Fix] Time sensitive permission is only used if enabled, channel importance of high, and a scheduled date is set
  • [iOS][Enhancement] Local notification acknowledgement now uses Banner instead of Alert to remove iOS deprecation GH-1055
  • [Android][iOS][Fix] Notification.ImageUri is replaced with Notification.Attachment (FileInfo) as files must be local for attachments

HTTP Transfers

  • [iOS][Fix] Error messages for downloads are now provided GH-1048

2.5.5 June 17, 2022

Core

  • [Android][Fix] Generators will generate OnCreate. Only ShinyOnCreate has been removed since this hook is not required by Shiny any longer

BluetoothLE

  • [Android][Fix] GattCharacteristic.GetDescriptors crash

2.5.4 - June 7, 2022

Locations

  • [Android][Fix] Some devices were experiencing missed GPS readings

2.5.3 - June 1, 2022

Locations

  • [Android][Fix] Geofencing startup would crash if permission had been removed GH-2013

2.5.2 - May 24, 2022

Notifications

  • [Android][Fix] Notification permission on Android 11 & under
  • [Fix] IntervalTrigger was not calculating next date properly when day was chosen

BluetoothLE

  • [Fix] Managed peripheral notification "Key Exists Already"
  • [iOS][Fix] Null safety on background scan

2.5.0 - May 5, 2022

Core

  • [BREAKING][Android] Major target is now Android 12
  • [Enhancement][Android] Bump all AndroidX libraries to next required version of Android 12 functionality
  • [Enhancement] Improved boilerplate 3rd party library generation - now includes FFImageLoading
  • [Enhancement] More extension methods (RX SwitchSelect, Task WithTimeout)
  • [Enhancement] Internal improvements to repository
  • [Enhancement] Generator now detects and initializes Xamarin.Forms.Maps

GPS

  • [BREAKING] GpsAccuracy replaces Priority, Precise, Interval, ThrottledInterval, & MinimumDistance. These filters didn't work on iOS

Push

  • [Android][Fix] OnEntry now works with click_action when set to SHINY_NOTIFICATION_CLICK

Push (Firebase)

  • [Enhancement][iOS] Push to next major version of iOS firebase libraries

BluetoothLE

  • [BREAKING][Enhancement] ManagedPeripheral has dropped ability to monitor any notification in favour of WhenNotificationReceived being a one stop shop for enabling/disabling notifications and restoring them on reconnections
  • [Fix][Android] Peripheral.ReadRssi not working GH-913
  • [Fix] ManagedPeripheral.WhenNotificationReceived was not checking equality properly for all characteristics GH-958
  • [Fix][iOS] Service data had service UUID prefixed to the data GH-987

Bluetooth LE Hosting

  • [Enhancement] MTU property now available on a connected peripheral GH-970
  • [Enhancement] Service builder AddReadCharacteristic and AddWriteCharacteristic trap errors underneath the hood to send back failures to central. New signature also provides the actual central performing the action

Notifications

  • [BREAKING] Badge is no longer a property - Use SetBadge (async) and GetBadge (async) instead (thank iOS for this change)
  • [BREAKING] Clear is now Cancel
  • [BREAKING] GetPending is now GetPendingNotifications
  • [Enhancement] You can now set an ImageUri on notifications
  • [Enhancement] Cancel allows for you to pass a scope of what to clear. DisplayedOnly - clears only notifications that are on the home screen. Pending - anything that has a trigger (geofence, schedule, interval). All - the default and does everything
  • [Enhancement][Android] Android now uses exact timers as opposed to jobs
  • [Enhancement][iOS] Channel importance now maps to iOS interruption level
  • [Enhancement] Cross platform (repeatable) geofence based notifications
  • [Enhancement] Ability to set thread (iOS)/group (Android) using notification.Thread
  • [Enhancement][Android][iOS] Scheduled and Interval based repeatable notifications

2.4.3 (January 2022)

Bluetooth LE

  • [Fix] ManagedPeripheral properly restores and set notifications GH-902

Locations

  • [Enhancement][Android] RequestLocationUpdates now ensures main thread call
  • [Fix][iOS] RequestAccess calls do not return immediately if user has previously denied access

2.4.2 (December 2021)

Core

  • [Enhancement] Jobs is now included as part of Shiny codegen package
  • [Fix] GenerateStaticClasses requires a namespace - removed optional arg on it

Jobs

  • [Fix][iOS] Fallback job manager needs to requestaccess on the ui thread GH-835

Bluetooth LE

  • [Fix] Ensure write is performed for ManagedPeripheral
  • [Enhancement] Characteristic.WriteBlob now takes a timeout for individual packet sends

HTTP Transfers

  • [Fix][iOS] Fix line endings for file upload headers

v2.4.1 (November 2021)

ALL

  • Fix UWP target for all modules

HTTP Transfers

  • [Fix][iOS] Additional header for file uploads (Big thanks to Guido Neele for all his help on this)

v2.4.0 (November 2021)

Core

  • [BREAKING][Android] Now targets Android 11 by default
  • [Fix] Message bus named events were not being published properly GH-772
  • [Fix] Android 11+ opens a complete app when requesting permissions for location, thus permission requests could fail on Shiny in race scenarios. Shiny no longer checks if the request is made on the foreground
  • [Fix] Message bus named broadcast was not publishing GH-772
  • [Enhancement] Now using latest versions of Microsoft Extensions

BluetoothLE

  • [Fix][Android] Background permission is no longer inserted into the manifest

Locations

  • [Fix][Android] Location permissions for background must be done separate from other permissions now as per Android 11+
  • [Fix][Android] Locations permission on Android 12 requires coarse & fine permissions, even if you only need fine
  • [Fix][iOS] Background was not respecting deferrals GH-783
  • [Enhancement][Android] Background permission is no longer enforced on package, but will throw an exception if it is requested and not put in the manifest
  • [Enhancement][Android] Motion activity permission is no longer inserted automatically into your AndroidManifest.xml. An exception is thrown in its place if it is not present in the manifest when it is requested.
  • [Enhancement][Android] GpsRequest now has GpsBackgroundMode (None, Standard, RealTime). Realtime creates the foreground service & background is a periodic ping with GPS coordinates
  • [Enhancement][iOS][Android] GpsRequest now has Precise (Android: Fine) that (on Android requests) ensures fine requirements are met or at least return AccessState.Restricted when they are not

Notifications

  • [Fix][Android] Channels were not being set GH-774

HTTP Transfers

  • [Fix][Android] Add postdata to uploads multipart content GH-761
  • [Fix][Android] Ensure final response from upload is successful GH-771
  • [Fix][iOS] Fix invalid uploads not working GH-782
  • [Fix][iOS] Ensure delegate OnCompleted is called when upload is completed GH-782
  • [Enhancement][iOS] Now uploads files using form-data to ensure a consistent experience across platforms GH-794
  • [BREAKING][UWP] Uwp has been removed, however, you can use the netstandard httpclient drivers

v2.3.0 (October 2021)

Core

  • [BREAKING] Jobs has been moved from Shiny.Core to its own module Shiny.Jobs
  • [BREAKING][iOS] Default store is now secure storage (KeyChain) to deal with potential auto-start issues before device has been unlocked
  • [Enhancement] Object binding failures now log specifics on what failed
  • [Fix] Startup registration was failing on optional delegates
  • [Fix] Update job registration to Shiny.Jobs

BluetoothLE

  • [Fix] Managed Scan Result now returns as IAdvertisementData for consistency
  • [Fix] ManagedScan.Start is now async to expose permission issues before starting the scan GH-698
  • [Fix] ManagedScan.Toggle has been moved to an extension method

Beacons

  • [Enhancement] Managed beacon ranging scan now has Start as async so permissions can be checked
  • [Fix] ManagedBeacon result now includes the region identifier

Locations

  • [Enhancement] GpsManager.GetCurrentPosition will start/stop the GPS tracking only if it wasn't started before
  • [Enhancement] IGpsManager.StartAndReceive starts GPS when subscribe and turns it off when unsubscribed OR the app goes to the background
  • [Fix] GPS setting state is only written to settings if background is used
  • [Fix][iOS] Will only attempt to auto-start the GPS tracking in background if authorization status has been fully granted (Always Allow)

Jobs

  • [Enhancement] UsesJobs now allows you to manually register the job manager - RegisterJob will call this automatically
  • [Enhancement] Foregrounding is now always available if you set your job as "RunInForeground", there is no need to call UseForegroundJobs
  • [Fix][iOS] BGTasks - Correct filters applied to all modes
  • [Fix] Move up exception base for missing job types due to the job being deleted or renamed GH-762

Notifications

  • [Enhancement] Foreground service notifications will use channel that does not show application badge notification GH-734
  • [Enhancement] Custom sounds work for critical notifications GH-757

Push

  • [BREAKING] IPushDelegate.OnTokenChanged is now called IPushDelegate.OnTokenRefreshed
  • [BREAKING] Channels are no longer registered within Push. Use INotificationManager to do this. If you need more customization over notification, send data messages and use INotificationManager
  • [Fix][Android] OnEntry now functions under all modules
  • [Fix][iOS][Native] IPushDelegate.OnTokenChanged is no longer called by RequestAccess and the proper token is returned

Push - Azure Notification Hubs

  • [Fix] ANH can often fail with "Microsoft.Azure.NotificationHubs.Messaging.MessagingEntityNotFoundException: Installation not found.TrackingId:XXXX" for rapid calls (ie. RequestAccess immediately followed by SetTags)
  • [Enhancement] You can now configure a timespan for when azure installations should expire if not used.

v2.2.0 (July 30, 2021)

Core

  • [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

BluetoothLE

  • [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

Locations

  • [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

Beacons

  • [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

Sensors

  • [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

v2.1.1 (July 2, 2021)

Push - Azure Notification Hubs

  • [Fix][iOS] Missing logger was causing NRE's

Locations

  • [Android][Fix] Geofencing now checks all permission properly #623

v2.1.0 (June 10, 2021)

Core

  • [BREAKING][UWP] UWP has new boilerplate requirements
  • [Fix][UWP] Application Data Settings issue with duplicate keys
  • [Enhancement] RX helper - SelectAsync
  • [Enhancement][Android] Improved permission requests
  • [Enhancement] Under the hood improvements to state restoration and startup tasks
  • [Enhancement] IPlatform now includes InvokeOnMainThread x-plat calls

Code Generator

  • [Fix][iOS] MSAL wireup had a bad reference
  • [Fix][Android] Generated activity code for RG popups call was wrong 591
  • [Fix] Improve root namespace detection to deal with weird project/assembly names

BluetoothLE

  • [Fix] Managed Peripheral was not respecting notify vs indicate when restoring subscriptions
  • [Fix] Managed Scan will filter dead buffers (no scan results)
  • [Fix] Managed Scan now has configurable buffer time - IManagedScan.BufferTimeSpan
  • [Fix][Android] BLE Delegate OnConnected PR
  • [Fix][UWP] BLE Scans would return null results
  • [Fix][Android] Many flavours of Droid won't fire Connecting/Disconnecting. Shiny now covers the Connecting portion of this.
  • [Fix][Android] Push adapter status events to both delegate and observable
  • [Enhancement][Android][UWP] Support for 16bit UUID strings
  • [Enhancement][Android] Improved synchronization mechanism

BLE Hosting

  • [Enhancement][Android][UWP] Support for 16bit UUID strings

Beacons

  • [Fix] UseBeaconMonitoring in startup was returning false (unsupported) even though it had successfully been registered
  • [Fix] Improved argument checks on beacon region

Notifications

  • [Feature][Android] App Icon badge numbers are now supported thanks to Xamarin.ShortcutBadger
  • Repository extensions were internalized as they were meant to be used outside of the library
  • [Fix][Android] Foreground services wouldn't log issues with the notification if something was setup wrong

Push - Azure Notification Hubs

  • [Fix][iOS] Device token could be invalid

Speech Recognition

  • [Feature] Ability to pass cultureinfo to listening functions #569

NFC

  • [Android][Fix] Uses wrong NFC manifest feature #585

v2.0.2639 (May 5, 2021)

Core

  • [BREAKING] Jobs no longer return Task of bool, they now only return Task
  • [BREAKING][Android] All previous monikers have been removed, only android 10+ targets are supported now, this includes only AndroidX compatibility
  • [BREAKING] Caching has been removed. Use Microsoft.Extensions.Caching
  • [FEATURE] Source Generators - Generate all of the boilerplate needed by Shiny for iOS & Android with nothing more than a single assembly attribute. Simply install Shiny (not Shiny.Core) on your head iOS & Android projects
  • [BREAKING] All Shiny logging has been replaced with Microsoft.Extensions.Logging
  • [BREAKING] Settings is now gone - enter key/value stores with file, memory, settings, and secure storage

BluetoothLE

  • [BREAKING] The original library has been split into 2 separate libraries (Client - Shiny.BluetoothLE and Server - Shiny.BluetoothLE.Hosting) with some common ties
  • [BREAKING] DiscoverServices is now called GetServices and returns IEnumerable instead of a single service
  • [BREAKING] DiscoverCharacteristics is now called GetCharacteristics and returns IEnumerable instead of a single characteristic
  • [Feature] You don't like RX - there are new async extensions to skip the RX
  • [Feature] ManagedScan now properly manages an observable collection of peripherals using all the best practices for safely updating the collection and even removing peripherals that haven't been seen for a configured time period
  • [Feature] ManagedPeripheral now manages everything during the reconnection process like resubscription to characteristics and all of the internal discovery is done for you. No more mass setup per peripheral connection.

Beacons

  • [BREAKING] Beacons are now separated into 2 different injection points, services.UseBeaconMonitoring()/IBeaconMonitoringManager and services.UseBeaconRanging()/IBeaconRangingManager
  • [Feature][Android] Uses foreground services to achieve real time beacon scanning while your app is in the background
  • [Feature] ManagedScan now properly manages an observable collection of beacons using all the best practices for safely updating the collection and even removing beacons that haven't been seen for a configured time period

Locations

  • [BREAKING] IsListening is gone in favor of CurrentListener configuration
  • [Feature][Android] Now uses foreground service to achieve fast "background" GPS
  • [Feature] Minimum Distance is now supported on Android and iOS

Notifications

  • [BREAKING][Feature] Channels - this exists to fit with the Android channels model and iOS category model
  • [Feature][Android] More Android specific configuration added

Push

  • [BREAKING] Delegate now returns a type of PushNotification for OnReceived
  • [BREAKING] Delegate now returns a type of PushNotificationEntry for OnEntry
  • [BREAKING] WhenReceived foreground listener returns type of PushNotification
  • [Feature] New Firebase provider for iOS and Android (Shiny.Push.FirebaseMessaging)
  • Azure Notification Hubs provider is now fully released

NFC

  • Full Release
  • Improve this Doc
In This Article
Back to top Generated by DocFX