Xamarin คือแพลตฟอร์มของ Microsoft สำหรับสร้างแอปพลิเคชันมือถือในภาษา C# ซึ่งประกาศในปี 2011 ตาม Microsoft Xamarin Documentation, 2024 Xamarin ช่วยให้คุณเขียนแอปพลิเคชันสำหรับ iOS, Android และ Windows ด้วยฐานโค้ดร่วมใน C# และ .NET โดยใช้ Mono Runtime สำหรับคอมไพล์เป็นโค้ดเนทีฟ ตั้งแต่ปี 2024 Xamarin.Forms ถูกแทนที่ด้วย .NET MAUI
ประเด็นสำคัญ
Xamarin คือแพลตฟอร์มที่ใช้ .NET และ Mono ซึ่งช่วยให้ใช้ C# สำหรับสร้างแอปพลิเคชันมือถือข้ามแพลตฟอร์มได้ บริษัท Xamarin ก่อตั้งขึ้นในปี 2011 และถูก Microsoft เข้าซื้อในปี 2016 ด้วยมูลค่า 400 ล้านดอลลาร์ หลังจากการเข้าซื้อ Xamarin ก็กลายเป็นส่วนหนึ่งของระบบนิเวศ Visual Studio และ Azure
ก่อนการเข้าซื้อ Xamarin เป็นผลิตภัณฑ์เชิงพาณิชย์ที่มีใบอนุญาต Enterprise Microsoft ทำให้ฟรีเป็นส่วนหนึ่งของ Visual Studio Community และยังเปิดซอร์สโค้ดของ Mono Runtime และ SDK bindings อีกด้วย ส่งผลให้ความนิยมเพิ่มขึ้น: ภายในปี 2020 Xamarin ถูกใช้ใน 15% ของโปรเจกต์ข้ามแพลตฟอร์ม ตามรายงานของ SlashData
แนวคิดหลักของ Xamarin คือการแบ่งโค้ดออกเป็นสามชั้น: ตรรกะทางธุรกิจร่วม (C#, .NET Standard), โปรเจกต์เฉพาะแพลตฟอร์ม (iOS, Android) และ UI ร่วมแบบเลือกได้ผ่าน Xamarin.Forms แนวทางนี้ช่วยให้สามารถนำโค้ดกลับมาใช้ใหม่ได้ถึง 75% ในขณะที่ยังคงการเข้าถึง API ดั้งเดิมของแต่ละแพลตฟอร์ม
เวอร์ชันแรก Xamarin 1.0 เปิดตัวในปี 2012 โดยรองรับเฉพาะ iOS การรองรับ Android ถูกเพิ่มในปี 2013 Xamarin.Forms — กรอบงาน UI เชิงประกาศ — ถูกนำเสนอในปี 2014 ในการประชุม Evolve Xamarin 4.0 (2016) รวมการรองรับ watchOS และ tvOS Xamarin 5.0 (2019) นำเสนอสไตล์ CSS และธีม Material Design
เวอร์ชันหลักล่าสุด Xamarin.Forms 5.0 เปิดตัวในปี 2021 Microsoft ประกาศว่า Xamarin กำลังเข้าสู่โหมดสนับสนุน (สิ้นสุดอายุการใช้งาน — 1 พฤษภาคม 2024) และแนะนำให้ย้ายไปยัง .NET MAUI (Multi-platform App UI) ซึ่งเป็นส่วนหนึ่งของ .NET 6+ Xamarin.Forms 5.0 ไม่ได้รับฟีเจอร์ใหม่อีกต่อไป มีเพียงการแก้ไขความปลอดภัยที่สำคัญเท่านั้น
Xamarin.Forms คือกรอบงาน UI ที่ทำให้อินเทอร์เฟซเป็นนามธรรมผ่านชุดคอมโพเนนต์แบบรวม มาร์กอัป XAML (ContentPage, StackLayout, Label, Button) จะถูกแมปไปยังคอนโทรลเนทีฟบนแต่ละแพลตฟอร์มผ่านเรนเดอเรอร์ Label จะถูกแปลเป็น UILabel บน iOS และ TextView บน Android แนวทางนี้ให้โค้ด UI ร่วมได้ถึง 95%
Xamarin.Native (หรือ Xamarin.iOS และ Xamarin.Android) เป็นแนวทางที่ไม่มี UI ร่วม นักพัฒนาสร้างหน้าจอแยกสำหรับ iOS (Interface Builder หรือ Storyboard) และ Android (AXML) โดยใช้แบ็กเอนด์ C# เดียว ซึ่งให้การควบคุมรูปลักษณ์ของแต่ละแพลตฟอร์มอย่างสมบูรณ์ แต่เพิ่มการทำซ้ำโค้ด UI เป็น 50–60%
ตาม แบบสำรวจนักพัฒนา Microsoft 2023 70% ของโปรเจกต์ Xamarin ใช้ Xamarin.Forms, 20% ใช้ Xamarin.Native กับบริการร่วม และ 10% ใช้แนวทางแบบผสมกับเรนเดอเรอร์แบบกำหนดเองสำหรับการปรับแต่งเฉพาะแพลตฟอร์ม
สถาปัตยกรรม Xamarin ประกอบด้วยสองระดับ ระดับล่างคือ Mono Runtime ซึ่งทำงาน C# IL (Intermediate Language) บนแพลตฟอร์ม ระดับบนประกอบด้วย Managed Callable Wrappers (MCW) สำหรับ iOS และ Android Bindings สำหรับ Android ซึ่งให้การเข้าถึง API ดั้งเดิมจากโค้ด C# ที่ถูกจัดการ
Mono คือการใช้งาน .NET Framework แบบโอเพนซอร์ส ใน Xamarin Mono ทำหน้าที่เป็น Common Language Runtime (CLR) โหลดแอสเซมบลี C# และคอมไพล์เป็นโค้ดเครื่อง บน iOS Mono คอมไพล์แบบ Ahead-of-Time (AOT) — เป็นโค้ดเครื่อง ARM64 เนื่องจาก Apple ห้ามการคอมไพล์ JIT ในแอปพลิเคชันผู้ใช้ บน Android Mono ใช้การคอมไพล์ JIT กับโปรไฟล์ AOT
iOS Bindings (Xamarin.iOS) คือตัวห่อ C# เหนือรันไทม์ Objective-C แต่ละคลาส UIKit (UIView, UIViewController) จะถูกแทนด้วยคลาสที่ถูกจัดการในแอสเซมบลี Xamarin.iOS.dll ตัวเลือก Objective-C ถูกเรียกผ่านกลไก MessageUI บน Android Xamarin.Android ใช้ Android Callable Wrappers (ACW) — สะพาน JNI ระหว่าง C# และ Java/Kotlin ไลบรารี Kotlin ถูกห่อผ่าน Android Bindings Library
XAML (eXtensible Application Markup Language) คือภาษาเชิงประกาศสำหรับอธิบาย UI ใน Xamarin.Forms XAML กำหนดโครงสร้างหน้าจอ: หน้า (ContentPage), คอนเทนเนอร์ (StackLayout, Grid, FlexLayout) และองค์ประกอบ (Label, Entry, Button, ListView) โค้ดเบื้องหลังใน C# จัดการเหตุการณ์ (Clicked, PropertyChanged) และจัดการการเชื่อมโยงข้อมูล (Binding, Data Binding)
รูปแบบ MVVM คือสถาปัตยกรรมที่แนะนำสำหรับ Xamarin.Forms Model เก็บข้อมูล, ViewModel ใช้ INotifyPropertyChanged และคำสั่ง (ICommand) และ View (XAML) เชื่อมโยงผ่าน BindingContext การใช้ ICommand ผ่าน RelayCommand หรือ Prism DelegateCommand ช่วยให้ทดสอบ ViewModel โดยไม่ต้องพึ่งพา UI ไลบรารี Prism.Forms ให้ NavigationService, DialogService และความเป็นโมดูล
using Xamarin.Forms;
namespace XamarinApp
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
var label = new Label
{
Text = "Hello, Xamarin!",
FontSize = 24,
VerticalOptions = LayoutOptions.Center,
HorizontalOptions = LayoutOptions.Center
};
Content = new StackLayout
{
Children = { label }
};
}
}
}
ภาษา C# ที่เป็นหนึ่งเดียว — ข้อได้เปรียบหลักของ Xamarin นักพัฒนา C# และ .NET สามารถสร้างแอปพลิเคชันมือถือได้โดยไม่ต้องเรียนรู้ Swift, Kotlin หรือ Objective-C ตรรกะทางธุรกิจ เครือข่าย ฐานข้อมูล (SQLite ผ่าน ORM) การเข้ารหัส และการบันทึกถูกเขียนเพียงครั้งเดียวและนำกลับมาใช้ใหม่บนทุกแพลตฟอร์ม ซึ่งช่วยให้การบำรุงรักษาและการทดสอบโค้ดง่ายขึ้น
การเข้าถึง API ดั้งเดิม — Xamarin ให้การเข้าถึง API ของ iOS (Cocoa Touch) และ Android (Android SDK) 100% ผ่าน bindings เมื่อมีการเปิดตัวเวอร์ชันใหม่ของ iOS หรือ Android Microsoft จะเผยแพร่ bindings ที่อัปเดตภายใน 24–48 ชั่วโมง สำหรับ bindings ที่ขาดหายไป (ไลบรารี Objective-C หรือ Kotlin แบบกำหนดเอง) จะสร้าง Android Bindings Library หรือ iOS Binding Library ด้วยตนเอง
การรวมกับระบบนิเวศของ Microsoft — Xamarin รองรับ Visual Studio, Azure DevOps, App Center (CI/CD, การทดสอบ, การตรวจสอบ) และ Enterprise Mobility + Security (Intune, ADAL, MSAL) App Center Analytics และ Crashes รวบรวมข้อมูลจากแอปพลิเคชันจริง Visual Studio App Center ทำให้การสร้าง การทดสอบบนอุปกรณ์ และการเผยแพร่ไปยังร้านค้าแอปเป็นอัตโนมัติ
ข้อเสีย ของ Xamarin รวมถึงขนาดแอปพลิเคชัน — APK Xamarin.Forms ที่มีหน้าจอว่างมีขนาด 25–35 MB เทียบกับ 5–8 MB ของแอป Android เนทีฟ เวลาคอมไพล์ก็สูงกว่าเช่นกัน: โปรเจกต์ขนาดกลางใช้เวลา 2–5 นาที เทียบกับ 30–60 วินาทีใน Android Studio เนทีฟ Mono Runtime เพิ่ม 15–20 MB ให้กับไบนารีสุดท้าย
ข้อเสียประการที่สองคือ ความล่าช้าของ API ใหม่ ฟีเจอร์ iOS/Android ใหม่ปรากฏในการพัฒนาเนทีฟทันที ในขณะที่ Xamarin มาถึงหลังจากปล่อย bindings 1–2 เดือน iOS 17 SDK (2023) รองรับโดย Xamarin อย่างสมบูรณ์ 3 สัปดาห์หลังจากเปิดตัว สำหรับโปรเจกต์เร่งด่วน สิ่งนี้อาจเป็นสิ่งสำคัญ .NET MAUI แก้ปัญหานี้ผ่านการรวมโดยตรงกับ .NET 8
| เกณฑ์ | Xamarin | .NET MAUI |
|---|---|---|
| แพลตฟอร์ม | iOS, Android, Windows | iOS, Android, Windows, macOS, Tizen |
| กรอบงานพื้นฐาน | Mono + .NET Standard | .NET 6+ (BCL แบบรวม) |
| กรอบงาน UI | Xamarin.Forms | .NET MAUI (ผู้สืบทอด) |
| สถานะการสนับสนุน | สิ้นสุดอายุการใช้งานตั้งแต่ 1 พฤษภาคม 2024 | การพัฒนาที่กำลังดำเนินการโดย Microsoft |
| Hot Reload | จำกัด | XAML Hot Reload + C# Reload |
.NET MAUI (Multi-platform App UI) คือวิวัฒนาการของ Xamarin.Forms ที่ Microsoft เปิดตัวในปี 2022 พร้อมกับ .NET 6 MAUI รวม iOS, Android, Windows และ macOS เป็นโปรเจกต์เดียว โดยไม่ต้องมีโปรเจกต์แยกสำหรับแต่ละแพลตฟอร์ม ต่างจาก Xamarin.Forms ตรงที่ MAUI ใช้ .NET 6+ BCL แทน Mono และ .NET Standard
Microsoft มี เครื่องมือย้าย — .NET Upgrade Assistant สำหรับ Visual Studio มันวิเคราะห์โปรเจกต์ Xamarin.Forms, แทนที่เนมสเปซ (Xamarin.Forms.* -> Microsoft.Maui.*), อัปเดตไฟล์ .csproj (รูปแบบ SDK-style) และย้ายการตั้งค่า Android และ iOS ไปยังการกำหนดค่าแบบรวม หลังจากการย้าย โปรเจกต์สามารถใช้ความสามารถใหม่ทั้งหมดของ .NET 8: Native AOT, CodeQL สำหรับความปลอดภัย และประสิทธิภาพการสร้างที่ดีขึ้น
การเปลี่ยนแปลงสำคัญคือ โปรเจกต์เดียว ในขณะที่ Xamarin.Forms ต้องการ 3 โปรเจกต์แยก (iOS, Android, .NET Standard) แต่ .NET MAUI ใช้โปรเจกต์เดียวกับโฟลเดอร์ Platforms/iOS, Platforms/Android, Platforms/Windows และ Platforms/MacCatalyst แต่ละแพลตฟอร์มคอมไพล์จากโค้ดร่วมกับคำสั่งแบบมีเงื่อนไขเฉพาะแพลตฟอร์ม (#if ANDROID, #if IOS)
สำหรับ ฐานโค้ดที่มีอยู่ .NET MAUI รักษาความเข้ากันได้ย้อนหลัง 90% กับ Xamarin.Forms ความเข้ากันได้ของ API ครอบคลุม ContentView, ContentPage, Shell, NavigationPage, DependencyService และ MessagingCenter การเปลี่ยนแปลงหลักส่งผลต่อ Device.StartTimer (แทนที่ด้วย IDispatcher), Platform API (ย้ายไปยัง Microsoft.Maui.ApplicationModel) และเรนเดอเรอร์ที่เลิกใช้งานแล้ว (แทนที่ด้วย Handlers)
กระบวนการ ย้าย ประกอบด้วยห้าขั้นตอน หนึ่ง — อัปเดต Xamarin.Forms เป็นเวอร์ชันล่าสุด 5.0 สอง — แทนที่ .NET Standard 2.0 ด้วย .NET 6 หรือ 8 สาม — เรียกใช้ Upgrade Assistant สำหรับการแปลงโปรเจกต์อัตโนมัติ สี่ — แก้ไขโค้ดเฉพาะแพลตฟอร์มในโฟลเดอร์ Platforms ห้า — ทดสอบ โดยเฉพาะเรนเดอเรอร์แบบกำหนดเองและบริการแพลตฟอร์ม
คำถามที่พบบ่อย
Xamarin คือแพลตฟอร์มมือถือของ Microsoft สำหรับการพัฒนา C# สำหรับ iOS, Android และ Windows มันใช้ Mono Runtime สำหรับการคอมไพล์โค้ดร่วมและมีสองแนวทาง: Xamarin.Forms (UI แบบรวมผ่าน XAML) และ Xamarin.Native (หน้าจอเนทีฟของแพลตฟอร์ม) ตั้งแต่ปี 2024 Xamarin อยู่ในโหมดสนับสนุน
Xamarin ใช้ C# และ .NET เรนเดอร์ผ่านคอนโทรลเนทีฟ (UIKit, View) ผ่าน bindings ส่วน Flutter ใช้ Dart และเอ็นจินเรนเดอร์ของตัวเอง (Impeller) โดยไม่พึ่งพาคอมโพเนนต์ UI เนทีฟ Flutter ให้รูปลักษณ์ที่สอดคล้องกันบนทุกแพลตฟอร์ม ในขณะที่ Xamarin ให้รูปลักษณ์เนทีฟของแต่ละ OS Flutter ได้รับการสนับสนุนจาก Google และมีส่วนแบ่ง 46% เทียบกับ 15% ของ Xamarin
ไม่ Microsoft ยุติการสนับสนุน Xamarin เมื่อวันที่ 1 พฤษภาคม 2024 โปรเจกต์ใหม่ทั้งหมดควรเริ่มบน .NET MAUI — ผู้สืบทอด ซึ่งถูกสร้างไว้ใน .NET 8 และจะได้รับการอัปเดตพร้อมกับแพลตฟอร์ม .NET สำหรับโปรเจกต์ Xamarin.Forms ที่มีอยู่ แนะนำให้ย้ายภายใน 12–18 เดือน
ความแตกต่าง เล็กน้อย สำหรับแอปพลิเคชันทั่วไป Xamarin.Forms เพิ่มโอเวอร์เฮดการเรนเดอร์ 5–10% เนื่องจากชั้น Managed-Wrapper-Native ปัญหาเกิดขึ้นกับรายการหนัก (ListView เทียบกับ RecyclerView) และแอนิเมชัน (การใช้ Xamarin.Forms โดยไม่มี API แพลตฟอร์ม) แนะนำให้ใช้ CollectionView (แทนที่ ListView) และแอนิเมชันเนทีฟ
ได้ ผ่าน Android Bindings Library โปรเจกต์ .NET ชนิดนี้จะห่อไฟล์ AAR หรือ JAR ลงใน C# bindings พร้อมการสร้างคลาสและเมธอดอัตโนมัติ ไลบรารี Kotlin ต้องการตัวจัดการเพิ่มเติมสำหรับ coroutine และ sealed class ซึ่งกำหนดค่าผ่าน Metadata.xml ใน Binding Library
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ