Already have an account? Log in
Released 8 months ago
Please remember to
after upgrading Fuse.
<NativeViewHost />. This resulted in big performance improvement in complex native UIs.
<TextView TextWrapping="Wrap" />could misbehave if the
TextViewwas in a
Panelthat let its size grow (like
Axisconstraint to Draggable, allowing draggable behaviors locked to single axes if needed.
BusyTaskActivity.Allhas been removed, there is now a
Commonwhich covers the same tasks and a
Anywhich covers all possible tasks.
WhileFailedto be part of the BusyTask system. The biggest difference is that it will detect failures of any descendent elements, not just where it was used. This is unlikely to cause a behavioural change in most projects, but if you need the old matching use
WhileFailed.Messageresource. Add an error handler directly to the resource (such as ImageSource) if the error message is needed.
WhileFailedwill detect this failure.
Busybehavior to help marking nodes as busy
FuseJS/BusyTask, use the
Observable.mapTwoWay: a two-way version of
Observable.pickTwoWay: a two-way version of
Observable.innerTwoWay: a two-way version of
.inner(), however, if you relied on one of the abnormal behaviours it might be problematic. To assist in migration you can use
.innerDeprecated()temporarily, which is the old way of doing
.inner()(it will be removed eventually).
.setInnerValueis also no longer available on
.inner()(but still exists on
.innerDeprecated), using a.innerTwoWay` and assigning a value is the new approach.
.inner().twoWayMap()as it has numerous issues. The replacement is to use
.innerTwoWay(), possibly combined with
.mapTwoWay()which has a well defined behaviour.
.endSubscriptionsinterface. These had issues that couldn't be resolved via this interface. If this causes any issues with your code then please get in touch and we'll work something out.
isFailedto help track failure conditions
onValueChangedwould not respond to all changes
State.Onhas been removed. This value should not have been public as it did not reflect a usable value, and could corrupt the current state. Use
.Gototo goto the current state and
StateGroup.Activeto get, or set, the state.
ZoomEnabledattribute, defaulting to "true". In the past, zoom gestures were enabled by default on iOS but disabled on Android due to an oversight. This unifies the end-user experience.
Completedtrigger that pulses when a node is no longer busy
$(inherited)to the framework search paths, which is sometimes necessary when using CocoaPods.
The following changes are only relevant if your project contains low-level Uno code or foreign code.
As mentioned in the changelog for Fuse 0.32, the following obsolete methods have been removed:
If you still haven't updated your code to to match, you'll now get build-errors. See the changelog for Fuse 0.32 for upgrade instructions.
EventWaitHandle has been added as a base-class for
ManualResetEvent, and ConcurrentCueue
Socket.Send(byte, int, int)has been marked as obsolete. It doesn't exist (nor work) on .NET-targets. Use
Socket.Send(byte, int, int, SocketFlags)instead.
Socket.Receive(byte, int, int)has been marked as obsolete. It doesn't exist (nor work) on .NET-targets. Use
Socket.Receive(byte, int, int, SocketFlags)instead.
A large amount of refactoring has been undertaken to solve two issue:
This series of changes are seen as steps to enable where we want to go, we understand that things can feel a bit in-cohesive at this stage. But with these changes landed we will be able to iterate on the code bases more easily and fix some long standing issues (especially in areas such as system ui & fullscreen)
CoreApp class has been created. This is the new root application class instead of
Uno.Application. It contains the lifecycle,
All platforms now feed lifecycle events through
Uno.Application inherits from this and on desktop adds the
Window. Much of the Application class is deprecated for mobile targets. Window is still present for mobile but is deprecated for imminent removal.
GraphicsController is a class which holds much of the code that used to belong to
GraphicsContext. It is only used on desktop. The reason for the change is that for mobile, everything in managed in fuselibs.
GraphicsContext now exists as a handle.
A class called
Displays had been added which contains a list of
Displays. For now the most used field is
MainDisplay, which for all current platforms is the only
Display class now exists which holds the
Density property &
Tick event. There are subclasses of this iOS, Android & Desktop that handle the plumbing.
A class called
OSFrame has been added which is the new base class of
Window. As mentioned above,
Window continues to be used on desktop & is deprecated on mobile.
Window contained far too many of the events. The
EventSources namespace the new home for these migrated events. There are separate static classes for InterApp, HardwareKeys, Text & Mouse events. This separation will allow us to re-evaluate them separately and work on their future place in the API.
The mobile root-view bootstrapping is removed from Uno and moved to Fuselibs
SystemUI and it's bootstrapping is removed from Uno and moved to Fuselibs
Key events now have an
Origin field, which is the
OSFrame they originated from. This is for platforms where these events originate from
Windows as opposed to UI elements
All core libraries that touched Platform2 events have been updated to use Platform rather than Platform2
Events which on some platforms are forbidden (like
quit) now live in an class called