使用Xamarin實現跨平臺移動應用開發
\\\本文要點
\\
- 對移動應用而言,跨平臺開發方式降低了開發和維護的代價。\\t
- Microsoft收購Xamarin,這使得那些專注於Microsoft技術的企業受益匪淺。\\t
- 自從Xamarin加入到Visual Studio中之後,其使用日益廣泛。當然,這也要歸因於它目前是開源和免費的。\\t
- Xamarin是“近乎原生”的。它將原始碼編譯為原生的iOS和Android。\\t
- Xamarin.Forms、Test Cloud和Xamarin University使Xamarin平臺對開發人員更具吸引力。\
Xamarin曾是一種利基產品,售價昂貴。現在,它正逐漸成為一種廣為使用的移動應用開發工具(參見連結給出幻燈片的第4張和第6張)。出於一些原因,Xamarin並不適用於某些型別的應用,其本身也存在著不少缺點。對此,本文將做詳細的介紹。同時,Xamarin也是一種跨平臺的開發工具。因此,我們還將在本文中權衡跨各種平臺與原生開發上的一些優缺點。下面,我們首先簡述Xamarin的推出及發展歷史。
\\從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的許可費用在當時是非常昂貴的。
\\多年來,Microsfot一直關注著de Icaza的動向。在Microsoft看來,Xamarin就是公司真正需要的產品,因為Xamarin具有使用Visual Studio開發Android和iOS應用的能力。這樣,Microsoft出手收購了Xamarin,並將Xamarin作為一種開源的IDE繫結到.NET中。這正是De Icaza多年前就希望Microsfot能去做的事情。
\\\\圖1 Xamarin的發展歷史(圖片來源:Craig Dunn的幻燈片)
\\跨平臺開發的案例
\\移動應用開發主要有三種方式:原生的、跨平臺的和混合的。本文將不會介紹混合解決方案,因為這種解決方案通常無法達到原生的或真正跨平臺開發的質量和穩健性。
\\\\圖2 三種開發方式(圖片來源:Matt Larson在Xamarin Experience倫敦2017大會上演講幻燈片)
\\原生開發使用特定於裝置平臺的程式語言和API。例如在iOS上,使用的是Objective C或Swift。儘管使用這種方式,開發人員能推出最適用於裝置的產品,但其中也存在著一些嚴重的問題:
\\- 需要開發人員熟悉平臺語言和API。\\t
- 增加了上市時間;\\t
- 增大了維護代價。\
在開發團隊中問題
\\對於開發原生應用,可能至少需要維護兩個團隊。一個團隊具備在iOS平臺上的Swift/Objective C開發技能,另一個團隊具備在Android上的Java開展技能。甚至很有可能還需要維護第三個團隊,即具備Windows平臺開發技能的團隊。我們還需要確保團隊能保持最新的技能,並且人員不會被其它公司挖走,因為當前對這些技能的需求量很大。如果使用跨平臺的方法,並不能消除這個問題。但是該方法降低了開發人員入職所需的技能要求,問題得到了一定程度上的緩解。
\\在開發程式碼和測試程式碼時,如果需要維護多個基本上在做同一工作的團隊,這最終將會對開發成本產生影響。
\\增加了上市時間
\\當公司中有多個不同的團隊同時投身於應用開發時,可能上市的時間會更長,因為這時會有兩個(或更多)的團隊使用不同的語言在不同的平臺上編寫、測試和除錯同一個應用,而不是基於一個通用的C#技術棧。如果使用了跨平臺的方法,這將有助於縮短推出應用所需的時間。
\\增大了維護代價和複雜性
\\消費類電子產品企業出於維持自身客戶群的考慮,喜歡不斷地推出新款手機,並不斷地對作業系統推陳出新。相應地,應用也需要做不斷地升級和更新。這使應用開發團隊忙於在新裝置上測試應用、釋出新版本和補丁程式。如果使用跨平臺方式,那麼我們可以在單個程式碼庫上測試大部分或全部裝置和更改。如果我們選擇的是獨立原生應用,那麼維護工作和釋出時間安排會更為複雜。在一開始開發時,如果我們建立了一個原生應用,那麼時間和開銷將保持增長。公司將需要維護一個更大規模的開發團隊。
\\\\圖3 特定於平臺的開發方式(圖片來源:Matt Larson在Xamarin Experience倫敦2017大會上演講幻燈片)
\\Xamarin跨平臺開發的優點
\\跨平臺的開發方式具有很多優點,其中主要是減少了複雜性,從而降低了成本和工作量。儘管任一跨平臺解決方案都能有助於消除重複勞動,並具有更好的可維護性,但Xamarin還提供了其它一些優點。下面列出其中部分優點:
\\- 提高了程式碼的可重用能力;\\t
- 在很大程度上減少了測試工作;\\t
- 精簡了維護;\\t
- 提供全面的Xamarin環境;\\t
- 可在Xamarin Test Cloud提供的兩千多臺裝置上做實地測試;\\t
- 近乎原生的效能;\\t
- 支援地理位置和使用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情況下);\\t
- 大量的動畫和圖形(例如,遊戲);\\t
- 仍然需要一些原生程式設計的情況下;\\t
- 當應用會發展成很大的規模時;\\t
- 需要使用特定的開源軟體庫的情況下;\\t
- 如果開發人員不願意支付Xamarin的許可費用。\
UI介面複雜
\\如果應用面向的是終端使用者,並且需要提供豐富的前端功能,這時建議使用原生應用。Xamarin.Forms足以應對簡單的使用者介面,並可以受益於Xamarin優異的後端功能。但是面對需要複雜使用者介面的應用時,Xamarin是無法與原生SDK相媲美的。這是因為iOS和Android的UI必須根據各自平臺的觀感分別進行設計和實現,最終可共享的應用程式碼將不足一半,達不到一般情況下的75%,或是近乎使用Forms時100%。這完全違背了我們使用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年以上的經驗。她目前在幫助企業實現流程自動化、尋找新的發展機會,並建立可為企業帶來高價值的應用。
\\相關文章
- Xamarin ios 教程 Xamarin跨平臺開發 C#蘋果應用開發iOSC#蘋果
- 淺談移動應用的跨平臺開發工具(Xamarin和React Native)React Native
- [譯] 使用 Flutter 實現跨平臺移動端開發Flutter
- C#移動跨平臺開發(2)Xamarin移動跨平臺解決方案是如何工作的?C#
- Flutter嚐鮮:跨平臺移動應用開發Flutter
- C#蘋果應用開發——第一講初始Xamarin Xamarin ios 教程 Xamarin跨平臺開發C#蘋果iOS
- 跨平臺移動應用開發迎來“大殺器”,Xamarin.Essentials正式版釋出
- CrossApp 0.1.5 釋出:跨平臺移動應用開發引擎ROSAPP
- 跨平臺移動應用開發引擎CrossApp更新至0.1.8ROSAPP
- 《React Native跨平臺移動應用開發》讀後鬼扯React Native
- 移動跨平臺開發深度解析
- hybird跨平臺移動app開發APP
- Microsoft:使用Xamarin.Forms平臺開發移動應用指南-1187頁(附下載)ROSORM
- 調查:開發人員首選的移動應用開發跨平臺工具
- 使用Xamarin開發移動應用示例——數獨遊戲(八)使用MVVM實現完成遊戲列表頁面遊戲MVVM
- 移動端跨平臺開發的深度解析
- 用 Visual Studio Code 做基於 .NET MAUI 跨平臺移動應用開發UI
- 5大移動應用開發平臺推薦
- 可匯出原生移動應用的跨平臺開發引擎CrossApp正式開源!ROSAPP
- MediaPipe - 跨平臺機器學習應用開發框架API機器學習框架
- 10天學會跨平臺移動應用開發之AppCan視訊教程APPPCA
- 移動應用程式發展趨勢:跨平臺開發、隱私保護、使用者體驗等
- 使用Xamarin開發移動應用示例——數獨遊戲(六)使用資料庫遊戲資料庫
- 移動開發的跨平臺技術演進移動開發
- TypeScript, Angular 和移動端的跨平臺開發TypeScriptAngular
- 用JS開發跨平臺桌面應用,從原理到實踐JS
- 跨平臺打造移動原生應用的10大武器
- 使用Xamarin開發移動應用示例——數獨遊戲(二)建立遊戲介面遊戲
- 使用Xamarin開發移動應用示例——數獨遊戲(七)新增新遊戲遊戲
- Xamarin開發教程如何使用Xamarin開發Android應用Android
- 為什麼移動端跨平臺開發不靠譜?
- 推薦幾款實用的移動開發平臺移動開發
- JSBridge框架解決通訊問題實現移動端跨平臺開發JS框架
- 淺談移動跨平臺開發框架的發展歷程框架
- C#移動跨平臺開發(1)環境準備C#
- 聊聊移動端跨平臺開發的各種技術
- HTML5、Web引擎與跨平臺移動App開發HTMLWebAPP
- 使用Xamarin開發移動應用示例——數獨遊戲(五)儲存遊戲進度遊戲