Swift(相關構架) vs Xamarin, 那個會成為真正的廣泛接受的跨平台開發構架?

-------------搜索Xamarin時發現, 關注這個東西都是一些C#的.NET死忠粉自嗨。 沒看到幾個iOS或者Android開發者過來發表意見。

面對的問題:

公司有。NET的現成的伺服器端的代碼。 有些邏輯希望能在移動端實現。領導讓我們研究一下Xamarin和React Native, 如果可能的情況下用現有代碼修改修改做成庫活著Framework。

作為移動開發者, 我個人傾向於用Swift來開發。 特別是Swift開源後, 可以為范類Unix系統寫應用或者服務。

想聽聽大家的意見。

另: Goolge了一下,

Xamarin has about 986 thousand results.

React Native has about 61 million results.

And, Swift has 444 million results.

=====================尷尬的分割線+++++++++++++++++++++++++++++

隨手一google, 忘了還有我的Tyler女神。 尷尬啊! 話說回來, Swift Apple的詞條40 million左右的詞條。 不及React Native啊!

--------------------------------------------後續報道------------------------------------------------

我在此公司屬於新人。 後來熟悉了才知道, 技術主管是.NET出身。所以根本不懂得移動開發, 只是聽說Xamarin可以開發iOS和Android所以才試圖逼著我們用Xamarin。 後來, 在我們幾位iOS開發者的共同努力下, 說服了技術主管放棄這個可笑的念頭。並在三周時間內開發了給予Web Service API的Demo。 另: 這個技術主管人品不佳。 以後麻煩事兒不會少的。


「Goolge了一下,

Xamarin has about 986 thousand results.

React Native has about 61 million results.

And, Swift has 444 million results.」

看到這幾句我真的無言以對……

搜swift的詞條計數里應該大部分都是Taylor Swift吧

新聞全特么是TayTay啊

何況上面三組詞里只有Xamarin是專門新造的詞,Swift本身就是常用3000詞詞表裡的……

Native我就不講了……題主真是Naive……

另: Swift跟其他兩個不是一個層級的東西,

Wikipedia說:

Swift is a general-purpose, multi-paradigm, compiled programming language created for iOS, OS X, watchOS, tvOS and Linux developed by Apple Inc.

而對於Xamarin:

With a C#-shared codebase, developers can use Xamarin tools to write nativeAndroid, iOS, andWindowsapps with native user interfaces and share code across multiple platforms.

React Native enables you to build world-class application experiences on native platforms using a consistent developer experience based on JavaScript and React.

用React Native自己官網的話說:

React Native

A FRAMEWORK FOR BUILDING NATIVE APPS USING REACT

R和X都是個跨平台framework,基於Javascript和C#。

而Swift用蘋果官網自己的話說- A modern programming language that is safe, fast, and interactive. Swift is a powerful and intuitive programming language for iOS, OS X, tvOS, and watchOS.

BTW, 不管是什麼跨平台方案,本質都不是語言,而是各種文檔啊API啊……如果谷歌當真跟蘋果玩Swift了,Xamarin在移動平台方面就可以自己一邊玩去了……畢竟1%。當然現在Swift跨平台八字還沒一撇呢

官網複製了一堆東西,手機沒法調格式,待會兒更新。


因為答主提到的是Xamarin和Swift,又提到了移動開發者,所以我這裡默認答主詢問的是以後移動平台的跨平台框架

在移動平台這個事情上,我個人覺得WebApp(JavaScript+HTML+CSS)是未來

Swift會成為iOS開發的主流框架,畢竟是蘋果官方支持的親兒子

Java會繼續作為Android開發的首選語言,除非是Google官方(Alphabet)更換Android SDK使用語言

.Net繼續在Microsoft的帶領下統治WindowsPhone開發

Xamarin依舊只會是少部分開發者選用的框架

Cocos2d(cocos2d-x),Unity3D依舊會是移動平台上遊戲開發的首選

先說為啥WebApp是未來

這麼說主要是因為現在大部分用戶對於移動應用的功能需求,強於移動應用的產品效果需求

比如說淘寶,他一個應用大部分內容都是HTML頁面,翻遍了全部App就沒幾個用Android或者iOS原生框架寫的UI組件,如果沒有必要的話,可能一些接受數據的邏輯處理可能都是用JavaScript來處理的。淘寶這麼做,可能本意是繞過App Store繁瑣的軟體升級流程和等待時間,之後意外的發現其在跨平台方面的便利性,加上阿里本身就是從互聯網轉型移動互聯網的公司,其前端工程師數量足夠,讓前端工程師轉型到WebApp工程師幾乎是無縫切換,結果當然就是一片大好。經過了這麼多次版本更新,阿里的淘寶和天貓App,可以說是用Web頁面取得了和原生頁面類似的效果,至少在很多用戶看來,每天用手機刷淘寶和天貓並不覺得有什麼特別的區別,就算是有所卡頓,也會因為對於淘寶本身的需求而忽略那些卡頓造成的不愉快

同樣的,接下來我們會看到的大量微信App,也會照著同樣的路數,通過微信提供的JavaScript SDK,在微信平台上打下一片天地

類似於Path、Tweetbot這種原生開發,極致精緻的App,以後會越來越小眾化,功能至上的用戶需求會讓更多的人用腳投票,讓開發迅速、更新迅速、功能毫不遜原生App、流暢度也不那麼干擾用戶體驗的WebApp更加繁榮昌盛

Swift會在iOS上茁壯成長

作為Objective-C的繼承者,無論Swift開源與否,其都天然繼承了NS系列多年以來累積下來的各種iOS系統API,無數的新特性配合上Apple官方對於Objective-C的支持減弱,可以想像以後會有越來越多的iOS開發者切換到Swift上進行開發

Swift 2.0的開源,雖然營造了一個社區,卻無法營造一個跨平台的開源盛世,一個是Swift還太年輕,其很多框架性內容還在討論修改之中,再一個就是現在跨平台開源框架已有很多先來者(伺服器領域Python、PHP、Java),Swift要超越他們還是頗有困難,何況在移動平台支持這邊,Android和WindowsPhone的Swift框架還沒看到影子,真要讓iOS開發者去按照Android的路數寫Swift來開發Android App,我覺得略不現實

Java依舊是G(A)家給Android欽定的編程語言

之前有傳言說AlphaBet要把Swift定為Android開發語言,後來被證實是假消息。這種消息,只能說太假,連點討論的價值都沒有

就這麼說,Android發展到今天,還在被所謂的對下兼容性所折磨,當年Android版本號突飛猛進,跨過不成器的3.0直飛4.0,結果一排程序員被2.2兼容性整的低聲下氣,好在後來谷歌出了一個兼容2.x的框架庫來兼容拯救世界(時至今日很多項目依舊在使用此庫);現在Android 6.0了,很多Android還被困在4.x的時代無法前進,你說要是G(A)家說以後Android SDK只提供Swift版本,Android開發這邊還會有人支持新的Android系統么?估計這消息宣布第二天就有人揭竿而立,直接Fork一個Android Open Source Project,宣布以後他們來維護Android SDK的正義,然後G(A)家就從此和Android沒啥關係了,他們手機用戶數據、買廣告的小夢想也就徹底破滅了

所以,Java會一直在Android上快樂的運行下去,無論他跑的那片土地叫做Davlik、Dart還是YunOS

.Net會一直活躍在田牌的系統上

雖然田牌在Windows 8開始努力讓.Net成為一個Windows平台通用開發語言,可惜大量的項目用各種各樣的框架都習慣了,並沒有多少人吃田牌的安利,現在跑在Windows上的各類軟體,雖然用.Net來進行開發的越累越多,但是由於Windows系列系統對下兼容做的太好,所以.Net軟體數量要增加到能引起用戶的注意,還需要時日

至於說WindwosPhone開發領域,現在由於用戶只有1%(參考輪子哥頭像),加上田牌自己各種作死,所以往後有沒有這個平台,現在真的還很難說(想起噁心了我那麼多年的Windows Mobile,只能說微軟在移動平台上真是不上心)

Xamarin還能繼續作為一個殼活著

你說Xamarin是啥,在iOS這邊來看,這貨就和iOS上的Lua、JavaScript框架一樣,只是個殼子,其下面還是iOS自家的Runtime,他在iOS自家的Framework上套了一層,而這一層皮有沒有降低運行效率,那就仁者見仁智者見智了。但至少從支持度上說,相比Apple自家的Swift肯定是要少了很多。

作為一個在任何一家平台都是外來者的框架,處境很尷尬,要有足夠資源的強大社區,才能支撐起相對於第一方平台來說支持上的不足。就現在看來Xamarin做的還算成功,但從整體來看還是小眾

Cocos2d-x、Unity3D,依舊會是遊戲的不二選擇

遊戲從業人員可能都懷有一顆廣大的心,特別是移動遊戲從業人員,他們希望自己製作的任何遊戲都是使用任意平台的人都能夠玩到的,所以蘋果搞了一個自家的引擎結果成了3D建模展示工具(發布會演示的Zen),G(A)家一早就看清了趨勢壓根就沒想參合進來,田牌……額……

但是無論如何,現在的狀況,以後的狀況,就是遊戲開發依舊會用著這類遊戲引擎來開發遊戲,WebApp在JS引擎框架們想到好的方法來解決展示效率的問題之前,所謂的HTML5小遊戲也就只能是小遊戲了

最後,針對樓主你被領導安排去做的事情,解決方案應該是:

聯合伺服器端程序員一起對需要共享的邏輯進行C++或者C Lib製作,然後通過各個平台提供方法(Android有NDK,iOS有混合編譯)將這個庫編譯到程序內,說不定不止能解決問題,還能提高效率

PS:騰訊家通訊庫似乎就是按照這個路數做的

=====體內酒精含量:0.4%=====

樓上那田牌家的程序員,能用你們內部bing索引庫給我們看看bing家的真實搜索條目結果么?(輪子哥以前說他可以訪問那玩意的


等什麼時候Swift能跨平台了,才有資格討論這個問題吧。

另外,為什麼我Goolge的結果跟你差別巨大呢?

Xamarin: 5,190,000 results

"React Native": 443,000 results(注意引號)

Swift programming: 13,900,000 results


不兼容Windows的跨平台都是偽跨平台,你們玩的開心就好


題主的需求是將一部分伺服器端邏輯放在移動端實現,而且還要考慮一部分代碼重用,在這個前提下那還有其他的選擇嗎?當然如果之前伺服器端的代碼並非是你做的,那麼你了解和學習之前legacy的代碼的時間還不如重新做,而且你們領導也同意的話,當然要選擇一個能夠持續發展的前端框架,同時還要能夠達到公司領導的跨平台要求,你只能自求多福了,關鍵看這個跨平台是一個怎樣的跨法!如果只是安卓、iOS和MacOS,那麼選擇React或者Swift是OK的,但是如果全平台支持,肯定是Xamarin了。

另外我搜索的結果如下:


查看這個問題時發現,大多數認為不支持windows還叫跨平台的都是些果粉在自嗨。


我頭回聽說Swift/Object-C能夠跨平台啊,無論是iOS開發還是OS X開發開發,首先都需要一台配置不錯的蘋果機,就憑這一點,我可能一輩子都和蘋果的技術陣營絕緣了……


不支持Windows也敢叫跨平台?


1、xamarin雖然語言用的c#,但是依舊還是依賴cocoatouch的framework,並非.net framework,學習成本並不低多少

2、xamarin的sdk自詡與蘋果的sdk高度同步,但是這個承諾能堅持到什麼時候不得而知,xamarin對於微軟可能只是一個可以隨時放棄的實驗方向,而你願意充當這個試驗品嗎?

3、網上相關資料實在太少,第三方開源庫就無從談起了,遇到問題會很麻煩,特別是針對初次接觸蘋果開發的人,暗坑太多

4、你別指望有公司會招聘xamarin開發工程師,如果你之前是wp開發工程師你應該知道跟著微軟混就是在浪費自己的人生

5、react native主要目的還是為了能靈活調整業務邏輯,而非簡化開發,所以這兩者是完全不同概念的事物

6、少用非主流的東西


查了一下詞頻表。如果以後發明了什麼東西,我要給它起名為 the

Goolge了一下,

Xamarin has about 986 thousand results.

React Native has about 61 million results.

And, Swift has 444 million results.


其實移動端的話……不支持 windows,無所謂啊。


手游界(Unity)基本上都是C#的地盤,哪怕你的遊戲運行在iOS和Android上也一樣

Xamarin的話,MS自己的iOS和Android APP好像都已經用這東西做了,一個Solution里直接就是公共代碼和iOS和Android的工程

至於Swift……貴果開心就好


不請自來。很多答案都在批 Swift 或 Xamarin 的缺點。不過我覺得這不是重點,重點是你們公司的需求是什麼。

1. 你已經提到你們公司有很多 .net 伺服器端的代碼了。我猜應該是使用 C# 語言,這一點和 Xamarin 很搭。而且伺服器端代碼應該是業務邏輯比較多,很多代碼都是進行接收請求,然後讀寫資料庫的。所以我猜會有大量的代碼可以重用。

2. 不推薦使用 Swift 進行開發。Swift 的 ABI 還不夠穩定,自己玩玩也就罷了。如果在公司使用,還是謹慎一點為好。一旦哪天 Swift 又變了導致出問題,總得有人擔這個責任,希望不是題主。Xamarin 現在則大大的不一樣了,現在雖然委身於微軟,但給人的感覺就是比以前靠譜多了,親爹比乾爹更給力。

3. 從現狀來看,Swift 有跨平台的基礎(已經有人移植到 Android 上),但離真正的跨平台還有一段距離。如果你的公司願意等個三五年,等 Swift 成熟起來,那就皆大歡喜了。你的公司肯定願意等,不管你信不信,反正我是不信。

在移動端跨平台這塊,還有 React Native,RubyMotion 等架構可以選擇。但目前來看,我覺得最成熟、最靠譜、速度最快的就是 Xamarin 了。Xamarin 也不是沒有缺點,比如 Xamarin Forms 說是跨平台的界面開發,但還是避免不了使用原生的代碼和開發庫,對開發人員要求比較高。

如果是我,我會很不負責任地選擇 Xamarin,重要的是 Xamarin 現在對小公司免費~~(我覺得以前的授權費很貴)


看見這麼多錯別字和 「。Net」,我覺得你應該先提高自身姿勢水平。


提到跨平台。。swift怎麼跨啊!

.net的跨好歹出了個core。

swift啥時候出可以在wp和Windows上跑的程序才叫跨平台吧。谷歌搜索結果只能說明swift的使用者人數多和跨不跨平台沒關係。


Xamarin最主要的功能,我想應該是:你能做到多平台共享代碼!目前正在學習中,會C#可以很容易上手。


自從xamarin開源加免費之後,我們團隊一直在研究,雖然遇到很多坑,但是現在已經基本能運用自如了。說實話,坑真的很多,而且網上找不到解決方案,但是開發出來的APP,跟原生的性能很相近,目前個人認為,會繼續使用xamarin,畢竟跨平台一定是未來的發展趨勢。個人觀點,不喜勿噴~


沒幹過跨平台的事情,不過看網上程序員的討論,跨平台不是也有用CC++做底層Java/Swift/C#做界面來跨的嗎?共用底層代碼,iOS/Android/WP三個移動平台共同支持的語言就是CC++吧。

還有一種是利用hybrid app,共用上層代碼。

還有就是Xamarin,這個還挺出名的。。。

至於Swift,我就知道它開源了。。。哪位大神能解釋一下它怎麼跨呢?難道跟C++一樣共用代碼嗎?

可是這樣的話。。。Python不也算是跨平台嗎?真心求教。。。我的概念好亂。


題主心中早就有所選擇了吧。。。



都不會,因為瀏覽器不兼容,JS才是最有希望完成前端大統一的(不一定是react native)


推薦閱讀:

如何理解android mvp模式中的interactor?
為什麼 Android 中安裝在 SD 卡上的應用無法添加 Widget?
Android 5.0 如何實現將布局的內容延伸到狀態欄?
最近Android studio出了1.0版,但是SDK一直無法下載,請問大家是怎麼解決的?
如何成為 Android 開發高手?

TAG:Android開發 | MicrosoftVisualStudio | Net開發 | Swift語言 | Xamarin |