在移动应用程序的设计阶段,了解特定项目使用哪种语言更有利可图。 与本机开发(例如,对于iOS-Swift或Objective-C,对于Android-Java或Kotlin)一起,使用了跨平台框架,例如React Native和Flutter。 SimbirSoft我们提供了一些标准,将有助于选择企业和移动开发人员。

选择问题
根据各种估计,全球已经有约50亿部智能手机,其中多达80%使用Android操作系统,而不到20%使用iOS。 但是,每个国家/地区都有自己的特点,例如,在美国,超过65%的智能手机可在iOS上运行。 创建移动应用程序时,最经常需要在iOS和Android上发布版本。 为此,您可以转向本机或跨平台(“混合”)开发。
本机开发是一种经典的解决方案,需要使用不同的语言并考虑每个平台的功能分别为每个平台编写应用程序。 当创建一个项目的多个版本时,几个团队会同时工作。
多亏了跨平台框架,才有可能一次“用一块石头杀死两只鸟”,并使用一个工具为iOS和Android准备版本。 在这些框架中特别普遍:
-来自Facebook的React Native适用于iOS,Android和Windows应用程序
使用JavaScript语言和React.js库作为主要开发工具。
-来自Google的Flutter适用于Android,IOS和Fuchsia的应用程序(有关详细信息,请参见
我们在Habré上的文章 )
使用Dart语言,该语言也可用于网络编程。
根据Google趋势统计 ,React Native和Flutter的受欢迎程度正在增长,尽管速度不同。原生开发
本机和跨平台开发都具有自己的特征。 我们在移动部门mobile.SimbirSoft的实践中使用了这两种方法。 本机开发的优点包括:
- 稳定,快速的应用程序运行;
- 应用程序的最大寿命;
- 由于使用了“本机”工具,因此该应用程序更加灵活和可扩展;
- 对架构和功能的限制较少;
- 接口与平台完全匹配。
混合开发
跨平台框架“定制”了多个操作系统的应用程序,因此无需为每个平台创建唯一的元素。 结果:
- 需要的专家更少;
- 花费更少的时间和资源;
- 发展速度正在提高。
如果所有平台上的应用程序逻辑都相同且界面简单,则混合开发有助于更快地将产品推向市场。 我们建议在以下情况下使用诸如React Native和Flutter之类的框架:
- 如果在短时间内需要为多个平台编写原型应用程序;
- 如果应用程序从服务器获取所有信息,则逻辑在服务器上实现,并且动画和界面无关紧要;
- 是否使用了最少数量的本机功能,例如推送通知,应用内购买,地理位置等;
- 如果性能适中,并且可以从Internet下载内容。
本机,React本机和Flutter的选择标准
商业用
1.可用性
一些公司在与我们联系以开发移动应用程序时,将成本视为对其最重要的标准之一。 同时,专家的成本和需求取决于开发方法。
本机通常,移动工作室具有足够的资源来进行任何复杂的本机应用程序开发。
反应本机和颤振市场上这些领域的专家较少。 开发大型应用程序可能会有困难。
当应用程序设计用于长期运行时(即“寿命”),我们向企业推荐本机技术。 如果需要高性能,复杂的界面和动画,低功耗,与第三方资源(API等)集成,这也将是有益的。 从长远来看,由于较低的技术支持成本,本机应用程序更可获利。
我们建议使用跨平台技术进行快速的假设测试,原型开发和应用程序开发,并且要明确限制使用寿命,例如针对某些事件开发的应用程序。
商业备忘录:
对于复杂的应用程序-我们建议进行本机开发;
对于简单的应用程序-混合。2.速度+任务匹配
上市时间主要取决于可用团队的规模和移动应用程序的功能。
如果应用程序简单,具有相同的UI,并且没有特定于平台的详细信息(例如访问摄像机,使用文件系统和指纹,运行时权限),则使用跨平台框架可以更有利可图,并且更快。 在这里,混合开发通过在两个平台上重用几乎所有代码和UI来节省时间。 但是,如果您需要创建复杂的自定义视图,则跨平台开发会变慢。
在谈到移动应用程序的开发时间时,重要的是要了解没有“医院的平均期限”。 例如,在实践中,我们在100天内发布了银行移动应用程序,现在我们正在参与该产品的进一步开发。 同时,存在简单的应用程序(启动时间-大约两周),以及开发周期超过一年的大型项目。
3.安全与前景
选择一种语言时,对于企业来说,从技术角度评估其可靠性和安全性,进一步发展的前景以及过时的风险非常重要。
在可靠性方面,本地开发领先于所有竞争对手。 主要库的开发已经进行了数年,大多数错误已在其中修复,诸如Java,Objective-C,Swift和Kotlin之类的本地语言也在不断开发中。 在移动开发人员中,您会听到这样的观点:在2020年代,原生Android开发将部分被Flutter取代,但是到目前为止,这只是一个假设。
React Native提供了用于创建安全的移动应用程序的所有工具,例如Skype,Instagram,Facebook和其他知名产品。 仅在开发过程中使用第三方模块时,才可能出现安全问题。 同时,JavaScript正在积极开发中,新功能正在发布,并且在可预见的将来,过时的风险很小。
就Flutter上的开发而言,风险更高,因为该框架还很年轻,所以该版本仅在2018年12月发布。 到目前为止,存在问题,例如,一次或一次,库程序集仅可用于一个平台,Android Studio中发生崩溃,某些插件和库中存在错误。 另一方面,所有这些都正在最终确定和纠正。 我们不能排除Google停止支持Flutter的风险,就像公司其他项目一样。 但是,Fuchsia OS是在Flutter上编写的,其中一些开发人员认为可以替代Android。
对于开发商
上面,我们描述了同时考虑到业务和承包商的因素。 还有一些技术标准,主要由项目经理处理。 例如:
-母语知识和团队偏好每个移动工作室在技术选择上都有自己的喜好。 本地开发需要有关各种语言的最全面的知识。 但是,由于使用了系统的本机工具,因此在定制或访问特定于平台的工具时(与React Native和Flutter不同),限制和困难较少。 如果您有JavaScript的经验,那么移动开发人员可以很容易地切换到React Native(无需像Flutter那样额外学习Dart语言)或Dart(对TypeScript的了解将是一个很大的优势)。
React Native使用内部模块。 因此,如果需要自定义(即不支持此功能),则必须使用本机模块。 例如,在我们的实践中,有时需要自定义Yandex.Maps库以在地图上显示自定义视觉组件。
与React Native不同,Flutter拥有自己的图形引擎。 一方面,这使您在开发简单应用程序时完全不接触本机。 另一方面,如果您需要访问本机,则意味着其他困难(例如,使用基本数据类型和JSON进行消息传递)以及无法使用本机的图形组件。
-入场门槛如果开发人员决定学习一种新语言,那么社区的可用性以及背景信息和文档将成为一个重要的问题。
Flutter和React Native不断发展,他们拥有活跃的专业社区和良好的文档资料。 同时,本地社区的发展领先于框架,这要归功于更大的社区以及更多的培训材料和论坛,它们描述了复杂组件的开发过程。
“备忘单”供选择
下面的比较表将有助于简化选择并回答以下问题:在哪种情况下,该实施方法适合(或不适合)创建移动应用程序。

推荐建议
如果选择使用框架,我们建议您注意以下方面的工作:
等级您需要测试所有涉及的平台(iOS,Android)。 重要的是客观地评估所有项目参与者的知识和经验水平,以确保小时评级不会被低估。 考虑在开发过程中React Native和Flutter框架本身存在错误的风险。
设计方案有些元素很难(甚至不可能)在Flutter或React Native中渲染。 因此,必须在与开发人员达成一致之前-在客户爱上精美绘制的图片之前同意设计。
CI / CD在React Native上,不排除自动组装的特定问题(例如,由于在不同平台上安装了库)。 需要奠定更多的风险准备金。
开机画面在Flutter上启动闪屏的速度比在React Native上快,在React Native上只能以本地方式绘制此元素,并且很容易出现错误。 在具有所有渲染和错误修复的初始屏幕上使用React Native时,建议您花更多的时间。
布局图使用React Native时,需要同时在iOS和Android上进行排版,以避免在为其中一种系统调整布局时出现问题。
网络和移动的并行开发如果应用程序的Web版本是用React编写的,则由于组件的逻辑相同,因此在React Native上开发移动应用程序所花费的时间会更少。
除错如果应用程序很大,React Native将使测试和单元测试更加容易。 在Flutter上,由于日志没有提供信息,因此您需要花费更多时间进行错误修复。
应用程序使用系统文件有必要请求对sd卡的许可,而不可能获得每个文件的名称和路径。 要发送文件,必须使用ContentResolver。 为了最大程度地降低风险,请为与文件系统相关的所有操作留出时间。
向客户交付组件与本机开发没有明显差异,您可以选择任何便捷的服务:Crashlytics,TestFairy,TestFlight。
反应本机与Flutter
根据应用程序的性质,我们SimbirSoft会同时使用React Native和Flutter。 我们从实践中分享一些观察结果,这些观察结果有助于提供使用特定框架的功能。

总结一下
本地和混合移动应用程序的开发有其优点和缺点,企业和承包商在选择技术时都考虑了这些优点和缺点。 最重要的标准包括开发和维护的时间和成本,是否遵守任务,安全和前景以及社区的发展水平。 根据他的经验,移动开发人员可以帮助为每个特定应用选择最佳解决方案。 我们希望我们的标准和比较表对您有所帮助。 感谢您的关注!