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