返回博客首页
← 所有文章

NativeScript 8.2 发布

2022 年 3 月 8 日 — 作者:技术指导委员会 (TSC)

NativeScript 8.2 带来了新的功能,对核心和运行时的广泛内存优化,一些错误修复,以及对最新 iOS(Xcode 13.3/iOS 15.4 版本)和 Android 工具(Android API 32 以及 gradle 7)的支持。

此版本在过去几个月预发布阶段获得了社区的极大参与,这极大地帮助了团队,谢谢。

tl;dr — 更新到 NativeScript 8.2

更新到任何次要或主要版本的 NativeScript 都从安装最新的 cli 开始

npm install -g nativescript

然后,您可以使用以下命令确认最新安装的版本

ns -v

您应该至少看到 8.2.0 或更高版本。如果您没有看到最新安装的版本,请检查您的 node、npm 或 yarn 全局设置。

您现在可以在您的项目中运行以下命令

ns migrate

各种项目依赖项现在应该已更新。

最后,确保您的项目是干净的

ns clean

注意:CLI 与旧项目一起使用,因此始终建议运行最新的 CLI,无论您项目的特定版本如何。

以下是一些您在成功迁移后可能会使用的依赖项

"dependencies": {
  "@nativescript/core": "~8.2.0"
},
"devDependencies": {
  "@nativescript/android": "~8.2.0",
  "@nativescript/ios": "~8.2.0",
  "@nativescript/types": "~8.2.0",
  "@nativescript/webpack": "~5.0.6"
}

CLI 更新

包含了一些高级别细节

  • 支持最新的 Android 工具、SDK 32 和 gradle 7
  • 支持最新的 Xcode 13.3 和 iOS 15.4 版本
  • 支持构建短暂的原生依赖项(以前如果一个插件依赖于另一个插件,原生类可能无法构建)
  • 支持将 aar 传递给 ns typings android --aar(除了 --jar
  • 修复了 iOS 模拟器和调试输出终端之间偶尔发生的竞争条件
  • 对第三方插件的优化
  • 允许覆盖 ns clean 删除的文件夹(通过 pathsToClean)或包含其他文件夹(通过 additionalPathsToClean),例如
import { NativeScriptConfig } from '@nativescript/core';

export default {
  // ...
  cli: {
    /**
      * Optional - Override the files or paths to clean when running the `ns clean` command
      */
    pathsToClean: ['node_modules', 'package-lock.json', 'yarn.lock'],

    /**
      * Optional - Additional files or paths to clean when running the `ns clean` command, the paths are appended to the default list of paths.
      */
    additionalPathsToClean: ['dist']
  },
} as NativeScriptConfig;

还有更多...

查看 完整的更改日志

@nativescript/core 8.2

在 8.2 中,核心收到了一些新功能、错误修复和性能优化。

TouchManager

介绍新的 TouchManager,它提供了快速轻松地为您的应用程序添加精美的抛光效果的能力,并在触摸按下/抬起时提供良好的 UX 反馈。

例如,您可以通过在应用程序引导之前(通常在 app.tsmain.ts 中)启用 TouchManager.enableGlobalTapAnimations,轻松快速地在每个具有 tap 事件绑定的视图上启用一致的触摸按下/抬起动画。

import { TouchManager, CoreTypes } from '@nativescript/core'

// define prior to your app bootstrap call (typically `app.ts` or `main.ts`):

TouchManager.enableGlobalTapAnimations = true;
TouchManager.animations = {
  down: {
    scale: { x: 0.95, y: 0.95 },
    duration: 120,
    curve: CoreTypes.AnimationCurve.easeInOut
  },
  up: {
    scale: { x: 1, y: 1 },
    duration: 120,
    curve: CoreTypes.AnimationCurve.easeInOut
  }
};

// bootstrap the app...

这将自动为具有 tap 绑定的任何视图在触摸按下和抬起时使用这些特定动画进行动画。

如果您有一些需要忽略的“可点击”视图

<Button text="Global tap animations simply ignored" ignoreTouchAnimation="true" />

您还可以通过声明式地定义任何特定视图上的自定义触摸动画(这将覆盖任何全局 TouchManager 设置)来指定它自己的 touchAnimation 属性

<Button touchAnimation="{{ touchAnimation }}" />

这将使用以下视图绑定设置对触摸按下和抬起进行动画

touchAnimation = {
  down: {
    scale: { x: 0.95, y: 0.95 },
    backgroundColor: new Color('yellow'),
    duration: 250,
    curve: CoreTypes.AnimationCurve.easeInOut,
  },
  up: {
    scale: { x: 1, y: 1 },
    backgroundColor: new Color('#63cdff'),
    duration: 250,
    curve: CoreTypes.AnimationCurve.easeInOut,
  },
}

testID

添加了一个新属性 testID,用于 e2e(端到端)集成测试。以前,automationText 通常被使用,但它可能会干扰 8.0 中添加的 a11y 属性,因此 testID 有助于标准化所有 e2e 测试以及避免常见的陷阱。您可以从 8.2 及更高版本开始使用 testID 进行所有 e2e 视图识别。此属性仅在运行集成测试时激活,因此绝不会干扰应用程序的正常运行。

要启用 testID,您可以将 --env.e2e 传递给构建命令,它将被启用。

内存优化

在字体和文本归属处理以及 Image 处理方面确定了几个关键区域,这些区域经过优化,从而产生了一些很好的内存优化增强功能。这也包括修复了关闭模态时的内存回收问题。

支持 CSS 中的 rgb alpha 表示法

这使我们能够支持尾风 3,它广泛使用了这种格式。

例如:rgb(255, 255, 255 / 0.2)

RootLayout shadeCover 现在支持渐变

例如

getRootLayout()
  .open(view, {
    shadeCover: {
      color: 'linear-gradient(to top, #fff, rgba(0, 0, 0, .7))',

Android 11+ 文件处理

如果您一直在针对较新的 Android SDK 或设备,您可能会在使用 content:// uri 时遇到问题。8.2 现在在幕后使用相同的现有文件 API 正确处理了这些问题。

Vanilla XML 解析器和绑定改进

围绕使用 Vanilla NativeScript 的用户进行了一些改进,这些改进涉及绑定表达式 - 请参阅这些 PR 说明以获取详细信息

以下是一些其他亮点的概览

这仅仅是核心更改的概览 - 查看 完整的更改日志

@nativescript/ios 8.2

在 8.2 中,还包含了额外的内存优化,以及对运行时进行修改,使其能够开始用于其他多样化的项目开发中。

此版本支持 Xcode 13.3 和 iOS 15.4(以及之前的版本)。

有关更改的完整列表,请参阅 完整的更改日志

@nativescript/android 8.2

在 8.2 中,最新的 Android Studio 工具、SDK 和构建工具现在已正式支持。此外

  • Gradle 7 支持
  • API31 修复
  • 更新了所有 androidX 库
  • 公开 __drainMicrotaskQueue 全局变量
  • console.time 使用 3 位精度
  • 直接 TypedArray 序列化

有关更改的完整列表,请参阅 完整的更改日志

升级后您可能会遇到的问题

app/src/main/AndroidManifest.xml:24:3-36:14 Error:
  android:exported needs to be explicitly specified for element . Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. See https://android-docs.cn/guide/topics/manifest/activity-element#exported for details.

Execution failed for task ':app:processDebugMainManifest'.
Manifest merger failed : android:exported needs to be explicitly specified for element . Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. See https://android-docs.cn/guide/topics/manifest/activity-element#exported for details.

更新您的 App_Resources/Android/src/main/AndroidManifest.xml 并将 android:exported="true" 添加到 <activity> 标签中。

@nativescript/types 8.2

为了准备 iOS 15.4 和 Android 12+(以及更多 androidx),您将在最新的类型中找到这两个新 API

⚡⚡⚡

此外,我们更进一步,通过将 iOS 类型从 >20,000 个声明优化到 ~8,000 个,优化了 iOS 类型,使您的 TypeScript 编辑器变得非常轻便 - 除了升级到 8.2 以获得此改进之外,您无需做任何操作。我们将在未来继续优化这些类型。

如果您是插件开发者或只是需要完整的完整集合,您可以包含所有 >20,000 个声明,方法如下

/// <reference path="@nativescript/types-ios/src/complete.d.ts" />

@nativescript/webpack 5.0.5

错误修复

  • webpack: 从 require.context 中排除其他平台 (#9686) (cb7bd2a),关闭 #9682
  • webpack: xml-namespace-loader 依赖项映射错误 (#9780) (151d6e8)

特性

  • --env.e2e 支持,与核心中的新 testID 属性配合使用
  • 支持 webpack 分析 (#9804) (af4b7e3)
  • webpack: 添加对 .mjs 文件的支持 (#9747) (4fa51b6)
  • webpack: 允许监视 node_modules (#9781) (9c9c831)

您可以在 此处查看版本的发布说明

@nativescript/tailwind 2.0

我们发布了 @nativescript/[email protected] 以正式支持 Tailwind CSS 3.x。查看 @nativescript/tailwind 文档 中关于如何设置它的说明。

下一步是什么?8.3 及更高版本?

除了不断解决错误以及优化传递之外,我们还将提到未来几个版本中的一些更广泛的目标

对于 8.3,我们计划推出 node 的 fs API 作为完全支持的 API,使 NativeScript 的文件处理尽可能接近 node 的文件 API。这是为了在 node/JS 生态系统中普遍推广标准文件 API 的努力的一部分(无论平台如何)。

对于 9.0,我们将把 @nativescript/core 中的 ui 部分拆分为自己的包,以便为更广泛的平台 UI 适应性/使用做好准备,并继续优化核心库。


成为下一个 NativeScript 版本协同驾驶员

您是否曾经想过创建主要或次要版本的 NativeScript 版本需要哪些步骤?

对于每个主要或次要版本,从下一个 8.3 版本开始,TSC 将在每个发布周期中随机选择一个条目,让某人与我们一起创建下一个主要或次要版本。我们发现每次的过程都很深刻且引人入胜,并且希望让其他人有机会深入了解 OSS 的维护和可持续性。

无论您是新手还是老手,都可以通过填写 此表格 来添加您的姓名,我们将在全年的 3 个月窗口内随机选择。每个选择者都将收到一些小礼物,并可以确保与国际 TSC 合作准备下一个版本将是一段美好的时光。

NativeScript 办公时间

NativeScript 办公时间每月在第一个星期一(除非另有说明)太平洋标准时间上午 11 点通过我们的 社区 Discord 提供。

为初级开发人员提供指导

如果您是编程领域的初学者,我们邀请您与开源维护者进行坦诚的非正式聊天,这些维护者充满热情、关怀并且易于交流。

这些将是非正式的 AMA(问答)环节,您可以有机会与开源维护者和专业人士交谈,涵盖从编写第一行代码到管理开源项目,再到为雇主和客户构建深入的用户体验等一切内容。

资源

感谢您为可持续的开源未来投资。

加入我们的 Discord 社区

📣 加入我们,说你好!

需要专业帮助完成您的项目吗?

请联系我们的任何 合作伙伴 以获得帮助。

谢谢

我们要感谢我们优秀的社区,感谢他们持续的投入、贡献和支持。感谢那些通过测试我们的预发布版本、报告问题和贡献修复来帮助塑造 8.2 版本的人。❤️