在过去几周里,我们的团队一直在各种活动中忙碌,并与世界各地的开发者讨论 NativeScript。我们从开发者那里收到了很多关于 NativeScript 的问题,我认为在这里回答一些常见的问题会很有帮助。
你们的 JavaScript 虚拟机到底是用什么语言编写的?具体来说,你们在应用程序包中发布的虚拟机。它与 V8/WebKit 之间有什么区别吗?
用于 NativeScript 的 Android 运行时 是用 C++ 编写的。查看 NativeScript for Android 简介,了解其架构概述。用于 NativeScript 的 iOS 运行时 是用 C++ 编写的。有关 NativeScript 的更多信息 - 包括有关这两个运行时的信息 - 请务必查看文章 NativeScript - 技术概述。
NativeScript 伴侣应用程序是用什么语言编写的?外壳是如何运行一个真正的原生应用程序的?
用于 iOS 的 NativeScript 伴侣应用程序 是用 Objective-C 编写的。用于 Android 的 NativeScript 伴侣应用程序 是用 Java 编写的。在这两种情况下,伴侣应用程序在应用程序包部署到设备时托管应用程序包。
NativeScript 会在部署之前编译我的 JavaScript 代码吗?
不会。它通过每个平台(例如 Android 和 iOS)上的 VM 执行。
如果我们有一个运行 NativeScript 应用程序的外壳,为什么我们不能让它在浏览器模拟器中工作?或者,这是 Telerik 平台落后的情况吗?
Screen Builder 和 AppBuilder 网页客户端的设备模拟器在浏览器中运行。因此,它们仅限于浏览器提供的沙盒环境的功能。当您使用 Screen Builder 为 NativeScript 构建应用程序时,我们通过 Kendo UI 生成原生界面的近似值。我们的目的是提供一种体验,尽可能地模拟原生 UI,因为它可以在网络上呈现。我们的目标是让您使用我们的工具构建原生应用程序,这些工具将利用原生 UI 控件,一旦在原生模拟器或设备上运行。
如果您希望在浏览器中模拟 作为原生应用程序 的 NativeScript 应用程序,请查看 Appetize。它有点滞后,但效果很好。
展望未来,Telerik 平台工具对 NativeScript 的支持将落后于命令行界面(CLI)多远?
好问题。NativeScript 1.3 现在通过 npm 支持插件和依赖项。这一改变使我们的工具能够运行 NativeScript 的“最新版本”。我们计划在 10 月份将此功能集成到 AppBuilder 中。最终结果意味着我们的工具将与 NativeScript CLI 一致,这太棒了(如果我这么说的话)。
NativeScript 的性能与 Titanium 和 React Native 等其他框架相比如何?你们在任何地方发布了性能基准测试吗?
我们已经进行了大量的测试,发现 NativeScript 的性能与其他框架相比非常好。我们计划很快写更多关于性能的文章。在此期间,Mihail Slavchev 在以下文章中写了一些关于 NativeScript 性能的内容。
为什么侧边抽屉没有在页面 用户界面小部件 上列出?它何时会在 Telerik 平台上可用?
侧边抽屉 是 Telerik UI for NativeScript 的一部分,而不是 NativeScript 附带的核心 UI 小部件。我们尚未宣布 侧边抽屉 与 Telerik 平台的发布日期。
NativeScript 在 iOS 上的调试与 Android 上的调试之间有什么区别吗?我们是否拥有使用 TypeScript 的调试故事?
是的,有一些区别。但也有一些相似之处。例如,您可以使用 tns debug
命令通过 CLI 调试应用程序。Android 和 iOS 的运行时都通过 Console 和 Trace 模块提供诊断信息。(有关 NativeScript 中跟踪的更多信息,请查看 跟踪 NativeScript 应用程序。)也就是说,通过工具调试应用程序确实在功能方面有所不同。请查看以下文章,以获取有关可用调试选项的更多信息。
如何将原生库与 NativeScript 应用程序一起使用?
您可以通过 NativeScript CLI 的 plugin
命令使用原生库。
$ tns plugin add <Plugin>
值得一提的是,NativeScript 支持 CocoaPods。我们有一篇题为 使用 CocoaPods 的文章,它将引导您完成通过指定一个 Podfile 来集成它们的流程,以作为 CLI 的一部分进行集成。对于 Android,您可以通过 CLI 将 JAR 库集成到 NativeScript 应用程序中。
最后,我应该提一下,我们计划为您提供一种通过我们即将发布的 经过验证的插件市场 添加原生库的功能。该网站可以让您快速轻松地添加库,并提供支持文档和屏幕截图。有关更多信息,请查看 Kiril Stanoev 关于 NativeScript 经过验证的插件市场 的博客文章。
我们有适用于相应平台的 CocoaPods 和 JAR 集成,但这些集成在 NativeScript 中是跨平台的吗?
不会。这些是将原生库与 Android 和 iOS 集成的技术。因此,它们只与相应的平台集成。
是否有任何指导意见,可以使 GenyMotion 或 Visual Studio 的 Android 模拟器与 NativeScript 项目一起使用?
NativeScript CLI 支持 Genymotion
$ tns emulate android --geny <GenyName>
请注意,您需要满足一些先决条件才能使其正常工作。
NativeScript CLI 与 Visual Studio 的 Android 模拟器 一起使用。模拟器运行后,执行以下命令。
$ tns device
这将提供可用部署目标的列表,其中将包括 Visual Studio 中运行的 Android 模拟器。从那里,您可以通过以下命令运行 NativeScript 应用程序。
$ tns run android --device <IP Address>:<Port>
您也可以通过 tns livesync --watch
使用 LiveSync 来实现相同的结果。
我们什么时候会有 NativeScript 的完整 LiveSync 故事?
NativeScript 1.2 中包含对 LiveSync 的支持。我们希望在未来的版本中改进体验。目前,正在讨论对 NativeScript 1.4 时间框架的一些改进。
如果整个 UI 可视化树是在代码中构建的,而不是在标记中构建的,是否会存在性能损失?
不会。事实上,恰恰相反;从标记中构建 UI 时,会存在轻微的性能损失。但是,这微不足道,而且在大多数情况下,这只是一次性成本。无论如何,我们支持使用代码和标记创建 UI,因此请使用您喜欢的任何方式。
我们如何创建可重复使用的标记作为 UI 渲染的模板?
最简单的方法是通过一个外部片段,您将其包含在您的页面中。假设以下 XML 片段位于一个名为 main-view-layout.xml 的文件中。
<
StackLayout
xmlns
=
"http://schemas.nativescript.org/tns.xsd"
>
<
Label
text
=
"Hello, NativeScript!"
/>
</
StackLayout
>
我可以通过以下方式将此片段用作模板,将其包含在其他地方(例如 main-page.xml)中。
<
Page
xmlns
=
"http://www.nativescript.org/tns.xsd"
xmlns:myFragment
=
"."
>
<
myFragment:main-view-layout
/>
</
Page
>
我非常喜欢这种方法,因为您可以将应用程序的标记分成可重复使用的部分。
NativeScript 是否计划支持 Windows 10 或通用 Windows 平台 (UMP)?
是的。我们已经决定跳过 Windows Phone 8/8.1,并将重点放在支持 Windows 10 上。我们尚未宣布此支持何时准备就绪。但是,我们有一个关于 此问题的 GitHub 问题,您可以关注它。
将来是否会选择通过 Less 对 UI 进行样式设置?
您现在可以使用 Less。但是,您必须自己调用解析器。我建议您为此使用 grunt 等工具。目前,我们正在研究 将转译器作为 NativeScript CLI 的一部分进行支持。这项工作的一个指导原则是使这种支持通用化,从而包含任何转译器。这包括用于 CSS 的 Less/Sass。