作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
Sylvain砾石的头像

Sylvain砾石

作为一个跨平台的c#专家, 他从一开始就致力于娱乐领域的移动和桌面应用, 健康和体育产业.

以前在

育碧
分享

说到设定高期望. 神圣的三位一体,仅此而已!

事实是, 当你瞄准多个平台时,手机应用开发成本很高, 因为没有共享代码. 苹果要求你用Objective-C或Swift编写代码, Android要求你用Java编写代码, 而WinPhone则要求你在 .. 网。,通常是c#. 此外,每个平台还提供了大量的库来处理映射, 画, 图片, 或gps——构建一个移动应用程序需要大量的时间和知识.

使用Xamarin的 Forms, MVVMCross和SkiaSharp进行跨平台应用开发

不用说, 大多数创业公司负担不起三倍的开支, 即使是老牌企业也很难证明进入移动领域的价格是合理的.

在本文中, 您将了解Xamarin的是如何形成的, 结合MVVMCross和SkiaSharp, 能否成为构建跨平台的可行方法 移动应用程序 在不影响熟悉度、性能和独特性的前提下. 本文将回顾这三种技术,以及它们如何通过在多个移动平台上最大限度地重用代码来降低开发成本.

一个重要问题

跨平台手机应用开发的问题是真实存在的, 像这样, 多年来出现了许多不同的解决方案来减少碳排放 开发成本 通过在平台之间共享代码. 在电子游戏行业, 例如, 所有主流游戏引擎都提供跨平台解决方案, 甚至Unreal和Unity也瞄准了手机和平板电脑.

在应用前端, 在过去的几年里,已经有很多人尝试着去引领这个跨平台市场. 许多人没有达到目标,迷失在深渊中, 但其中一些在多年后仍然存活. 其中只有Xamarin的 .网。解决方案提供了对所有三个移动平台的支持.

不管是不是本地人,我来了

所以在不同的解决方案之间有一场战争,谁说战争就是宣传!

战争主要是在大前线进行的 N:成为本地人! 你需要小心这个词,因为它没有明确的意思. 这是当今移动开发世界中使用最多的词,而且非常流行. 事实是,没有人对它的真正含义达成一致.

在选择跨平台框架时, 并非所有“原生”选项都是平等的,所以要小心, 你可能会拿苹果和橘子做比较. 对一些人来说,这与编程语言有关, 对其他人来说,这是关于能够使用硬件功能, 其他人则认为这与平台api /UI的使用有关, 通常情况下,它只是关于不是一个web应用程序.

争论的每一方都有不同的观点,我不想深入挖掘,因为这是没有用的. 为什么没用呢?? 好吧,让我告诉你一个难以接受的事实:你的最终用户并不在乎!

是的,你没看错,只有你的程序员关心. 你的终端用户永远不会因为底层技术而选择你的应用:他们选择你的应用是因为它解决了他们的问题并提供了良好的体验.

所以,与其为一个词的意思而争吵, 让我们来看看Xamarin的如何提供一种有效的方式,为用户提供他们所关心的东西.

圣父,圣子,圣灵

在我们继续之前, 让我们来明确一下组成跨平台开发问题解决方案的三个要素.

父亲:沙玛林

如前所述,Xamarin的是一个 .. 网。解决方案,用于移动和桌面应用程序开发. 它在2016年被微软收购,但可以追溯到大约四年前的Mono项目. 如今,它有三种解决方案:Xamarin的.iOS, Xamarin的的.Android和Xamarin的.Mac. 其他平台已经处理了 .. 网。应用程序默认是微软的解决方案. 简而言之,Xamarin的提供了一个到平台api的直接链接 .网。. 因此,您可以使用来自 .网络应用程序. Xamarin的还有一个名为Forms的扩展模块,它为UI提供了一个抽象层.

儿子:斯基亚夏普

skasharp是一个 .. 网。包装器在谷歌的Skia矢量图形库. Skia是Android、Chrome、ChromeOS和Firefox的原生渲染引擎. 使用skasharp,您可以在 .网。应用程序,使其跨平台. 这意味着你的设计师所说的“将使你的应用变得更好”的简洁阴影可以只编码一次,而不是在每个目标平台上重复. 就我个人而言, 我认为它最好的特性是能够以某种方式呈现SVG图形,使您能够在保持清晰的同时防止各种形式因素的重复, 像素渲染.

圣灵:MVVMCross

保持每样东西的分离和松散耦合, 我们神圣的解决方案将依赖于MVVMCross. 这个框架实现了一个MVVM(模型-视图-视图模型)基础结构,这样一切都可以保持独立. 在不涉及太多技术的情况下,应用程序通常分为三个部分:

  1. 模型:数据的内存表示
  2. 视图:我们的UI,将数据和操作呈现给用户
  3. ViewModel:该层将我们的模型绑定到视图,反之亦然

在软件工程中, 我们总是努力保持视图与ViewModel分离,这样即使我们改变了可视化表示,应用程序逻辑(在ViewModel中)也可以被重用. MVVMCross通过处理数据绑定并为平台抽象提供模式和工具,帮助我们实现了这一点.

最终用户关心什么

总结一下,区分成功应用和糟糕应用的因素是不同的. 一个成功的应用程序:

  1. 解决了一个现实生活中的问题
  2. 提供愉快的体验

第一点显然与您选择的框架无关. 让我们专注于第二点. 这里有3个主要元素能够提升应用的趣味性:

  1. 熟悉
  2. Performance
  3. 独特性

熟悉

熟悉度与易用性和快速找到应用程序相关.

换句话说, 它是关于以系统范围内一致的方式使用平台的不同用户界面范例. 例如, 简单的东西,比如按钮位置, 列出上下文操作, 或者导航都有助于你的应用熟悉度.

熟悉度是基于web界面的web应用程序或框架的主要弱点. 另一方面,Xamarin的 Forms提供了到供应商提供的UI元素的跨平台映射.

因此,你的用户将获得一种符合平台整体外观和感觉的体验,因此他们会在你的应用中直观地感到自在.

Performance

坦率地说,在你的营销宣传中提到“本地”没有任何意义. 取 Jasonette 作为"原生HTTP "的例子. UI是存储在web服务器上的,所以不会出现往返和慢速问题, 所以我们看到,母语不一定意味着更好的性能!

因此,随着这个神话的破灭,当我们观察现实生活的基准时,Xamarin的的结果是 性能方面最全面的解决方案. Xamarin的 Forms不需要大量的上下文切换 与本地语言应用程序相当的性能.

我的结论是,你的实现选择才是会拖慢应用的因素,而不是Xamarin的 vs . Xamarin的. 母语. 其他选项在性能方面明显处于劣势.

独特性

如果你想要提供最好的用户体验并使你的应用与众不同,你的设计师创造一款独特外观的应用的可能性也非常重要.

很多时候,唯一性意味着创建自定义控件、动画或手势. 当它在Xamarin的不容易获得时, 您可以使用SkiaSharp (Google的Skia矢量图形渲染库的包装),并利用Xamarin的 Forms的自定义渲染器概念,尽可能地接近硬件, 而总是用一种语言编码, 这是其他解决方案无法提供的.

作为一个企业,你所关心的是什么

此时,您很可能认为框架的选择也是一个业务决策. 除了本文范围之外的因素, 比如人力资源的可用性, Xamarin的有很多东西可以提供, 特别是当与MVVMCross结合使用时. 我将详细阐述你在做决定时需要考虑的四个方面:

  1. 价格和开发成本
  2. 代码重用
  3. 组件的可用性
  4. 支援与社区

价格和开发成本

让我们把这个解决掉. 从今年年初开始, Xamarin的对自由职业者和小型企业(如初创公司)是免费的 Visual Studio社区版). 对于大型组织来说, 它是“免费”的,带有您可能已经拥有的Visual Studio许可. Xamarin的 Forms、MVVMCross和SkiaSharp也都是免费和开源的!

正如我已经提到的 .使用Xamarin的的Net路由允许您从头到尾使用单一语言开发应用程序. 大多数其他解决方案都要求程序员了解不同的语言. 在…的情况下 科尔多瓦, 例如, 你不仅需要精通HTML, Javascript, CSS, 也可能是Objective-C, Java, 和/或c#,如果你需要访问没有可用插件的供应商api.

使用的语言种类繁多,需要进行更多的上下文切换,需要掌握更多的工具,从而降低了效率. Xamarin的, 另一方面, 是一个一体化的解决方案:从Visual Studio中构建, 在所有平台上部署和调试.

虽然它与Xamarin的没有直接关系, 您还可以在c#中获得许多加快开发的特性 .网络解决方案. 也就是说,您可以从c# 4的强大特性中获益.5+像简单的多线程与async/await, 闭包, 和反射, 所有这些都被证明可以提高效率.

代码重用

您可能已经考虑过代码重用,并且很可能认为所有解决方案在这方面都是相同的. 很抱歉,伙计,你错了!

你们中的程序员可能会想知道为什么我要在MVVM层上使用内置于Forms中的MVVMCross? 好吧,这里有一些需要考虑的问题:你真的只开发手机应用吗?

通过MVVMCross隔离你的应用逻辑,并使用它提供的控制反转, 你可以在手机上重用最大量的代码, 但也适用于Windows和Mac(因为Xamarin的).Mac是你的朋友).

它不仅会节省你的钱, 它还提出了可以降低代码维护成本的良好工程实践.

组件的可用性

也许你不像我,但我讨厌重复工作. 因此, 使用现有的组件,你可以轻松地将其整合到你的应用中,这对于加快你的上市时间至关重要,同时也会降低你的成本.

选择Xamarin的和MVVMCross为您提供了两个选择现有组件的选项. 首先,Xamarin的可以使用越来越多的组件,无论是否使用Forms. Xamarin的有一个集成在Visual Studio中的组件商店,在那里你可以找到各种常见应用程序问题的解决方案,其他公司也直接销售, 因此,在开始编写自己的组件之前,一定要进行搜索(或者在构建完成后考虑出售这些组件)。.

第二个, 您将需要搜索Nuget包,因为很可能有人已经编写了您需要的代码. 在这些软件包中, 你会发现一个不错的跨平台MVVMCross插件列表,这些插件可以解决像电子邮件这样的常见问题, 全球定位系统(GPS), 或定位.

如果您已经有c#经验,那么您可能有自己喜欢的组件. 当然,你不想让他们走,他们觉得很舒服. 请放心, 你可以为现有的组件创建c#绑定,然后像使用Xamarin的一样使用它们, 即使在表单中,也需要一些自定义渲染器的帮助.

说到这个,你可能想看看 Xamarin的绑定Github存储库 在创建自己的之前.

支援及社区

最后,获得支持和示例是选择框架的一个非常重要的因素. Xamarin的已经存在一段时间了,所以今天的社区规模相当大.

在谷歌上查找信息通常会出现相当多的答案(提示:也可以尝试搜索monotouch和monodroid, Xamarin的 (Xamarin的的祖先)和Xamarin的在他们的网站上提供了很多例子和很棒的文档.

此外, 因为Xamarin的实际上只是对供应商api的绑定, 苹果和谷歌的文档总是相关的,并会回答你的许多问题. 然后,您可以创建自己的MVVMCross服务,将供应商api抽象到您的共享代码中.

至于Xamarin的的未来, 去年3月被微软收购, 我敢打赌,除了向前发展,它不会有任何进展. 自从那次交易之后, 而匹配则转向了自由模式, 这个社区不断壮大, 支持得到改善, 该产品一直在不断改进,甚至可能以更快的速度改进!

Xamarin的的未来看起来很光明.

让我们准备好轰鸣吧!

我意识到我写这篇文章可能会引起麻烦. 别误会我的意思, 还有其他的选择值得考虑,我邀请你这样做, 因为我的担心可能和你的不一样.

请记住,如果你有6周的时间,但4个月后你仍然没有准备好一款应用, 你不会赢的. 这样就会留下两个半月的时间和大量的资金来培训内部人员或雇佣有知识的人. 在这种情况下,坚持制作“原生”应用可能对你的项目的命运非常不利.

Xamarin的和这些配套技术提供的正是您的用户所关心和您所需要的. 我希望这篇文章能帮助你做出明智的决定,为你的下一个手机应用程序选择框架.

就这一主题咨询作者或专家.
预约电话
Sylvain砾石的头像
Sylvain砾石

位于 萨格奈,QC,加拿大

成员自 2016年11月7日

作者简介

作为一个跨平台的c#专家, 他从一开始就致力于娱乐领域的移动和桌面应用, 健康和体育产业.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

以前在

育碧

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

Toptal开发者

加入总冠军® 社区.