Releases: NativeScript/NativeScript
Releases · NativeScript/NativeScript
@nativescript/core@8.5.5
@nativescript/core@8.5.4
Bug Fixes
- android: improve content uri handling (#10316) (77f252e)
- animation: avoid uncaught reject on cancel (#10309) (622f365)
- Application: inBackground handling & missing
once
(#10307) (e430555) - ensure Application instance initialized early (#10315) (0401b09)
- shared-transition: race condition with interactive updates (#10312) (25cc49d)
- shared-transitions: layer opacity set back to original on next tick (#10310) (0956cb0)
@nativescript/core@8.5.3
@nativescript/core@8.5.2
@nativescript/core@8.5.1
@nativescript/core@8.5.0
Bug Fixes
- android: box shadow and border radius white border resolution (#10125) (ea45758)
- android: dialogs activity usage (#10246) (7edd21a)
- android: knownFolders.externalDocuments improvement (#10186) (a7f1305)
- android: Label now defaults to vertical-align middle (#10233) (a23c8bd)
- android: native-helper utils types are now correct (#10231) (6779cdc)
- android: path must be convex (#10238) (89fc249), closes #10235
- android: ScrollView BadParcelableException (#10213) (a26a03e)
- core: add equalityComparer to border-radius properties (#10185) (571d515)
- core: added item template handling for external renderers (#10196) (b993a83)
- core: autofillTypes correction (#10210) (fd35d6c)
- core: classes .ns-light and .ns-dark apply to dialogs (#10201) (48ef249)
- core: CSS animation parsing (#10245) (ab436db)
- core: Frame to Page property propagation (#10225) (4e62b00)
- core: improved handling for unsupported '!important' css rule (#10243) (e560cb1)
- core: Observable event types consistency (#10181) (485fb61)
- core: RootLayout shade cover asynchronous execution (#10228) (a19568c)
- core: unset css values of type Property (#10199) (dcf6a36)
- global declarations fix (#10247) (2f4c318)
- ios: embed systemAppearance handling (#10219) (ee92512)
- ios: embedding sdk (#10211) (9179ff8)
- ios: guard against no nativeView in createBackgroundUIColor (#10229) (9ed3c9b)
- ios: sdk embedding (#10216) (0183f7e)
- ios: support for a11y font scale (#10207) (95f3772)
- types-android: min api types from 17 to 31 (#10209) (e613ecf)
- webpack: notify CLI even if there are compilation errors (#10141) (6059984)
Features
- core: export foregroundEvent and backgroundEvent (#10226) (6fd6943)
- core: Shared Element Transitions (#10022) (59369fb)
- files: read & write using js buffers (#10093) (0173769)
- ios: Swift Package Manager support in config (#10252) (09832ad)
- ios: types for latest 16.2 sdk (#10253) (318fb36)
- webpack: support tsconfig.app.json when present (#10221) (ebb827f)
Performance Improvements
Breaking Changes
Most projects will be unaffected by these but in an effort to be clear as possible, we will note the following:
- Event binding callbacks prefer a properly typed argument:
Potential issue:
error TS2339: Property 'newValue' does not exist on type 'EventData'.
2611 if (e.newValue) {
Possible causes:
Application.on(Application.orientationChangedEvent, (event) => {
Solution:
Application.on(Application.orientationChangedEvent, (event: OrientationChangedEventData) => {
- Android labels are vertical align middle by default.
This means that potentially if you were using margins to position, for example on font icon labels, they may appear mis-positioned intially after updating. You should be able to remove custom margin handling to simplify.
- Page transitions have improved their API to provide more platform control and introduced a breaking change to the method signatures on iOS. If you had created a custom by extending the
Transition
class:
- BEFORE:
animateIOSTransition(containerView: UIView, fromView: UIView, toView: UIView, operation: UINavigationControllerOperation, completion: (finished: boolean) => void): void {
toView.transform = CGAffineTransformMakeScale(0, 0);
fromView.transform = CGAffineTransformIdentity;
switch (operation) {
case UINavigationControllerOperation.Push:
containerView.insertSubviewAboveSubview(toView, fromView);
break;
case UINavigationControllerOperation.Pop:
containerView.insertSubviewBelowSubview(toView, fromView);
break;
}
var duration = this.getDuration();
var curve = this.getCurve();
UIView.animateWithDurationAnimationsCompletion(
duration,
() => {
UIView.setAnimationCurve(curve);
toView.transform = CGAffineTransformIdentity;
fromView.transform = CGAffineTransformMakeScale(0, 0);
},
completion
);
}
- AFTER:
animateIOSTransition(transitionContext: UIViewControllerContextTransitioning, fromViewCtrl: UIViewController, toViewCtrl: UIViewController, operation: UINavigationControllerOperation): void {
const toView = toViewCtrl.view;
const fromView = fromViewCtrl.view;
toView.transform = CGAffineTransformMakeScale(0, 0);
fromView.transform = CGAffineTransformIdentity;
switch (operation) {
case UINavigationControllerOperation.Push:
transitionContext.containerView.insertSubviewAboveSubview(toView, fromView);
...