Xamarin เป็น เฟรมเวิร์ก (framework) ที่ใช้ในการพัฒนาแอปพลิเคชั่นบนมือถือแบบ Cross Platform แบบ Native App โดยใช้ภาษา C#
ซึ่งโดยปกติแล้ว framework จำนวนมากที่ให้พัฒนาแบบ Cross Platform จะใช้ HTML และ javascript ซึ่ง framework เหล่านี้ แอปพลิเคชั่นจะถูกพัฒนาเหมือนเว็บไซต์สำหรับแอปพลิเคชั่นบนมือถือ โดยใช้ JS Library แล้วเว็บไซต์ก็จะถูกแปลงให้เป็น container ที่จะทำให้ UI ดูเหมือน Native app ซึ่ง framework แบบนี้มีข้อเสียคือ
1. เราจะไม่สามารถเข้าถึง Native UI ได้
2. แอปพลิเคชั่นจะทำงานช้าและไม่ให้ความรู้สึกเหมือน Native App
โดย Xamarin จะต่างจากนั้น มันจะใช้ ภาษา C# ภาษาเดียว สามารถทำงานได้บนสาม platform (Andriod , iOS และ windows) และจะให้ความรู้สึกการพัฒนาแบบ Native ได้อย่างสมบูรณ์ และสามารถเข้าถึงทุกๆ feature ของ Native SDK ได้
Native App คือ การพัฒนา App ด้วยโครงสร้างหลักของต้นกำเนิดของ App นั้นๆ โดยจะต้องใช้ไลบรารี่ หรือ SDK ที่ออกแบบสำหรับการพัฒนา App นั้นๆโดยเฉพาะ ฉะนั้นการพัฒนา App แบบ Native App เราจะสามารถสร้างและออกแบบระบบการทำงาน ได้ความสามารถของ App แบบเต็มรูปแบบ ซึ่งตรงข้ามกับ Hybrid จะเป็นการผสมผสานการทำงานผ่าน Framework อีกชั้นหนึ่ง โดยเขียนผ่าน UI ที่ถูกออกแบบมาให้ทำงานเหมือนกับ Native App แต่ความสามารถที่ได้ค่อนข้างจำกัดมาก
ทำไม ต้องใช้ Xamarin?
Xamarin จะรวม native platform ที่ทรงพลังจำนวนมาก ซึ่งประกอบไปด้วยหลายลักษณะในตัวมันเอง คือ
1.แอปพลิเคชั่นที่ถูกพัฒนาจะใช้ภาษา C# เป็นภาษาที่ทันสมัย ซึ่งมีการพัฒนาเหนือ Objective-C และ Java
2.Xamarin จะช่วยให้ include Objective-C , Java และ C++ ไลบรารี่ และให้คุณสามารถนำ code bases ใน java Objective-C หรือ C++ มาใช้ได้
3.xamarin จะสนับสนุน cross platform (Andriod , iOS และ windows)
4.ลดเวลาและต้นทุนในการพัฒนา
5.มี class ไลบรารี่ จำนวนมากให้ใช้
6.มีการตรวจสอบเวลาในการ compile ที่แข็งแกร่ง ลด Runtime errors ทำให้แอปพลิเคชั่นมีคุณภาพสูง
นอกจากนี้ Xamarin ยังมี community ของกลุ่มผู้พัฒนาที่ใหญ่ สามารถค้นหากระทู้ถามตอบปัญหาต่างๆในการพัฒนาได้ง่าย
Xamarin ทำงานอย่างไร
Xamarin จะให้ความยืดหยุ่นในการเขียน core logic โดยใช้ภาษา C# และให้ความยืดหยุ่นในการออกแบบ User interface แบบ Native ในแต่ละ platform โดยเราจะเขียน reuse code หรือ share project ไว้ใน core และเอามันมาใช้ใน user interface โดย source ของ C# โดยสามารถเรียกใช้ได้ทั้งใน Andriod และ iOS จะถูกคอมไพล์ในแต่ละ platformที่ต่างกันดังนี้
- iOS ซอร์สโค๊ดจะถูกคอมไพล์โดย Xamarin.iOS มันจะใช้ subset ของ mono framework ซึ่งframework นี้จะอนุญาตให้เข้าถึง feature เฉพาะ ของ iOS platform ได้ คอมไพล์เลอร์ของ Xamarin.iOS จะคอมไพล์ซอร์สโค๊ด เป็น ภาษากลางที่รู้จักกันดีใน ECMA CIL และจะถูกคอมไพล์อีกครั้งเป็นภาษาเครื่องของ Native ที่สามารถรันได้ในอุปกรณ์ของ iOS
กระบวนการในการแปลง CIL เป็น Native code โดย SDK ที่ชื่อว่า Mtouch โดย Mtouch จะคืนค่า application bundle ที่จะเอามาใช้ได้ใน iOS simulator หรือ อุปกรณ์ iOS เช่น iPhone ,iPad แต่ iOS Kernel จะไม่อนุญาตให้โปรแกรมสร้างโค๊ดมาในขณะ runtime ข้อห้ามนี้มีผลต่อการพัฒนาซอร์ฟแวร์ระบบที่จะรันภายใน Vitual machine โดยใช้การคอมไพล์แบบ just in time การคอมไพล์แบบนี้จะแปลงโค๊ดในรูปแบบภาษากลาง และใน runtime มันจะถูกแปลงเป็นภาษาเครื่อง เพื่อจะเป็นไปตามข้อห้าม Mtouch tool จึงต้องมีคอมไพล์ CIL ล่วงหน้า
-Android ซอร์สโค๊ดจะถูกคอมไพล์เป็นภาษากลางด้วย package ของ MonoVM+JIT ถ้ามีclassของ framework ที่ไม่ได้ใช้จะถูกถอดออก แอปพลิเคชั่นจะรันกับ Java Native types ผ่านทาง JNI (Java Native Invoke)
-windows ซอร์สโค๊ดจะถูกคอมไพล์เป็นภาษากลางที่จะ execute โดยการ built ใน runtime การคอมไพล์แบบนี้ไม่ต้องใช้ Xamarin Tools