在考虑iOS或Android应用程序开发时,咱们大多数人会首先考虑Objective-C vs Swift和Java。做为本地技术堆栈,当涉及到iOS和Android应用程序开发时,它们天然是最经常使用的移动开发工具。可是,还有更多方法来构建高性能和用户友好的移动应用程序。而Xamarin就是其中之一。在本文中,咱们对Xamarin进行了深刻审查,并将其与市场上的本地和跨平台移动开发解决方案进行了比较。若是您了解基础知识,请考虑跳到您感兴趣的部分。html
什么是Xamarin?react
使用Xamarin的优势android
使用Xamarin的缺点ios
Xamarin vs Native iOS / Android与混合开发程序员
一点建议
github
在谈论移动应用程序开发的关键方法时,不可能忽视Xamarin 。Xamarin是一款用于跨平台移动应用程序开发的工具,它容许工程师在主要平台上共享大约90%的代码。做为一个相对较新的工具,它基于微软技术栈,已经有超过140万开发人员的社区。web
该平台由Mono开发,后者是一个基于.NET框架的开源开发平台,由Miguel de Icaza领导,于2001年首次推出.Xamarin公司成立于2011年5月16日。数据库
然而,与其前身不一样的是,Xamarin被建立为商业项目,直到该公司于2016年被微软收购为止。Xamarin成为在Microsoft生态系统内开发移动应用程序的流行跨平台产品。这次收购打破了使用Xamarin的财务壁垒。随着微软开发Xamarin SDK开放源代码,它成为Xamarin Visual Studio集成开发环境的一部分(咱们讨论下面用于Xamarin开发的最佳IDE )。Xamarin的主要特色是什么?编程
C#语言。Xamarin使用单一语言C#为全部移动平台建立应用程序。与解释性解决方案(如Appcelerator Titanium)不一样,Xamarin是本机编译的,这使它成为构建具备本机外观和感受的高性能应用程序的首选选项。
基于.NET框架。C#是一种成熟的语言,具备强大的安全性,可防止代码出现意外行为。因为C#是.NET框架语言之一,它能够与许多有用的.NET功能(如Lambda,LINQ和Asynchronous programming(Asynk))一块儿使用。
从技术上讲,Xamarin使用C#和包装在.Net层中的本机库进行跨平台应用程序开发。就性能和用户体验而言,这些应用程序常常与iOS和Android移动开发平台的本机应用程序进行比较。此外,Xamarin能够利用全部本机和最新的API访问,以利用Xamarin应用程序中的底层平台功能,例如iOS或Android多窗口上的ARKit。
虽然与业务逻辑,数据库访问和网络通讯相关的代码能够在全部平台上共享,但Xamarin容许您建立平台特定的UI代码层。所以,与通用混合应用相比,Xamarin跨平台应用在任何设备上看起来都是100%原生的,提供更好的用户体验。
汇编。该平台有两个主要产品:Xamarin.iOS和Xamarin.Android。在iOS的状况下,源代码直接编译为本地ARM汇编代码(Ahead-of-Time编译),而Android Xamarin应用程序首先编译为中间语言,而后 - 在运行时汇编到本机汇编代码中(Just-in - 时间编译)。可是,在这两种状况下,该流程都是自动化的,而且能够根据默认状况处理诸如内存分配,垃圾收集和平台互操做性等问题。
Xamarin.Forms。Xamarin.Forms是一款独立的产品,旨在建立原型或简单的移动应用程序,可跨iOS和Android共享100%的代码。
Xamarin.Mac。此外,工程师可使用Xamarin.Mac为Mac OS构建应用程序。这些以及来自Xamarin堆栈的其余一些产品将在稍后讨论。
平台SDK。Xamarin经过简单的C#语法提供对平台特定的SDK(iOS和Android SDK的CocoaTouch)的访问。
平台特定的代码绑定。在大多数状况下,工程师将可以处理Xamarin环境中保持各自平台原生外观和感受的开发。可是,若是您必须从新使用某些模块或实现条形码扫描,PayPal或Google Analytics集成等特定于平台的功能,Xamarin容许您调用现有的平台代码(例如Swift for iOS)。
支持可穿戴设备。Xamarin支持为Apple和Android Watch设备构建应用程序。工程师可使用适用于Mac和Windows的Visual Studio来构建iOS Apple Watch应用程序。另外,Xamarin彻底支持Android Wear。
Xamarin项目结构。预计大部分与Xamarin相关的工做将经过安装了Visual Studio和Xamarin的Windows开发计算机运行。应用程序能够直接从桌面或设备和仿真器进行调试。若是您打算在Windows上开发iOS应用程序,则Visual Studio链接到iOS故事板设计器和iOS模拟器也是可能的。还有Visual Studio for Mac,它容许在Mac上运行模拟器或直接在系留iPhone上运行。调试经过Visual Studio运行。
Xamarin项目结构。图像来源:Visual Studio文档
为了更深刻地了解Xamarin工程方面,请考虑检查这些资源:
与任何其余技术同样,Xamarin有其自身的优势和缺点,近来一直是热烈讨论的主题。为了对Xamarin和原生开发作出明智的决定,让咱们用Xamarin来衡量应用程序开发的优势和缺点。
许多公司使用Xamarin的理由很充分,包括Trello,Slack和GitHub。
Xamarin使用C#补充.Net框架来为任何移动平台建立应用程序。所以,您能够重复利用多达96%的源代码加速工程周期。Xamarin也不须要在开发环境之间切换:您能够在Visual Studio中构建彻底取代Xamarin Studio的全部Xamarin应用程序。跨平台开发工具做为IDE的内置部分提供,无需额外费用。
与基于Web技术的传统混合解决方案不一样,Xamarin构建的跨平台应用程序仍然能够归类为本地应用程序。性能指标与Android的Java(如此处所述)和Objective-C或Swift 的性能指标至关,可用于本机iOS应用程序开发。并且,Xamarin的性能不断获得改进,彻底符合本土开发的标准。Visual Studio为构建,测试和跟踪应用程序的性能提供了一个完整的解决方案:Visual Studio App Center 容许您在发布以前运行自动UI测试并识别性能问题。可是,这项服务须要支付额外费用。
Xamarin容许您使用平台特定的UI元素建立完美的体验。针对iOS,Android或Windows的简单跨平台应用程序使用Xamarin.Forms工具构建,该工具可在应用程序运行时将应用程序UI组件转换为平台特定的界面元素。随着Xamarin.Forms的使用显着增长了应用程序开发的速度,它对于面向业务的项目来讲是一个很好的选择。然而,因为额外的抽象层,性能可能会略有降低。对于自定义应用程序用户界面和更高的性能,您仍然能够单独使用Xamarin.iOS和Xamarin.Android以确保出色的结果。
借助Xamarin,您的解决方案能够得到本机级别的应用程序功能。它消除了全部硬件兼容性问题,使用插件和特定的API,以便在平台上使用通用设备功能。随着访问平台特定的API,Xamarin支持与本地库连接。这能够提供更好的定制和原生级功能,并且开销很小。
该公司于2016年2月被微软收购后,Xamarin许可政策发生了根本性的变化。包括运行时,库和命令行工具在内的Xamarin SDK已经成为开放源码,而且做为Visual Studio的一部分,能够在MIT许可下使用。经过消除许可证的主要障碍和成本,微软为平台的进一步发展铺平了道路。另外,由微软领导,并受到Unity,JetBrains和Red Hat,.NET基金会和Xamarin的支持,特别是已经成为一个可靠和强大的技术堆栈。
因为其跨平台应用,Xamarin使维护和更新变得更加简单。您能够简单地将更改或更新部署到源文件,并将它们应用于iOS和Android应用程序。可是,这仅适用于使用Xamarin.Forms或Xamarin.iOS和Xamarin.Android应用程序的业务逻辑,共享代码,更新的应用程序。所以,它能够帮助您节省时间和金钱,同时保持应用程序的最新状态。
Xamarin包含一个完整的开发工具包,包括它本身的IDE(如今被Visual Studio取代的Xamarin Studio),平台自己(Xamarin SDK),测试(Xamarin测试云),分发和分析(Hockeyapp和Xamarin)。 Insights)平台。所以,您无需投资其余工具或集成第三方应用程序来构建,测试和部署您的Xamarin应用程序。
Xamarin建议开发人员经过两种方式构建移动应用程序。第一个是使用Xamarin.iOS和Xamarin.Android,这被认为是主要的方法。使用Xamarin.Forms,Visual Studio库是第二个。Xamarin.Forms容许快速创建原型或生成具备较少平台特定功能的应用程序。这就是为何Xamarin.Forms是代码共享比定制UI更重要的应用程序的最佳选择。您将可以建立单一界面并跨平台共享,无需为每一个平台单独设计。您还能够构建应用程序,其中某些部分的用户界面是使用Xamarin.Forms构建的,其余部分则使用本机UI工具包进行设计。
尽管与Xamarin.iOS和Xamarin.Android相比,Xamarin.Forms在本地外观和感受方面仍然存在折衷,但有一个充满活力的社区关注这个工具。例如,一些技术提供商为他们的Telerik UI等库提供丰富的工程功能,提供预先配置的UI组件。
因为Xamarin.Forms旨在实现快速和无摩擦的开发,Microsoft建议使用Live Player工具。这是安装在实际手机上的应用程序,可当即测试和调试您的应用程序,而无需仿真器部署或将设备绑定到工做站。安装Live Player后,开发人员将使用手机相机扫描Visual Studio中的QR码,以便访问当前开发的应用程序。手机上的应用程序与Visual Studio中的应用程序实时同步。这极大地简化了全部设置和进一步的调试过程。不幸的是,微软中止了对Live Player的支持,但您仍然能够下载该应用程序并将其与Visual Studio配对。
Xamarin.Mac容许使用C#和.NET开发彻底原生的Mac应用程序。它集成了与Xcode在Objective-C中开发相同的库。经过将Xamarin.Mac与Xamarin.iOS和Xamarin.Android结合使用,开发人员能够在Android,iOS和Mac OS上共享高达90%的本机代码。此外,Xamarin.Mac与Xcode集成,所以开发人员可使用Xcode的Interface Builder来建立应用程序的用户界面。
Xamarin大学是一个专门的电子学习门户,供刚刚熟悉该软件包的人使用。大学迎合了认识C#的工程师以及具备一点编程经验的任何人。若是您只是将新工程师带到您的基于Xamarin的产品,大学将提供全部基本知识。该门户网站提供从初级到高级的课程,包括免费的自学,在线在线课程,办公室讲座和客座讲座。
可是,仍然有一些缺陷能够给平台蒙上阴影。那么,为何不使用Xamarin?
这彻底取决于Xamarin开发团队。第三方工具不可能为最新的iOS和Android版本提供即时支持:实施这些更改和/或引入新的插件等须要一些时间。尽管Xamarin声称提供当天的支持,但仍然可能有些延误。
本地开发普遍使用开源技术。使用Xamarin,您只能使用平台提供的组件和一些.Net开源资源,面向 开发人员和消费者。尽管选择并不像Android和iOS移动应用程序开发那样丰富,但Xamarin组件提供了数千个自定义UI控件,各类图表,图形,主题和其余强大的功能,能够仅添加到应用程序中点击次数不多。这包括内置支付处理(如Stripe),信标和可穿戴设备集成,开箱即用推送通知服务,云存储解决方案,多媒体串流功能等等。
显然,Xamarin社区比iOS或Android的小得多。所以,找到一个有经验的Xamarin开发人员多是一个挑战。虽然该平台在微软的支持下正在增加。根据不一样来源的信息,Xamarin社区占全球移动开发社会的10%。尽管Xamarin工程师的数量与iOS或Android本地社区没法比较,但该平台为其开发人员提供了普遍的支持。也就是说,有一个专门的教育平台,Xamarin大学,为那些对这项技术不熟悉的人提供资源和实践培训。使用这种支持,经验丰富的C#/ .Net工程师的学习曲线是最小的。
当使用Xamarin.iOS和Xamarin.Android构建具备真正本机外观和感受的移动应用程序时,您仍然须要编写一个平台特定的代码层。所以,至少须要有关本机技术的基本知识(Android的Java / Kotlin和iOS的Objective-C / Swift)。可是,这并不适用于Xamarin.Forms。
Xamarin的主要优点是可以跨平台分享您的代码。然而,你只能分享逻辑,UI代码将主要是平台特定的。这使得在Xamarin中构建游戏,丰富的自定义用户界面或复杂的动画变得毫无心义。使用少许的共享代码,Xamarin将变为不可行的选项。
根据其类型和复杂性,Xamarin应用程序一般比本地应用程序大(后者多是Xamarin应用程序的一半大小)。Android的一个简单的“hello,world”应用程序最多可能须要16 MB,其中大部分应用于关联的库,内容,Mono运行时和Base Class Library(BCL)程序集。
所以,Xamarin应用程序一般须要额外的优化来保持应用程序文件的大小合理。
将第三方资源与您的Xamarin应用程序集成时可能会遇到一些问题。虽然大多数工具和库提供对本地技术的全面支持,但Xamarin合规性可能不会由vedor提供。尽管Xamarin拥有本身的组件商店,但您可能须要在您的应用中须要特定的功能或整合,而这些平台并未提供这些功能或整合。
若是您有一种感受Xamarin适合您,您将有兴趣知道可使用的主要Xamarin IDE以及它们如何相互比较。
Visual Studio(VS)是Microsoft集成开发环境,用于在全部平台和设备上构建,调试和发布应用程序。Xamarin有三个主要的Visual Studio版本 - Visual Studio社区,Visual Studio Professional和Visual Studio Enterprise。选择可接受版本的关键因素是开发人员(学生或专业工程师)及其团队规模的经验。程序员能够为全部版本的Web,移动,服务器和桌面开发软件。
Visual Studio社区很是适合学生,开源项目以及多达5名用户的小型开发团队。社区软件包也适用于Visual Studio新手的团队。此版本可无偿使用。
Visual Studio Professional是一组为专业开发人员,小团队和企业使用而建立的工具和服务。此版本提供了强大的功能,能够快速理解您的代码:显示代码引用,对代码的更改,显示上次修改方法的人员,或发现是否正在传递测试。专业版包括Team Foundation Server 2017,其中提供了诸如敏捷项目规划工具,交付计划,图表等功能。该版本的年费为每用户539美圆。
Visual Studio Enterprise具备强大的支持工具和服务。它们容许管理开发和IT运营之间的复杂流程; 使用手动和自动跟踪工具跟踪质量; 得到专业培训; 和整个微软工程和测试生态系统。它包括Visual Studio Team Foundation Server和Visual Studio Team Services的Microsoft扩展。在此版本中,Team Foundation Server为您提供测试管理器,程序包管理和专用管道。企业版还有优先支持,合做伙伴优惠等等。Enterprise Studio的每一年价格为每用户2,999美圆。
对于企业用途,咱们也建议检查 Visual Studio应用程序中心。它是一种组织应用程序开发工做流程的工具,涵盖Xamarin等不一样的移动技术。在这里,工做在多个应用程序的工程团队能够将他们的工具集合在一块儿。它经过GitHub或Bitbucket自动化应用程序打包,为不一样的测试服务提供集成,支持电子邮件应用程序分发以进行测试,确保崩溃跟踪和分析。
Visual Studio Online(VSO)是一套工具,它容许开发人员轻松设置跨不一样平台的持续集成。持续集成是一种软件实践,全部代码更改都会当即进行测试并与主代码库集成。它有助于快速检查和调试代码。这个版本多是移动开发人员最相关,最有趣的版本。
若是您的开发团队考虑从Android Studio(AS)或Xcode转换到Visual Studio,则学习曲线不会那么陡峭。功能特性比较代表IDE在开发流程方面很是类似,每一个环境都有细微的差异。
从Android Studio到Visual Studio。虽然Android Studio官方支持专一于Java,C / C ++,Kotlin和XML语言,但VS支持包括AS在内的全部主流编程语言。这是因为IDE迎合了各类各样的平台。VS提供了更多的工程自由,并容许在一个环境中处理不一样的项目。若是您一直在使用与AS集成的Google Cloud Platform运行虚拟机或仅管理项目,Google还善于为VS 提供其云平台扩展。基本上,您能够直接从VS使用Microsoft云生态系统和Google Cloud。Visual Studio能够安装在全部主要平台上:Windows,Android,Mac OS和Linux。
从Xcode到Visual Studio。Xcode IDE与VS相似,支持全部主要编程语言的源代码。因此,过渡后不会有任何意外。一样,若是您在使用Xcode时与Mac OS绑定,则VS不须要Apple硬件。对于那些将CloudKit用于服务器端存储的人员,Visual Studio和Xamarin容许简单地集成CloudKit。使用VS与Xcode相比的主要缺点是相同的:Android Studio和Xcode均可以避免费使用,而VS须要至关高的订阅费。
根据开发人员的估计,Visual Studio和Android Studio都具备大体相同的易用性级别和支持质量。将相同的索引与VS和Xcode进行比较,咱们能够说VS估计值会更好一些。此外,Visual Studio在企业中更受欢迎(> 1000名员工),而大约50%的Android Studio和Xcode用户是小型企业(雇员人数不超过50人)。
考虑到Strategy Analytics在移动开发环境中的排名,Xcode和Visual Studio同样在测试能力方面排名最高。Android Studio落后。总分数为:Xcode-22; Visual Studio -21; 和Android Studio -13。
最近,许多开发人员倾向于认为Xamarin能够被认为是“本地”开发工具。事实上,有一种观点认为,“ 使用Objective-C或Swift的iOS应用程序能够完成的任何事情,以及使用Java的Android应用程序能够完成的任何事情均可以使用Xamarin在C#中完成。”
然而,本土对Xamarin辩论存在许多缺陷。让咱们看看Xamarin如何与本地开发工具和混合开发平台(Ionic,PhoneGap / Cordova)进行比较。
尽管混合移动开发工具正在迅速发展,但它们仍然缺少Xamarin提供的性能和本地功能,成本大致相同。当考虑这两种方法时,最多见的两难问题是Xamarin vs Ionic或Xamarin vs React Native (同时参阅咱们关于ReactJS和React Native的优缺点的 全面解释)。可是,后者因为底层技术(Web堆栈)中的许多限制而趋于失败。
可是,基于JavaScript的移动开发工具至少在UI方面优于混合解决方案。它是NativeScript。这个由Telerik支持的跨平台开源框架容许您在使用单个代码库的同时实现本地UI并链接到本机API以得到更好的移动体验。它的主要区别在于它使用XML标记,它编译为Android和iOS原生等效物,而不是HTML webview。
这种方法填补了原生和混合开发之间的差距,相似于Xamarin的方式。这两种工具的主要区别在于它们使用的编程语言。所以,Xamarin与NativeScript的比较应该成为更详细研究的主题。
与此同时,Xamarin与原生Android / iOS开发辩论彷佛更加复杂:两种选择都证实能够在产品质量和性能方面提供价值,但选择一般取决于您想要构建的应用程序的类型。
在比较利弊时,列出的缺点一般被认为是附带损害。大多数企业主选择Xamarin移动应用开发平台,由于它经过共享代码和使用单个技术堆栈来缩短上市时间和下降工程成本。然而,应用程序及其目标受众的目的多是更重要的考虑因素。
基于咱们团队的经验,Xamarin的最佳使用案例是企业移动解决方案。经过覆盖90%项目的标准UI,全部核心产品逻辑均可以轻松地在各个平台上共享。所以,平台定制只须要5-10%的工程量。
若是面向消费者的应用程序拥有大量用户界面,则共享代码的数量会急剧降低。所以,Xamarin跨平台开发失去了其主要优点,并可能在时间和成本上与本地解决方案至关。
可是,若是您正在寻找Xamarin替代品来构建跨平台移动应用程序,那么您可能会感到失望。虽然使用最普遍的跨平台移动开发工具是PhoneGap / Apache Cordova,Ionic Framework,Appcelerator / Titanium,但它们主要依赖于Web技术,例如HTM5或JavaScript。这就是为何这些工具都不能达到Xamarin提供的同等级别的性能和原生功能。
本文是咱们“好与坏”系列的一部分。若是您对网站开发感兴趣,请查看咱们的博客文章