New in version 0.25.0

Released one year ago

Please remember to uno clean your projects after upgrading Fuse.

NOTE: After upgrading to Fuse 0.25 it is necessary to re-run the command fuse install android to be able to deploy to Android devices

Highlights
  • New FileSystem module
  • Faster incremental builds
  • Several new triggers, especially related to navigation
FileSystem
  • Added new JS FileSystem module with several new features. This will eventually replace the Storage module. You can find a file browser sample using it here.
  • Known issue: dataDirectory and cacheDirectory do not work as intended in local preview, and place the directories besides Fuse.exe instead of the project build directory.
Improved incremental build
  • fuse build / uno build won't trigger a build if the previous one is still up-to-date
  • Automatically removes outdated files and APK from Android builds
  • Added trigger Activated, fires when a navigation page becomes active
  • Added trigger Deactivated, fires when an active page becomes inactive
  • Added event INavigation.ActivePageChanged
  • The navigation animations ExitingAnimation, EnteringAnimation, ActivatingAnimation, and DeactivatingAnimation now delay their animation start by 1 frame. This avoids first frame setup costs from interfering with the animation. This does not apply to seeking page progress, like swiping, or standard navigation in a PageControl.
Minimum sdk version

In the current release the default minumum sdk version for android builds has been set to 16. This corresponds to Android 4.1, which is the oldest version we're currently testing for. However, for those who wish to continue building for older versions of android you and simply add the following to your unoproj file

"Android": {
   "SDK": {
         "MinVersion": "10"
    }
}

or, if you prefer, you can use the following command line argument:

--set:SDK.MinVersion=10

Because of this change it is necessary to re-run the command fuse install android after installing Fuse 0.25 (if you want to be able to deploy to Android).

FuseJS require
  • Added support for the require('./directory') pattern when directory/index.js exists to support more node packages.
FuseJS.Environment.mobileOSVersion
  • Added a mobileOSVersion property to FuseJS.Environment to give access to the Android and iOS OS version at runtime.
Databinding stability fix

Breaking change: databindings no longer resolve to data(e.g. <JavaScript />) local to the node, only to parent inherited data. This solves common problem scenarios where you would get cyclic databindings leading to memleaks and crash. This means the following will not work anymore:

<Panel Width="{foo}">
    <JavaScript>
        module.exports.foo = 10;
    </JavaScript>
</Panel>

If you depend on this behavior it can be written as:

<Panel ux:Name="p">
     <JavaScript>
          module.exports.foo = 10;
      </JavaScript>
     <Panel>
        <DataBinding Target="p.Width" Key="foo" />
     </Panel>
</Panel>
Xcode project generation

Added a new property to set the UIBackgroundModes property of the generated Xcode project. You can use it by adding the following to your .unoproj:

"iOS": {
  "PList": {
    "UIBackgroundModes": [
      "location",
      "voip"
    ]
  }
}
Deferred node creation
  • The Deferred class has been introduced to help keep UIs responsive when a lot of new nodes are added at the same time. Read more about it here.
TextInput
  • Added support for IsEnabled for elements inside <NativeViewHost />
Bugfixes
  • unoproj: Allow - in version strings
  • Fixed crash in ProcessExtensions on Windows
  • Fixed issue where onscreen keyboard could randomly appear when using WebView in NativeViewHost
  • Fixed WebView issue where databinding on HTML.Source didn't compile
  • V8: Cleaned up how exceptions that cross the Uno-JavaScript boundary work. The exception on the JS now contains information about the Uno exception, and if the exception is not caught in JavaScript and rethrown in Uno, the exception contains both Uno and JavaScript stack traces.
Foreign code bugfixes
  • Fixed a bug that meant fields accessed using macros that didn't use :Get() in foreign Objective-C, such as @{MyClass:Of(_this)._someField}, did not have their types converted from Uno to their Objective-C equivalents
  • Fixed a bug that resulted in foreign code in static constructors not working
Native views bugfixes
  • Fixed issue where Circles with Strokes would not display correctly on iOS
  • Fixed issue where inputevent sometimes would not come through when tapping on native iOS and Android buttons
Uno parser reimplementation

Faster & harder parser that comes with some minor breaking changes to the syntax.

Previously, some invalid variable declarations were accepted:

var a = 0, b = 0;           // Invalid 'var' with multiple declarators
var c = fixed int[] {0};    // Invalid 'var' with fixed array

The correct syntax is:

int a = 0, b = 0;           // OK
fixed int c[] = {0};        // OK