看板 Soft_Job 關於我們 聯絡資訊
難得看到討論Xamarin的文章 身為使用Xamarin一年左右的菜比八來分享一下個人看法 並試著用工程師角度和公司角度提供一些想法 前情提要: 在學校只寫過C、Python和極少的C++ 進到公司後開始學習C# 目前語言熟練度 C# > Java = Swift = Obj-C 因為公司是抓原本的工程師們來摸索APP開發 所以造就了現行產品們有原生、有Xamarin、也有Xamarin.Form 又因並不是所有專案都會同時開發及維護 分到哪個專案就要寫哪種語言 所以目前是 Xamarin.雙平台(C#) Xamarin.Form(C#) Android(Java) iOS(Swift&Obj-C) 都能寫的狀況 首先先來簡單說一下Xamarin Xamarin其實分成兩種 一種是Xamarin雙平台 也就是照著平常寫Android和iOS的方式來撰寫APP 只是語言改成使用C# 但整個Life Cycle、Activity/ViewController等等的觀念都跟原生一樣 也同樣使用AXML和StoryBoard或Xib拉畫面 不過無關乎Android及iOS層的資料和資料邏輯層可以共用 也就是這部份只需要一份程式碼就可以了 而另一種是Xamarin.Form 是屬於Xamarin自己的框架 裡面沒有什麼Activity、Fragment、ViewController之類的東西 而是有屬於自己的LifeCycle和Page 畫面使用自己的XAML格式 從畫面到資料都只需要寫一份Code就可以了 真的需要雙平台各自處理的部分 再寫各自的渲染即可 渲染的部分一樣使用C# 使用Xamarin 基本上在手機上的效能表現而言其實並不會比原生差 因為它並不是先把C#轉回原生再使用 而是自己比照原生語言製作了跟底層的溝通 細節有興趣的人可以去查看相關文件及統計資料 工程師角度: 開發的語言與框架能具備 - 好寫 越多語言及框架幫你處理好的東西越好 - 快速 需要寫的東西越少越好,並盡可能的共用 - 穩定 不會莫名其妙壞掉,一更新好了這個壞了那個 對於原本就熟練C#與.NET的人來說 Java、Obj-C和Swift缺少很多慣用的類別及方法可以使用 (個人覺得Java很囉唆,Obj-C有點過時) 雙平台可以共用資料邏輯層很省事 而UI可以只寫一份的話更好 但穩定度確實差原生一截 公司角度: 產品的開發具備 - 快速 工程師需要的開發時間越短越好,不論是開新產品或增加需求 - 穩定 產品越少Bug越好 - 省成本 每次開發需要的工程師數量越少越好 這時候就要看產品特性了 有些產品注重資料的呈現 有些產品則是對畫面及操作的細節講究 對於注重資料呈現但對於畫面及操作細節沒那麼要求的產品 Xamarin(特別是Xamarin.Form)可以做到快速與省成本 而穩定度的欠缺會因對畫面及細節的不要求而影響程度不高 其實是個不錯的選擇 但對於畫面及細節要求的產品 由於Xamarin依舊需要處理大量的渲染 又比較常發生特定版本的某些功能會壞掉的狀況 Xamarin的缺點比優點來得多 使用原生甚至搭配C++開發會是更好的選擇 最後就我而言 其實Xamarin並沒有前幾篇文章下面推噓文講得那麼差 它有優勢但也有缺點 確實業界內使用Xamarin開發的公司不多 但也不是沒有 依需求和團隊狀況考量 不同的公司應該會有不同的選擇 寫到現在一年多 覺得不論是它本身或是VS for Mac都有越來越穩定 個人認為它的未來是可以期待的 (至於一些信仰問題,在這邊不列入討論, 每個人對個語言、框架和公司等等的信仰都不一樣, 雖然這篇文章多少也有一些我的信仰在裡面XD) --
yu800910: 順便問一下史蓋到底是不是偽娘?(舉手04/26 10:47
我是喜歡異性的堂堂男子漢好嗎...
ruby0509: 對不起 我看成史蓋喜歡堂堂男子漢.... 04/26 11:37
apple1969: 看成史蓋喜歡堂堂男子漢 +1 (掩面 04/26 11:45
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.104.198 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1535284144.A.647.html
aaz123456789: 蠻好奇你怎麼學這套的 網路上資源很少啊 直接看文 08/26 23:20
aaz123456789: 檔嗎 08/26 23:20
m339606: 推心得! 我在MacDev板也有Xamarin的相關心得,想了解的 08/27 00:12
m339606: 話可以參考一下 08/27 00:12
neo5277: msdn 08/27 08:56
neo5277: 然後有專門研究網站喔 08/27 08:57
bf000777966: 老實講我很好奇那個XARAMIN到底是怎樣運作的,它是 08/27 12:13
bf000777966: 把整個RUNTIME都搬過去嗎,還是直接編譯成NATIVECOD 08/27 12:13
bf000777966: E,如果這樣,一些功能不就沒有了嗎,像是GENERIC 08/27 12:13
neo5277: 基本上他還是叫用原生API 08/27 12:26
liddle: iOS 上,Xamarin 就是直接編譯為 LLVM IR Code 然後丟給 X 08/27 20:19
liddle: code。Android 上就是一個 NDK app。有 runtime。 08/27 20:19
m339606: iOS與Android做法不同,推薦還是直接去看管方文檔了解一下 08/28 00:55
m339606: 細節比較好 08/28 00:56
luluking: 分開學比較實際 除非你只想寫些騙騙人的小東西 09/03 09:44