在考慮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提供的同等級別的性能和原生功能。
本文是咱們「好與壞」系列的一部分。若是您對網站開發感興趣,請查看咱們的博客文章