New in version 0.11.0

Released one year ago

Please remember to uno clean your projects after upgrading Fuse.

Hotfix (build 6183, rolled out Sat Mar 26th)

  • Fixes problem with Xcode 7.3 compatibility causing problems with iOS builds and preview.

Bug fixes

  • The error manifesting as Daemon handshake failed: Request failed: (6) - Daemon key was not right has been fixed.
  • Fixed a regression in last release, where preview of a project, which was located on an external device (eg. USB stick) would fail.
  • ColumnLayout now handles Max/Min layout constraints correctly. If you notice a change in your layout look to the MaxWidth/Height property to verify that if it is what you want.
  • Fixed bug where Video would crash on certain devices (ex LG G2)
  • Fixed issue where GeoLocation.StartListening ignored the parameters

Known bugs in this release

  • On some devices, rotating the device will corrupt the UI
  • Tapping generic map markers in iOS MapView do not display text labels.
  • Tapping user location marker in iOS MapView is broken.
  • Using Change with pixel (px) units does not currently work.

UX Updates

  • Change now supports units (%, pt). The original and target value must have the same units.
  • this is now the implicit name of the current ux:Class or ux:InnerClass root node, so you don't have to explicity name the node to work with its contents.
  • PageControl.HitTestMode is now LocalBoundsAndChildren by default so that items without a background can be swiped. If there is some reason you don't want this just override HitTestMode="LocalVisualAndChildren" on the Pagecontrol to get the previous behaviour.
  • The ZOffset property has been introduced to control z-ordering of nodes
  • A new RangeAdapter that allows finer control over playback of parts of animations
  • MapView: The MapMarker Location property has been removed. Use Latitude and Longitude properties instead.
  • TextInputHint.Number has been renamed to the more accurate TextInputHint.Integer. Number is still available as a deprecated alias during the transitional period to be removed in a future release.
  • TextInputHint.Decimal has been introduced to allow decimal point value input.

JavaScript updates

  • State transition with StateGroup and State can now be done in JavaScript
  • Animation playback of a Timeline can now be controlled in JavaScript
  • Limited scrolling in a ScrollView is available now in JavaScript
  • MapView tilt, bearing, location, zoom and markers can now be controlled in JavaScript.
  • WebView url and loading of html can now be controlled via JavaScript goto(myUrl) and loadHtml(myUrl, myBaseUrl)
  • Added an Observable.toArray method that returns a copy of the values array
  • Deleted obsolete modules: FuseJS/Fetch and FuseJS/FetchJSON. Use plain fetch() instead.
Improved require() function (FuseJS)

require() can now require script files directly from the bundle, without declaring them as ux:Global. (If you want all .js files in the project folder to be bundled then simply add "*.js:Bundle" to the Includes in your .unoproj. And keep in mind that all changes to the .unoproj itself requires a recompile.)

You can now require files relative to the current script, or relative to the project root like this:

var foo = require("./foo"); // relative to this file
var bar = require("/bar.js");  // relative to project root (.js is optional)
var bar = require("bar");  // relative to project root, or global module

The bundle is also properly simulated in fuse preview, so adding new script files can be done on the fly. Oh, and it now also deals with circular dependencies gracefully. Happy birthday!

Foreign Code

  • Added support for out and ref parameters in foreign Objective-C functions.
  • Added a new ForeignInclude attribute which can be used to add imports in Foreign Java and to add headers in Objective-C.
  • Added support for using interfaces as parameters to foreign Objective-C functions.

See the handbook for more information about these features.

Uno updates

  • Fuse.Scripting.Marshal is available to convert from JS types for Uno callbacks
Changes to Fuse.Node
  • The Node.Update event is removed (legacy API). Instead add and remove actions directly to UpdateManager when the object in question is rooted.
  • The Node.Added and Node.Removed events are removed (legacy API). Add/remove operations have no logical consequence, and nothing should ever need to happen in response. instead, care about Rooted/Unrooted semantics.
  • The Node.OnAdded/OnRemoved has been removed, and hence rooting protocol has changed. If you relied on these methods, contact the Fuse crew on the Slack community for help to migrate.
Changed how properties with units (%, px, pt) are implemented

Removed StylePropertyWithUnit, instead introduced Unit, Size and Size2 in the Uno.UX namespace.

All properties that support units (such as Width, Height, Anchor) are now of type Size or Size2, and can be set in Uno code like this:

elm.Height = 100; // defaults to points, implicit cast from float and int to Size
elm.Height = Size.Points(100); // does the same as the line above
elm.Width = Size.Percent(30);
elm.Anchor = Size2.Percent(50, 50); // sets Anchor="50%,50%"
elm.Offset = new Size2(Size.Points(100), Size.Pixels(30)) // sets Offset="100,30px"