談移動應用的跨平臺開發不能不提HTML5,PhoneGap和Sencha等平臺一直致力於使用HTML5技術來開發跨平臺的移動應用,如今看來這個方向基本算是失敗的,基於HTML5的移動應用在用戶體驗上與原生應用仍然存在着明顯的差距。前端
與上述HTML5平臺不一樣,Xamarin和React Native經過各自的方式來實現跨平臺。Xamarin基於Mono框架將C#代碼編譯爲原平生臺代碼,React Native則是在UI主線程以外運行一個JavaScript線程,二者呈現給用戶的都是原生體驗。編程
筆者恰巧兩個平臺都各使用過一段時間,在這裏就拋磚引玉,分享一下我的觀點。對於資源有限的創業團隊,若是熟悉JavaScript,使用React Native再加上React,Redux等技術能夠實現移動端、Web端、和Service端整套系統的開發,還能夠重用一部分代碼(好比Reducer和Action中的業務邏輯,以及通用的JavaScript組件代碼),React Native也很是適合快速原型的開發。對於實力相對雄厚的大中型公司,若是已經在使用Microsoft的.Net技術,而且擁有成體系的系統架構,那麼Xamarin或許是一個更好的選擇,架構設計得好的話在代碼重用方面並不遜於React Native。後端
下面從幾個方面說一說二者各自的優缺點: 安全
從編程語言的角度來講,C#和JavaScript都是成熟的主流編程語言,都有豐富的第三方庫和強大的社區支持。兩種語言都可以實現從前端一直到後端的整套方案。架構
從開發工具的角度來講,Xamarin Studio的表現只能說剛剛及格,有種和Xamarin整個產品線不在一個水平的感受,特別是重構和界面可視化編輯等方面還有很大的改善空間,而且在版本升級中常常會引入新的BUG,讓筆者多少有點患上了升級恐懼症。React Native自己沒有IDE,開發人員能夠選擇本身熟悉的JavaScript IDE,好比:IntelliJ等。框架
從第三方庫的角度來講,Xamarin的第三方庫給人一種很少很多、恰好夠用的感受。在IDE中集成了Xamarin Component Store之後,第三方庫的數量質量都有了提高,開發人員使用起來也很是方便。若是遇到特殊狀況須要本身開發或者綁定(binding)原生代碼庫時可能會比較麻煩一些。React Native則徹底依賴於JavaScript社區,NPM和GitHub,在須要自行開發和橋接(bridging)原生代碼庫時我的以爲比Xamarin容易一些。 編程語言
價格方面,Xamarin有免費版本,但在應用包尺寸上有限制。對於企業級開發最好仍是選擇它的Enterprise License,雖然價格不菲,可是能夠得到技術支持和使用平臺的其餘產品(如:Xamarin.Forms和Xamarin Test Cloud)。React Native則是徹底免費的。 工具
至於學習難度,不少人對JavaScript缺少信心,以爲這門語言很難掌握和用好,而C#和Java則相對容易安全得多。這裏筆者推薦圖靈的《你不知道的JavaScript》系列,看過以後也許可以改變這一見解。除了JavaScript語言,React Native還須要掌握Facebook的React框架,它是React Native的核心。Xamarin要求掌握C#以及iOS和Android開發的相關知識,雖然使用React Native並不必定要求會iOS和Android開發,可是對於移動應用開發者來講,不管使用什麼工具、怎樣跨平臺,瞭解各個平臺的架構設計仍是很是必要的。學習
下面是對二者各方面的一個總結:開發工具
不足和紕漏之處還望各位不吝賜教,歡迎交流討論。