.NET MAUI (Multi-platform App UI), Microsoft tarafından geliştirilen ve geliştiricilere tek bir kod tabanı kullanarak iOS, Android, Windows ve macOS için yerel uygulamalar oluşturma imkanı sunan açık kaynaklı bir frameworktür. Xamarin.Forms'un evrimleşmiş hali olarak karşımıza çıkan MAUI, .NET 6 ve sonraki sürümlerle birlikte gelerek modern uygulama geliştirme süreçlerini basitleştirmeyi hedefler. Geleneksel platforma özgü geliştirme yaklaşımlarının aksine, MAUI, C# ve XAML kullanarak zengin kullanıcı arayüzleri oluşturmanıza olanak tanır ve işletim sisteminin yerel kontrollerini kullanarak platforma özgü bir görünüm ve his sunar. Bu sayede, geliştiriciler farklı platformlar için ayrı ayrı proje yönetmek yerine, tek bir Visual Studio projesi üzerinden tüm hedeflere ulaşabilirler. Bu, özellikle kaynakları kısıtlı ekipler için büyük bir verimlilik artışı sağlamaktadır.
MAUI'nin sunduğu başlıca avantajlar ve özellikler şunlardır:
.NET MAUI ile geliştirme yapmaya başlamak oldukça basittir. İlk olarak, en son Visual Studio sürümünü (genellikle Visual Studio 2022) kurmanız gerekmektedir. Kurulum sırasında "Mobil geliştirme ile .NET çoklu platformu kullanıcı arayüzü" iş yükünü seçtiğinizden emin olun. Bu iş yükü, MAUI için gerekli tüm SDK'ları, emülatörleri ve araçları otomatik olarak yükleyecektir. Yükleme tamamlandıktan sonra, Visual Studio'yu açıp "Yeni bir proje oluştur" seçeneğini seçebilir ve arama çubuğuna "MAUI" yazarak ".NET MAUI Uygulaması" şablonunu bulup seçebilirsiniz. Projenizi oluşturduktan sonra, Visual Studio size bir dizi yapılandırma seçeneği sunacaktır. Genellikle varsayılan ayarlar başlangıç için yeterlidir. Oluşturulan proje, temel bir MAUI uygulaması yapısını içerecek ve hemen çalıştırmaya hazır olacaktır.
Bir .NET MAUI projesinin temel yapısı, geliştiricilerin farklı platformlar arasında kodu paylaşırken platforma özgü ihtiyaçları yönetmelerine olanak tanır. Ana proje, paylaşılan kodu (UI, iş mantığı, modeller vb.) barındırırken, her hedef platform (Android, iOS, Windows, Mac) için ayrı klasörler bulunur. Bu klasörler, platforma özgü yapılandırmaları, kaynakları (ikonlar, başlangıç ekranları) ve bazı durumlarda platforma özel kodu içerir.
MAUI uygulamasının başlangıç noktası genellikle `App.xaml` ve `App.xaml.cs` dosyalarıdır. `App.xaml`, uygulamanızın global stillerini, kaynak sözlüklerini ve uygulamanın genel görsel kimliğini tanımlar. `App.xaml.cs` ise uygulamanın yaşam döngüsü olaylarını yönetir ve uygulamanın ilk sayfasını (main page) başlatır.
Örnek bir ana sayfa tanımı şu şekilde görünebilir:
Bu XAML yapısı, temel bir sayfanın nasıl tanımlandığını ve çeşitli UI kontrollerinin nasıl yerleştirildiğini göstermektedir.
MAUI'de UI oluşturmanın temel taşları Sayfalar (Pages), Düzenler (Layouts) ve Kontrollerdir (Controls).
Veri bağlama (Data Binding), MAUI'de UI ile uygulamanızın iş mantığı arasındaki iletişimi sağlayan güçlü bir mekanizmadır. Bu, özellikle Model-View-ViewModel (MVVM) tasarım deseni ile birleştiğinde uygulamanızı çok daha düzenli ve yönetilebilir hale getirir. MVVM'de:
Yukarıdaki örnekte, `Label`'ın `Text` özelliği ViewModel'deki `MyProperty`'ye bağlanırken, `Entry`'nin `Text` özelliği `UserName`'e çift yönlü olarak bağlanmıştır. `Button` ise bir komutu (`SubmitCommand`) tetikler. Bu yaklaşım, UI'yı iş mantığından ayırarak birim testi yapmayı ve kodun yeniden kullanılabilirliğini artırır.
Uygulamanızın tutarlı bir görsel kimliğe sahip olması için stillendirme önemlidir. MAUI, CSS benzeri bir yaklaşımla stiller tanımlamanıza olanak tanır. Stiller, `Style` etiketleri kullanılarak `ResourceDictionary` içinde tanımlanır ve daha sonra birden fazla kontrole uygulanabilir. Bu, görsel değişiklikleri tek bir yerden yönetmenizi sağlar.
Örneğin:
Bu stil, bu sayfadaki tüm butonlara uygulanacaktır. Ayrıca, `StaticResource` veya `DynamicResource` kullanarak kaynak sözlüklerindeki diğer değerlere de (renkler, font boyutları vb.) erişebilirsiniz. Tema desteği sayesinde uygulamanızın açık ve koyu modlarını kolayca yönetebilirsiniz.
Çoğu durumda MAUI'nin soyutlamaları yeterli olsa da, bazen platforma özgü API'lere veya UI özelleştirmelerine ihtiyaç duyulur. MAUI, bunun için birkaç mekanizma sunar. Geleneksel olarak Xamarin.Forms'ta `DependencyService` ve `Custom Renderers` kullanılırken, MAUI'de bu kavramlar `Handlers` ile modernize edilmiştir.
`Handlers`, MAUI'nin platformlar arası soyutlamaları ile yerel kontrol uygulamaları arasında bir köprü görevi görür. Her MAUI kontrolünün (örneğin `Button`) her platform için bir veya daha fazla yerel karşılığı vardır (örneğin Android'de `AppCompatButton`, iOS'ta `UIButton`). Handler'lar, bu yerel kontrollerin özelliklerini ve olaylarını MAUI tarafındaki kontrollere eşler. Kendi özel handler'larınızı oluşturarak veya mevcut handler'ları genişleterek yerel kontrol davranışlarını değiştirebilir veya kendi özel kontrollerinizi platforma özgü olarak uygulayabilirsiniz. Bu yaklaşım, daha esnek ve performanslı bir özelleştirme imkanı sunar.
.NET MAUI geliştirici topluluğu tarafından oluşturulan `MAUI Community Toolkit`, MAUI uygulamalarını geliştirirken sıkça karşılaşılan senaryoları ele alan bir dizi faydalı özellik, kontrol, davranış ve yardımcı sınıf içerir. Animasyonlar, validasyon davranışları, yeni kontroller (örneğin `StateContainer`, `Expander`) ve genişletilmiş özellikler gibi birçok eklenti sunar. Bu araç seti, geliştirme sürecini hızlandırır ve tekrarlayan kod yazma ihtiyacını azaltır. Projenize NuGet paketi olarak kolayca eklenebilir.
Microsoft Learn - .NET MAUI Topluluk Araç Seti adresinden daha fazla bilgi edinebilirsiniz.
Her uygulama geliştirmede olduğu gibi, .NET MAUI uygulamalarında da performans önemli bir faktördür.
.NET MAUI, Microsoft'un cross-platform uygulama geliştirme vizyonunun geleceğini temsil etmektedir. Xamarin.Forms'un güçlü temelleri üzerine inşa edilen ve .NET ekosisteminin tüm avantajlarını bünyesinde barındıran MAUI, geliştiricilere mobil ve masaüstü platformlarda tek bir kod tabanıyla zengin, yerel görünümlü uygulamalar oluşturma gücü verir. Blazor Hybrid desteğiyle web geliştiricilere de kapılarını açan MAUI, modern uygulama geliştirmenin karmaşıklığını azaltırken, geliştiricilerin daha hızlı ve verimli bir şekilde inovasyon yapmalarına olanak tanır. Genişleyen topluluğu ve sürekli güncellenen araçlarıyla .NET MAUI, önümüzdeki yıllarda cross-platform uygulama geliştirme alanında önemli bir rol oynamaya devam edecektir. Eğer modern, performansı yüksek ve platformlar arası uyumlu uygulamalar geliştirmek istiyorsanız, .NET MAUI kesinlikle keşfetmeye değer bir teknolojidir. Bu platform, geleceğin uygulama mimarileri için sağlam bir temel sunmaktadır.
MAUI'nin sunduğu başlıca avantajlar ve özellikler şunlardır:
- Tek Kod Tabanı: iOS, Android, Windows ve macOS için tek bir C# ve XAML projesi üzerinden uygulama geliştirebilirsiniz. Bu, bakım maliyetlerini düşürür ve geliştirme süresini kısaltır.
- Yerel Arayüzler: MAUI, her platformun kendi yerel kontrollerini kullanarak uygulamalarınızın platforma özgü bir görünüm ve davranış sergilemesini sağlar. Bu, kullanıcı deneyimi açısından kritik öneme sahiptir.
- Modern Geliştirme Araçları: Visual Studio entegrasyonu sayesinde Hot Reload (anında kod veya XAML değişikliklerini görme), Live Visual Tree (çalışan uygulamanın UI hiyerarşisini inceleme) gibi araçlarla hızlı iterasyon yapabilirsiniz.
- Blazor Hibrit Desteği: Web geliştiricilerin Blazor bileşenlerini kullanarak MAUI uygulamaları içerisinde web tabanlı UI'lar oluşturmasına imkan tanır. Bu, özellikle mevcut Blazor projelerini mobil veya masaüstüne taşımak isteyenler için büyük bir avantajdır.
- Bağımlılık Enjeksiyonu (DI): .NET ekosisteminin güçlü DI özelliklerini destekleyerek modüler ve test edilebilir uygulamalar geliştirmenizi kolaylaştırır.
- Model-View-ViewModel (MVVM) Patern Desteği: UI ve iş mantığını ayırarak daha sürdürülebilir ve yönetilebilir kod yazımını teşvik eder.
.NET MAUI ile geliştirme yapmaya başlamak oldukça basittir. İlk olarak, en son Visual Studio sürümünü (genellikle Visual Studio 2022) kurmanız gerekmektedir. Kurulum sırasında "Mobil geliştirme ile .NET çoklu platformu kullanıcı arayüzü" iş yükünü seçtiğinizden emin olun. Bu iş yükü, MAUI için gerekli tüm SDK'ları, emülatörleri ve araçları otomatik olarak yükleyecektir. Yükleme tamamlandıktan sonra, Visual Studio'yu açıp "Yeni bir proje oluştur" seçeneğini seçebilir ve arama çubuğuna "MAUI" yazarak ".NET MAUI Uygulaması" şablonunu bulup seçebilirsiniz. Projenizi oluşturduktan sonra, Visual Studio size bir dizi yapılandırma seçeneği sunacaktır. Genellikle varsayılan ayarlar başlangıç için yeterlidir. Oluşturulan proje, temel bir MAUI uygulaması yapısını içerecek ve hemen çalıştırmaya hazır olacaktır.
Bir .NET MAUI projesinin temel yapısı, geliştiricilerin farklı platformlar arasında kodu paylaşırken platforma özgü ihtiyaçları yönetmelerine olanak tanır. Ana proje, paylaşılan kodu (UI, iş mantığı, modeller vb.) barındırırken, her hedef platform (Android, iOS, Windows, Mac) için ayrı klasörler bulunur. Bu klasörler, platforma özgü yapılandırmaları, kaynakları (ikonlar, başlangıç ekranları) ve bazı durumlarda platforma özel kodu içerir.
MAUI uygulamasının başlangıç noktası genellikle `App.xaml` ve `App.xaml.cs` dosyalarıdır. `App.xaml`, uygulamanızın global stillerini, kaynak sözlüklerini ve uygulamanın genel görsel kimliğini tanımlar. `App.xaml.cs` ise uygulamanın yaşam döngüsü olaylarını yönetir ve uygulamanın ilk sayfasını (main page) başlatır.
Örnek bir ana sayfa tanımı şu şekilde görünebilir:
Kod:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MyMauiApp.MainPage"
BackgroundColor="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource DarkGray}}">
<ScrollView>
<VerticalStackLayout
Padding="30,0"
Spacing="25">
<Image
Source="dotnet_bot.png"
SemanticProperties.Description="Cute dotnet bot waving hi!"
HeightRequest="200"
HorizontalOptions="Center" />
<Label
Text="Merhaba, .NET MAUI!"
SemanticProperties.HeadingLevel="Level1"
FontSize="32"
HorizontalOptions="Center" />
<Label
Text="Uygulamanız Hoş Geldiniz"
SemanticProperties.Description="Welcome to your app!"
SemanticProperties.Hint="Click to count"
FontSize="18"
HorizontalOptions="Center" />
<Button
x:Name="CounterBtn"
Text="Tıkla Bana!"
SemanticProperties.Hint="Counts the number of times you click"
Clicked="OnCounterClicked"
HorizontalOptions="Center" />
</VerticalStackLayout>
</ScrollView>
</ContentPage>
MAUI'de UI oluşturmanın temel taşları Sayfalar (Pages), Düzenler (Layouts) ve Kontrollerdir (Controls).
- Sayfalar: Uygulamanızın temel görsel birimleridir. `ContentPage` en yaygın olanıdır ve tek bir içerik barındırır. Diğer sayfa türleri arasında navigasyon için `NavigationPage`, sekme tabanlı arayüzler için `TabbedPage` ve slayt menüleri için `FlyoutPage` bulunur. Her sayfa genellikle kendine özgü bir XAML dosyası ve eşlik eden bir C# kod-arkası dosyası (`.xaml.cs`) ile tanımlanır.
- Düzenler (Layouts): Kontrolleri sayfalar içinde düzenlemek için kullanılır. En sık kullanılan düzenler şunlardır:
StackLayout: Kontrolleri dikey veya yatay olarak birbiri ardına sıralar.
Grid: Kontrolleri satır ve sütun bazında tablo benzeri bir yapıda yerleştirmenizi sağlar.
FlexLayout: Esnek kutu modelini kullanarak güçlü ve dinamik düzenler oluşturur.
AbsoluteLayout: Kontrolleri mutlak koordinatlara veya oransal değerlere göre konumlandırır. - Kontroller (Controls): Uygulamanızdaki etkileşimli ve görsel öğelerdir. `Button`, `Label`, `Entry` (metin girişi), `Editor` (çok satırlı metin girişi), `Image`, `ListView` veya modern karşılığı `CollectionView` (veri listelerini göstermek için) gibi birçok yerleşik kontrol mevcuttur. Her kontrolün kendine ait özellikleri ve olayları bulunur.
Veri bağlama (Data Binding), MAUI'de UI ile uygulamanızın iş mantığı arasındaki iletişimi sağlayan güçlü bir mekanizmadır. Bu, özellikle Model-View-ViewModel (MVVM) tasarım deseni ile birleştiğinde uygulamanızı çok daha düzenli ve yönetilebilir hale getirir. MVVM'de:
- Model: Uygulamanın verisini ve iş mantığını temsil eder. Genellikle C# sınıflarıdır.
- View: Kullanıcının gördüğü arayüzdür (XAML). View, ViewModel'deki verilere bağlanır.
- ViewModel: View ile Model arasında bir köprü görevi görür. Model'den verileri alır, View'a uygun formata dönüştürür ve View'dan gelen komutları Model'e iletir. ViewModel genellikle `INotifyPropertyChanged` arayüzünü uygulayarak View'ın veri değişikliklerinden haberdar olmasını sağlar.
Kod:
<Label Text="{Binding MyProperty}" />
<Entry Text="{Binding UserName, Mode=TwoWay}" />
<Button Command="{Binding SubmitCommand}" Text="Gönder" />
"MVVM, .NET MAUI uygulamalarında karmaşıklığı yönetmek ve sürdürülebilir bir kod tabanı oluşturmak için altın standarttır."
Uygulamanızın tutarlı bir görsel kimliğe sahip olması için stillendirme önemlidir. MAUI, CSS benzeri bir yaklaşımla stiller tanımlamanıza olanak tanır. Stiller, `Style` etiketleri kullanılarak `ResourceDictionary` içinde tanımlanır ve daha sonra birden fazla kontrole uygulanabilir. Bu, görsel değişiklikleri tek bir yerden yönetmenizi sağlar.
Örneğin:
Kod:
<ContentPage.Resources>
<ResourceDictionary>
<Style TargetType="Button">
<Setter Property="BackgroundColor" Value="Blue" />
<Setter Property="TextColor" Value="White" />
<Setter Property="CornerRadius" Value="10" />
</Style>
</ResourceDictionary>
</ContentPage.Resources>
Çoğu durumda MAUI'nin soyutlamaları yeterli olsa da, bazen platforma özgü API'lere veya UI özelleştirmelerine ihtiyaç duyulur. MAUI, bunun için birkaç mekanizma sunar. Geleneksel olarak Xamarin.Forms'ta `DependencyService` ve `Custom Renderers` kullanılırken, MAUI'de bu kavramlar `Handlers` ile modernize edilmiştir.
`Handlers`, MAUI'nin platformlar arası soyutlamaları ile yerel kontrol uygulamaları arasında bir köprü görevi görür. Her MAUI kontrolünün (örneğin `Button`) her platform için bir veya daha fazla yerel karşılığı vardır (örneğin Android'de `AppCompatButton`, iOS'ta `UIButton`). Handler'lar, bu yerel kontrollerin özelliklerini ve olaylarını MAUI tarafındaki kontrollere eşler. Kendi özel handler'larınızı oluşturarak veya mevcut handler'ları genişleterek yerel kontrol davranışlarını değiştirebilir veya kendi özel kontrollerinizi platforma özgü olarak uygulayabilirsiniz. Bu yaklaşım, daha esnek ve performanslı bir özelleştirme imkanı sunar.
.NET MAUI geliştirici topluluğu tarafından oluşturulan `MAUI Community Toolkit`, MAUI uygulamalarını geliştirirken sıkça karşılaşılan senaryoları ele alan bir dizi faydalı özellik, kontrol, davranış ve yardımcı sınıf içerir. Animasyonlar, validasyon davranışları, yeni kontroller (örneğin `StateContainer`, `Expander`) ve genişletilmiş özellikler gibi birçok eklenti sunar. Bu araç seti, geliştirme sürecini hızlandırır ve tekrarlayan kod yazma ihtiyacını azaltır. Projenize NuGet paketi olarak kolayca eklenebilir.
Microsoft Learn - .NET MAUI Topluluk Araç Seti adresinden daha fazla bilgi edinebilirsiniz.
Her uygulama geliştirmede olduğu gibi, .NET MAUI uygulamalarında da performans önemli bir faktördür.
- UI Hiyerarşisini Basit Tutun: Derin ve karmaşık UI ağaçları oluşturmaktan kaçının. Mümkün olduğunca az sayıda iç içe geçmiş düzen ve kontrol kullanın.
- Görüntüleri Optimize Edin: Yüksek çözünürlüklü görseller yerine, hedef platformlar için uygun boyutlarda ve sıkıştırılmış görseller kullanın. Gerektiğinde `ImageSource` önbelleklemesini kullanın.
- ListView yerine CollectionView Kullanın: Özellikle uzun listelerde, daha performanslı olan `CollectionView`'i tercih edin. `CollectionView`, UI sanallaştırma (UI virtualization) ile sadece ekranda görünen öğelerin oluşturulmasını sağlayarak bellek ve CPU kullanımını optimize eder.
- Kaynakları Doğru Yönetin: Gereksiz bellek kullanımını önlemek için kullanılmayan kaynakları (büyük nesneler, abonelikler) serbest bıraktığınızdan emin olun.
- Asenkron Programlama: UI'ın donmasını engellemek için uzun süreli işlemleri asenkron olarak (`async/await`) çalıştırın.
- Profilleme Araçlarını Kullanın: Performans sorunlarını tespit etmek için Visual Studio'nun profilleyicilerini kullanın.
.NET MAUI, Microsoft'un cross-platform uygulama geliştirme vizyonunun geleceğini temsil etmektedir. Xamarin.Forms'un güçlü temelleri üzerine inşa edilen ve .NET ekosisteminin tüm avantajlarını bünyesinde barındıran MAUI, geliştiricilere mobil ve masaüstü platformlarda tek bir kod tabanıyla zengin, yerel görünümlü uygulamalar oluşturma gücü verir. Blazor Hybrid desteğiyle web geliştiricilere de kapılarını açan MAUI, modern uygulama geliştirmenin karmaşıklığını azaltırken, geliştiricilerin daha hızlı ve verimli bir şekilde inovasyon yapmalarına olanak tanır. Genişleyen topluluğu ve sürekli güncellenen araçlarıyla .NET MAUI, önümüzdeki yıllarda cross-platform uygulama geliştirme alanında önemli bir rol oynamaya devam edecektir. Eğer modern, performansı yüksek ve platformlar arası uyumlu uygulamalar geliştirmek istiyorsanız, .NET MAUI kesinlikle keşfetmeye değer bir teknolojidir. Bu platform, geleceğin uygulama mimarileri için sağlam bir temel sunmaktadır.