
让我与您分享一些东西。 我喜欢跨平台开发的想法。 能够使用一套工具来完成我的所有任务真是一个梦想。 谁不想只使用一种工具成功完成任务? 写一次,到处跑? 我要!
我也喜欢乌托邦社会的想法。 每个人都尊重他人信念的社会,拥有重要/逻辑/合理的论据,并将任务设定为比过去更好。 但是,现实世界很少如此完美。
我想承认,我很想讨论本机,跨平台和混合应用程序开发之间的争议。 不是因为缺乏动力,而是因为希望或希望有一天会出现一组组合的工具,这为创建移动应用程序打开了大门并提供了最佳价值。 我仍在等待这一天,这篇文章应该有助于解释我对本机开发的依恋。
本机,跨平台,混合? 什么啊
我可以详细说明每种开发类型的差异,但是由于它们之间的比较可以进行很长时间,因此,我将尽量简化这一部分。
原生开发
在本机开发中,我们使用专门的工具为iOS或Android创建应用程序。 也就是说,每个平台都有一个代码库。 工具包通常包括iOS的Swift / Objective-C + Xcode / AppCode和Android的Kotlin / Java + Android Studio。
跨平台开发
我们使用一个平台/工具来翻译/编译/运行您的代码,就好像它是本机组件一样。 具体过程取决于您使用的工具,但是最终结果是,相同的代码在Android和iOS平台上运行并几乎相同。
工具的一些示例:Xamarin,React Native,Flutter
混合开发
在混合开发中,我们使用一个平台/工具来启动WebView,然后托管您的应用程序。 本质上,这意味着您的应用程序是一个通过其自己的应用程序运行的网站。 平台/工具通常还提供通过插件访问其自身功能(例如摄像机)的功能。
乐器示例:Cordova和Ionic
主要功能与基本功能
为了正确理解我的选择,我需要解释两种不同类型的工具特征。
多年来,一直存在关于为什么一种工具优于另一种工具的争论。 大多数文章讨论了该工具的明显功能,例如代码库的大小,开发时间,可以为其开发应用程序的平台数,等等。 这些比较,我喜欢称之为每个工具箱的“主要特征”。 该工具的主要特征是直接将它们与其他工具进行比较的最直接特征,因为您通常可以凭经验看到差异(即开发速度,构建时间等)。 这些特性通常是大多数人关注的,但它们并没有揭示其本质。
为了充分理解选择工具的后果,您必须考虑“固有特征”。 这些特征通常比主要特征更加微妙,其影响更难以评估。 不幸的是,通常只有在选择了工具并投入大量资金之后,才对这些特性的影响有所了解。 这些特征是文档的完整性和清晰度,便利工具的可用性等。
对开发工具做出正确的决定需要了解其固有特性。
为什么我选择本地开发
在多年的软件开发中,我有机会针对不同的项目使用多种工具。 通常,开发工具的选择是由管理人员或技术工程师为我做出的。 当我转为自由职业者后,我决定决定采用哪种技术。
最后,我的最终决定不仅要考虑工具的因素,而且还要考虑固有特性将如何随着时间的推移影响我在不同情况下的每个项目,这是我的结论。
1.持续流行
当我于2013年首次开始编程时,有很多炒作人的Cordova和Appcelerator。 几年后,Hype改用Xamarin。 几年后,它已经是React Native。 现在呢 Flutter越来越受欢迎。
我发现该工具的普及也代表了它所获得的支持。 如果该工具属于一家私人公司,那么受欢迎程度就等同于销售,这会导致支持成本增加。 如果该工具是开源的,那么流行程度取决于有多少活跃的开发人员改进了代码库。 流行性可以来来去去,并围绕此工具影响整个开发生态系统。
查看此Google趋势图,该图显示了一段时间后的各种跨平台工具。

Google趋势图大致显示了各种跨平台移动技术的搜索查询结果。
尽管此表是对受欢迎程度的粗略估算(因为它仅表示搜索数量的结果),但确实可以提供一些我作为开发人员所经历的见识。 企业和个人倾向于使用新事物。 这不一定意味着该工具会更好或更糟(因为许多文章都会争论/反对,而不考虑发布日期),但是人们总是会切换到较新的东西。
发布工具时,通常会由开发社区进行推广,并被视为“未来”。 随着时间的流逝,这可能导致较旧的工具的支撑力降低,并且逐渐萎缩。
将此与本机开发进行对比,本机开发可确保获得支持。 尽管Apple支持iOS,而Google支持Android,但本地开发始终至关重要。 这就是为什么本机开发拥有最大的开发人员生态系统的原因。 它只存在更长的时间,并且在受欢迎程度上是一致的。
另一个需要考虑的是项目的转移。 下一位开发人员至少具有本机开发领域经验的可能性非常高。 即使他们不能主要使用本机工具,大多数开发人员至少也以某种方式与这些工具相关,而跨平台解决方案的可能性要小得多。
2.商业价值/愿景
我很少听到很多人在比较开发工具时讨论业务价值。 我问了很多开发人员,甚至是技术业务的所有者,关于这一点,通常我得到的都是空洞的回报。 重要的是要了解业务价值如何与特定工具相关联以及它如何提供该价值。
例如,拿Xamarin。 早在2016年2月,微软就以大约400-5亿美元的价格收购了Xamarin。 当时,微软的愿景主要与移动应用程序的开发有关。 他们在使用此工具方面取得了长足的进步,甚至将其作为Visual Studio和Mac的Visual Studio的现成外接程序包含在内。 几年过去了,微软的愿景已经转向人工智能。
在这种转变过程中,我与Xamarin一起进行了一个项目。 在这段时间里,我熟悉了一个平台,必须使用该平台从一组稳定的工具切换到一个性能缓慢的工具。 该工具的每次更新看起来都是一次尝试,至少没有破坏任何东西。 在最好的情况下,一切都会按预期进行。 在最坏的情况下,您花了几个小时甚至一两天的时间来回滚更新,并尝试使您的环境恢复到健康状态。
Xamarin主页上没有记录这种缓慢的降级(这是可以理解的),但是如果您在论坛上查找信息,您可能会感觉到随着时间的流逝已经发生了变化。 现在,关于以前可以立即使用的功能的消息不起作用,或者有关开发人员对该工具的使用体验发生了变化的消息。 所有这些都直接影响开发成本,不仅因为原始时间,还因为代码的质量。
过渡到新工具过程中的研磨会导致间接成本增加和利润损失
我承认原生开发在这里也有问题。 例如,Apple通常尝试使开发人员以某种方式进行开发(例如,使用Storybords或MVC模板)。 该工具包也不总是很完美,因此我的大部分iOS开发实际上都使用AppCode。 尽管如此,苹果和谷歌都花费了大量时间和金钱来确保开发人员能够舒适地开发本机解决方案。 只需看看Android Jetpack,SwiftUI,甚至升级到Kotlin和Swift。
归根结底,谷歌或苹果没有世界上最好的视野,但这是一致的。 公司在一夜之间拒绝支持其工具的可能性极小。
3.节省时间
哦,是的,节省时间。 发展效力的圣杯。 这个关于任何开发工具都可以创造或破坏业务的话题引起了热烈讨论。 这个主题是任何项目的最前沿,因为它直接影响成本。 但是,让我们退后一步,问自己一个问题。
为了节省时间,我们该怎么办?
我会解释。 与商业软件一样,通常有几种解决问题的方法。 该决定主要来自特定个人或企业的情况。 这意味着“一种解决方案适合所有人”的做法很危险; 它也非常接近“我们一直做到”的心态。 不幸的是,在进行移动开发时,节省时间的常用方法是选择跨平台工具。 但这好吗? 我们可以说出另一种解决问题的方法吗? 在业务中,有句俗话“人在流程之上,在工具之上”。
高于流程,高于工具的人员
这正是做出决定时应考虑的内容。 从选择工具到创建流程/过程,甚至创建不同的开发方法之间的开发时间如何?
一个能够解决开发过程中不良心态的工具?
该工具是否简化了开发过程?
略微修改流程或思维方式能否带来更好的省时效果?
我们可以使用基础架构解决问题吗?
这些都是正确的问题,也显示了解决方案的复杂性。 这并不像选择下一个跨平台框架而不是本机开发那样简单。 什么适合您或您的公司? 只有您可以做出此选择。
由于默认情况下本机开发将产生更高质量的产品,并且几乎不受限制地受到支持,因此我将选择这套工具。 我的个人价值观决定了这一选择(追求卓越)。 自己的开发确实需要更长的时间(还有更多)。 有节省时间的方法吗? 我应该节省时间吗? 我应该只搜索预算不成问题的项目吗?
解决节省时间问题的一种方法是创建可重用的代码。 创建可以快速集成和部署到多个项目中的高质量,可重用代码。 由于我选择了耐用性工具包,因此可以确定我的可重用代码将在一段时间内可用。
4.其他推论
最终,在选择本地开发之前,我得出了许多其他结论。 在我的整个职业生涯中,我尝试了许多工具,流程和方法,其中许多都是。 对所有这些的描述将使本文非常庞大。 因此,为简洁起见,我将其中一些作为总结。
我在选择本机开发之前考虑的事项:
1.入门开发人员的时间
2.配套基础设施
3. CI / CD管道
4.支持遗留项目的费用
5.抽象层=更多错误空间
6.开发人员的可用性(使用指定工具的开发人员数量)
7.业务层次结构(Airbnb有一个很棒的博客系列,涉及这个主题)
8.平台对插件的依赖
9.使用工具时开发人员的幸福感
10.设计成本:需要以支持两个平台的方式进行设计
11.定制项目结构
12.知识资源-所需知识领域的数量(例如,Xamarin要求:+ Xamarin Api平台,C#,特定的Android功能,特定的iOS功能以及每个平台的功能知识以及它们如何通过Xamarin进行交互的知识。)
13.许可+费用
14.移动操作系统的概况。 例如:只有两个主要平台能使用多长时间?
结论
在过去的两年中,他一直使用本地移动开发作为主要工具。 我对自己的决定感到满意的众多原因之一是,我花时间考虑每种工具尽可能多的细微之处。 我知道优缺点,它为我带来了好处。
我希望本文能帮助您在选择工具时提出正确的问题。 不要以表面的价值来进行营销,请不要大肆宣传。 挖,变脏,认真思考。