使用Xamarin實現跨平臺移動應用開發(轉載)

剛在朋友圈看到張善友,轉發的一條分享「使用Xamarin實現跨平臺移動應用開發」,寫的確實很詳細得體,從收費到開源,這段時間xamarin受到很多質疑,如此文http://blog.csdn.net/aofengdaxia/article/details/41891945/。固然這篇隨筆也是轉載的(若是不寫成隨筆,大夥可能看不到這篇文章)。但願那些已經入坑xamarin的開發者能有一個新的認識html

原文連接:http://www.infoq.com/cn/articles/mobile-cross-platform-xamarin前端

原文做者:Adriana Blumlinux

本文要點

  • 對移動應用而言,跨平臺開發方式下降了開發和維護的代價。
  • Microsoft收購Xamarin,這使得那些專一於Microsoft技術的企業受益不淺。
  • 自從Xamarin加入到Visual Studio中以後,其使用日益普遍。固然,這也要歸因於它目前是開源和免費的。
  • Xamarin是「近乎原生」的。它將源代碼編譯爲原生的iOS和Android。
  • Xamarin.Forms、Test Cloud和Xamarin University使Xamarin平臺對開發人員更具吸引力。

做者 Adriana Blum 程序員

Xamarin曾是一種利基產品,售價昂貴。如今,它正逐漸成爲一種廣爲使用的移動應用開發工具(參見連接給出幻燈片的第4張和第6張)。出於一些緣由,Xamarin並不適用於某些類型的應用,其自己也存在着很多缺點。對此,本文將作詳細的介紹。同時,Xamarin也是一種跨平臺的開發工具。所以,咱們還將在本文中權衡跨各類平臺與原生開發上的一些優缺點。下面,咱們首先簡述Xamarin的推出及發展歷史。web

從Gnome、Mono到Ximian

Miguel de Icaza是Gnome項目的創始人,他同時也是一位開源項目冠軍(Open Source Champion )。在他看來,要讓開源項目獲得大衆的承認,必須使該項目與Microsoft、Novell等公司提供的商業軟件毫無二致。出於此考慮,de Icaza於1999年開始和Nat Friedman合做。他們曾在1997年有太短暫的接觸,那是在de Icaza的一次不成功的Microsoft面試期間。當時,de Icaza對Microsoft管理層指出,他們公司的軟件應該走上開源之路。此次面試進展的並不順利,但此後Friedman和de Icaza創立了Ximian項目,其中最主要的項目是Mono。Ximain於2003年被Novell收購,當時Novell正試圖從Microsoft贏回它們日益萎縮的網絡市場份額。此後,Novell於2011年被Attachmate收購,而Attachmate裁剪掉了Mono項目的大部分資源面試

 

這在de Icaza和Friedman看來,無疑是一個機會。所以,他們着手創立了另外一個初創項目,即Xamarin,針對開發用於移動應用開發的產品。他們的首個產品Xamarin.Mac在2012年發佈,支持開發人員使用C#語言爲Apple Mac編寫應用並經過Apple Store銷售。在2013年,他們發佈了Xamarin 2.0,這款IDE產品的推出,使開發人員可使用Microsoft Visual Studio開發用於iOS、Android和Windows的應用。可是該版本的一個主要缺點在於,Xamarin的許可費用在當時是很是昂貴的。redux

多年來,Microsfot一直關注着de Icaza的動向。在Microsoft看來,Xamarin就是公司真正須要的產品,由於Xamarin具備使用Visual Studio開發Android和iOS應用的能力。這樣,Microsoft出手收購了Xamarin,並將Xamarin做爲一種開源的IDE綁定到.NET中。這正是De Icaza多年前就但願Microsfot能去作的事情。windows

 

圖1 Xamarin的發展歷史(圖片來源:Craig Dunn的幻燈片後端

跨平臺開發的案例

移動應用開發主要有三種方式:原生的、跨平臺的和混合的。本文將不會介紹混合解決方案,由於這種解決方案一般沒法達到原生的或真正跨平臺開發的質量和穩健性

圖2 三種開發方式(圖片來源:Matt Larson在Xamarin Experience倫敦2017大會上演講幻燈片

原生開發使用特定於設備平臺的編程語言和API。例如在iOS上,使用的是Objective C或Swift。儘管使用這種方式,開發人員能推出最適用於設備的產品,但其中也存在着一些嚴重的問題:

  • 須要開發人員熟悉平臺語言和API。
  • 增長了上市時間;
  • 增大了維護代價。

在開發團隊中問題

對於開發原生應用,可能至少須要維護兩個團隊。一個團隊具有在iOS平臺上的Swift/Objective C開發技能,另外一個團隊具有在Android上的Java開展技能。甚至頗有可能還須要維護第三個團隊,即具有Windows平臺開發技能的團隊。咱們還須要確保團隊能保持最新的技能,而且人員不會被其它公司挖走,由於當前對這些技能的需求量很大。若是使用跨平臺的方法,並不能消除這個問題。可是該方法下降了開發人員入職所需的技能要求,問題獲得了必定程度上的緩解。

在開發代碼和測試代碼時,若是須要維護多個基本上在作同一工做的團隊,這最終將會對開發成本產生影響。

增長了上市時間

當公司中有多個不一樣的團隊同時投身於應用開發時,可能上市的時間會更長,由於這時會有兩個(或更多)的團隊使用不一樣的語言在不一樣的平臺上編寫、測試和調試同一個應用,而不是基於一個通用的C#技術棧。若是使用了跨平臺的方法,這將有助於縮短推出應用所需的時間。

增大了維護代價和複雜性

消費類電子產品企業出於維持自身客戶羣的考慮,喜歡不斷地推出新款手機,並不斷地對操做系統推陳出新。相應地,應用也須要作不斷地升級和更新。這使應用開發團隊忙於在新設備上測試應用、發佈新版本和補丁程序。若是使用跨平臺方式,那麼咱們能夠在單個代碼庫上測試大部分或所有設備和更改。若是咱們選擇的是獨立原生應用,那麼維護工做和發佈時間安排會更爲複雜。在一開始開發時,若是咱們建立了一個原生應用,那麼時間和開銷將保持增加。公司將須要維護一個更大規模的開發團隊。

圖3 特定於平臺的開發方式(圖片來源:Matt Larson在Xamarin Experience倫敦2017大會上演講幻燈片

Xamarin跨平臺開發的優勢

跨平臺的開發方式具備不少優勢,其中主要是減小了複雜性,從而下降了成本和工做量。儘管任一跨平臺解決方案都能有助於消除重複勞動,並具備更好的可維護性,但Xamarin還提供了其它一些優勢。下面列出其中部分優勢:

  • 提升了代碼的可重用能力;
  • 在很大程度上減小了測試工做;
  • 精簡了維護;
  • 提供全面的Xamarin環境;
  • 可在Xamarin Test Cloud提供的兩千多臺設備上作實地測試;
  • 近乎原生的性能;
  • 支持地理位置和使用iBeacon。

功能的一次性開發

在Xamarin中,有超過70%的代碼可重用。這意味着,許多針對Android開發的功能,無需重寫所有內容便可用於iOS。所以,開發人員一旦完成了針對某個環境的編碼和測試階段(不管是Android、iOS仍是Windows),就能夠將同一代碼用於其它環境,並使影響最小化。相比於使用原生開發方法,應用能夠更快地交付市場。

下降了測試時間和工做量

咱們並不是說要削減測試工做。不管應運行在何種設備上,不管選用何種開發方式,軟件測試都是任一應用開發中的重要組成。可是,在一個操做系統(例如Android)上對大部分的功能測試和調試後,就會縮減在另外一個操做系統(例如iOS)上的測試時間,由於部分功能已經在一個平臺上得以驗證並測試。這樣,開發人員能夠專一於一些特定於平臺的事項。相比起讓兩個團隊以串聯方式工做於兩個不一樣的系統上,這種方式無疑下降了測試時間和工做量。

Xamarin環境

Xamarin提供的IDE功能全面,開發人員能夠在IDE中執行構建最終產品所需的每一個任務。Xamarin最近推出了Xamarin.Forms,進一步簡化了開發。但依然須要開發人員具備Xamarin經驗,以決定是使用Forms,仍是堅持使用傳統的Xamarin開發。Xamarin官方推薦從Xamarin.Forms開始。

圖4 Xamarin與Xamarin.Forms的對比(圖片來源: Craig Dunn的幻燈片

圖5 Xamarin.Forms與Xamarin原生開發的對比(圖片來源:Xamarin官方網站

Xamarin還提供了線上的Xamarin University,有助於開發人員快速熟悉開發所需的各個領域。

訪問Xamarin Test Cloud

Test Cloud提供了一種應用測試環境,支持開發人員在其中模擬真實世界狀況對兩千多種真實手機進行實地測試。Test Cloud並不是免費的,可是對於受廣大應用目標受衆青睞的多種目標機型,使用Test Cloud無疑物有所值。此外,購買了Visual Studio Enterprise許可的組織,能夠得到Test Cloud的25%折扣。

性能近乎原生

在跨平臺方式和混合開發方式領域中,沒有競爭者的表現可與Xamarin相匹敵。其中的緣由在於,Xamarin將源代碼編譯成二進制對象,而許多競爭對手(例如Sencha和PhoneGap)僅在運行時編譯。 在2015年,一位開發人員Harry Cheung在Android和Apple上作過一些對比測試。必需要認可的是,測試當時所用設備,如今看來徹底過期了。這對於Xamarin而言尤爲如此,特別是在iOS上。

圖6 iOS平臺上開發的應用性能對比(圖片來源:Harry Cheung的Medium博客文章

圖7 Android平臺上開發的應用性能對比(圖片來源:Harry Cheung的Medium博客文章

使用iBeacons和地理位置

若是用戶須要在應用中使用Beacons和地理位置,那麼Xamarin可使用鄰近設備(其中包括Beacons和地理位置),支持定位和物聯網(IoT)。Xamarin與Estimote間有着良好的合做關係。Estimote製造設備,並提供可用於開發的Xamarin SDK。儘管用戶並不是必定要侷限Estimote的設備,可是Estimote設備的確可使生活更輕鬆,由於基於設備開發的應用能夠經過iBeacons(或其它協議)接收現場信息,其中包括了IoT設備的報告和監控狀況。

Xamarin是跨平臺的,可是近乎原生

儘管上面咱們已經介紹了跨平臺開發的多個優勢,可是在此咱們仍是要着重介紹Xamarin的一個亮點。Xamarin對於iOS和Android來講都是「近乎原生」的。爲實現這一點,Xamarin採用的一個方法是支持直接從C#調用開發人員使用Objective C/Swift for iOS及Java for Android的全部API。原生開發人員可用的標準用戶界面控件,也能夠經過Xamarin訪問。這樣,一旦應用運行在設備上,就會給出正確的觀感。

儘管使用C#能夠實現幾乎全部的 特性,可是其中可能依然須要少許的原生代碼。對於一名經驗豐富的Xamarin開發人員,這無疑是應用開發中的一種福利,由於他們能夠根據自身過往的經驗決定調用狀況。

Xamarin的適用之處

Xamarin具備強健的後端架構,很是適合於開發企業應用,以及任何須要作大量後端開發的應用。雖然Xamarin在須要功能豐富的用戶界面方面有必定侷限性,但Xamarin仍然能夠生成一些很是有吸引力的應用。在本文稍後,咱們將會給出一些案例研究。

Xamarin的最大優點在於開發時間以及跨平臺工做的效率上。因爲競爭激烈,大多數移動應用項目都給出了一個最後期限,Xamarin開發人員的開發速度無疑佔優。Xamarin的另外一個優點在於它能使用Estimote SDK,集成Beacons和智能眼鏡等物聯網設備。

Xamarin是運做在Microsoft生態系統中的,這一事實對於企業來講也是一大優點。其中的大多數企業已對Visual Studio等產品作了投資,而且極可能擁有一個穩定的.NET開發團隊。

Xamarin有不足之處

下面給出一些壞消息。在下列狀況中,Xamarin並不是最好的選擇:

  • UI界面複雜(B2C狀況下);
  • 大量的動畫和圖形(例如,遊戲);
  • 仍然須要一些原生編程的狀況下;
  • 當應用會發展成很大的規模時;
  • 須要使用特定的開源軟件庫的狀況下;
  • 若是開發人員不肯意支付Xamarin的許可費用。

UI界面複雜

若是應用面向的是最終用戶,而且須要提供豐富的前端功能,這時建議使用原生應用。Xamarin.Forms足以應對簡單的用戶界面,並能夠受益於Xamarin優異的後端功能。可是面對須要複雜用戶界面的應用時,Xamarin是沒法與原生SDK相媲美的。這是由於iOS和Android的UI必須根據各自平臺的觀感分別進行設計和實現,最終可共享的應用代碼將不足一半,達不到通常狀況下的75%,或是近乎使用Forms100%。這徹底違背了咱們使用Xamarin的初衷。所以,這時應使用Objective C或Java。

圖形和動畫

Xamarin也並不是開發遊戲應用的好選擇。Xamarin不適用於須要強大圖形或動畫的應用。儘管如此,咱們也不能徹底排除使用Xamarin開發遊戲。一個例子就是Bastion展現在iPad上的遊戲。此外,Xamarin的最新發展將會使這一情況有所改觀。

圖8 Bastion展現在iPad上的遊戲(圖片來源:Jo Ann Buckner在Xamarin官方博客上的文章

並不是100%的解決方案

正如咱們前面提到的,在一些狀況下,要構建一個完整的解決方案,咱們可能仍然須要編寫少許的原生代碼。這意味着,開發人員仍然須要一些原生技能,這會下降Xamarin提供的優點。

訪問開源軟件庫上的限制

原生開發人員可使用目標平臺上全部可用的開源軟件庫。可是,Xamarin開發人員只能使用在Xamarin環境中的開源軟件庫,這一般數量更少。隨着Xamarin的日益普及,預計在將來這個問題將會逐漸消失。正如NuGet的最新發展所示。

Xamarin應用的規模很大

Xamarin應用的規模會更大一些。開發人員可能須要作一些額外工做,去優化應用的大小。若是一個應用過大,安裝將花費更多的時間,並可能在客戶手機上引起存儲和訪問問題,這會致使用戶考慮刪除該應用。

Xamarin多是免費的,可是Visual Studio並不是免費的

因爲Xamarin是捆綁在Visual Studio中的,開發人員會發現須要Visual Studio Professional或Enterprise版才能使用所需的功能。儘管入門級產品是免費的,固然其中也不會具有全部的特性。

Xamarin提供了標準許可和雲許可,它們的價格可不便宜。下圖顯示了標準許可的報價,供讀者參考。

圖9 Xamarin許可報價(圖片來源:Xamarin官方網站

一些使用Xamarin的成功案例

下面咱們選取了幾個不一樣行業的公司做爲案例。這些公司使用Xamarin取得了滿意的效果。

Siemens PLM

圖10 Siemens PLM應用示例(圖片來源:Kyle Maxey發表在engineering.com上的文章

Siemens PLM是由一些昂貴的工程軟件組合成的龐大產品,在全球擁有超過9百萬席位和7.7萬名用戶。Siemens但願能借助一款名爲「Catchbook」的輕便移動繪圖和CAD應用,進一步擴展公司的市場。在應用中,用戶可使用手指或觸筆繪製形狀。考慮到公司具有Microsoft的開發技能,卻不具有iOS或Android的開發技能,所以Siemens選擇了Xamarin。Xamarin提供的第一個優點,就是企業能夠移植不少現有的代碼。其次,企業避免了學習原生iOS和Android開發語言的麻煩,就能讓75%的應用運行起來。

世界銀行

圖11 世界銀行應用示例(圖片來源:Ann Buckne發表在Xamarin官方博客上的文章

世界銀行有一個小開發團隊,由8位開發人員組成。團隊成員熟悉Visual Studio和C#開發,所以團隊可以使用Xamarin快速提升生產力。他們開發的一個複雜的調查系統只針對Android設備應用。這是由於世界銀行所面對的是發展中國家用戶,Android系統他們主要選擇的手機類型。

可口可樂裝瓶公司

圖12 可口可樂裝瓶公司應用實例(圖片來源: Lacey Butler發表在Xamarin官方博客上的文章

在短短的四個月時間內,全球最大的可口可樂裝瓶公司就將「MarketPlace」應用投入運行。與前面介紹的案例同樣,公司擁有具有.Net和C#技能的工做人員,他們十分熟悉Visual Studio,這就是公司對使用Xamarin有興趣的緣由。公司引入了兩名經驗豐富的Xamarin開發人員來指導團隊(順便說一句,他們在團隊合做中使用了Slack。Slack也是使用Xamarin的)。

社區評論狀況

Xamarin因爲其敏捷性,使得產品可以在最短的時間內運行起來,所以在一些移動應用開發公司中廣受好評。下面給出在Clutch Review論壇中的一些評論。

「對於具備.NET和C#經驗的開發人員而言,他們但願開發工具能集成Microsoft技術棧後端。Xamarin無疑是一種極好的工具。」

「經過與Xamarin的合做,咱們已成功地交付了大量的移動應用。這些應用獲得了咱們客戶的高度讚揚。例如,有一位客戶但願僅用正常時間的一半就交付一個應用,由於該應用將在一個大型活動中展現。正是因爲Xamarin容許咱們無縫地共享代碼,這使得咱們可以在最後期限內完成任務。客戶很是高興。面對如此時間上的壓力,使用Xamarin老是更具優點。」

「如前所述,Xamarin最大的問題是在涉及到須要高度自動化的圖形或應用時,就會面臨一些問題。」

結論

雖然Xamarin並不是適用於任一移動應用,但它的確是公司在選擇移動應用開發中的考慮對象。應用可能會至關複雜,正如上面給出的企業案例所示。在企業環境中,Xamarin中使用C#做爲首選語言,這使得其在衆多競爭對手中脫穎而出。自Microsoft收購Xamarin以來,市場也一直保持快速的增加。對於現有客戶來講,這無疑是一個好消息。

圖13 Xamarin的市場增加狀況(圖片來源:Matt Larson在Xamarin Experience倫敦2017大會上演講幻燈片

本文做者簡介

Adriana Blum任移動應用開發公司Iflexion的高級技術架構師。她在管理和交付定製移動解決方案上,擁有13年以上的經驗。她目前在幫助企業實現流程自動化、尋找新的發展機會,並建立可爲企業帶來高價值的應用。

查看英文原文: Mobile Cross-platform Development with Xamarin

有興趣的能夠關注一下個人微信公衆號[dotNet全棧開發],分享一些編程相關的經典文章

相關文章
相關標籤/搜索