Aracılığıyla paylaş


.NET MAUI tek projesinden birden çok platformu hedefleme

.NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) tek projesi, uygulama geliştirirken genellikle karşılaştığınız platforma özgü geliştirme deneyimlerini alır ve bunları Android, iOS, macOS ve Windows'u hedefleyebilecek tek bir paylaşılan projeye soyutlar.

.NET MAUI tek projesi, hedeflenen platformlardan bağımsız olarak basitleştirilmiş ve tutarlı bir platformlar arası geliştirme deneyimi sağlar. .NET MAUI tek projesi aşağıdaki özellikleri sağlar:

  • Android, iOS, macOS, Tizen ve Windows'ı hedefleyebilecek tek bir paylaşılan proje.
  • .NET MAUI uygulamalarınızı çalıştırmak için basitleştirilmiş bir hata ayıklama hedefi seçimi.
  • Tek proje içinde paylaşılan kaynak dosyaları.
  • Uygulama başlığını, kimliğini ve sürümünü belirten tek bir uygulama bildirimi.
  • Gerektiğinde platforma özgü API'lere ve araçlara erişim.
  • Tek bir platformlar arası uygulama giriş noktası.

.NET MAUI tek projesi, çoklu hedefleme ve SDK stilinde projelerin kullanımı kullanılarak etkinleştirilir.

Kaynak dosyalar

Platformlar arası uygulama geliştirme için kaynak yönetimi geleneksel olarak sorunlu olmuştur çünkü her platformun kaynakları yönetmeye yönelik kendi yaklaşımı vardır. Örneğin, her platformun farklı çözünürlüklerde her görüntünün birden çok sürümünü oluşturmayı kapsayan farklı görüntü gereksinimleri vardır. Bu nedenle, tek bir görüntünün genellikle farklı çözünürlüklerde birden çok kez çoğaltılması ve sonuçta elde edilen görüntülerin her platformda farklı dosya adı ve klasör kuralları kullanması gerekir.

.NET MAUI tek projesi, kaynak dosyalarının her platformda kullanılırken tek bir konumda depolanmasını sağlar. Buna yazı tipleri, resimler, uygulama simgesi, giriş ekranı, ham varlıklar ve .NET MAUI uygulamalarının stillerini oluşturmak için CSS dosyaları dahildir. Her görüntü kaynak dosyası, derleme zamanında her platform için gerekli çözünürlüklerin görüntülerinin oluşturulduğu bir kaynak görüntü olarak kullanılır.

Dekont

iOS Varlık Katalogları şu anda .NET MAUI tekli projelerinde desteklenmiyor.

Kaynak dosyaları genellikle .NET MAUI uygulama projenizin Kaynaklar klasörüne veya Resources klasörünün alt klasörlerine yerleştirilmelidir ve derleme eyleminin doğru ayarlanmış olması gerekir. Aşağıdaki tabloda her kaynak dosya türü için derleme eylemleri gösterilmektedir:

Kaynak Derleme eylemi
Uygulama simgesi MauiIcon
Yazı tipleri MauiFont
Görüntüler MauiImage
Giriş ekranı MauiSplashScreen
Ham varlıklar MauiAsset
CSS dosyaları MauiCss

Dekont

XAML dosyaları da .NET MAUI uygulama projenizde depolanır ve proje ve öğe şablonları tarafından oluşturulduğunda mauiXaml derleme eylemine otomatik olarak atanır. Ancak genellikle uygulama projesinin Kaynaklar klasörüne yalnızca XAML kaynak sözlükleri yerleştirilir.

.NET MAUI uygulama projesine bir kaynak dosyası eklendiğinde, proje dosyasında CSS dosyaları dışında kaynak için karşılık gelen bir giriş oluşturulur. Aşağıdaki ekran görüntüsünde her kaynak türü için alt klasörler içeren tipik bir Kaynaklar klasörü gösterilmektedir:

Image and font resources screenshot.

Kaynak doğru Kaynaklar alt klasörüne eklenmişse, kaynak dosyasının derleme eylemi doğru şekilde ayarlanır.

Kaynaklar klasörünün alt klasörleri, uygulamanız için proje dosyası düzenlenerek her kaynak türü için belirlenebilir:

<ItemGroup>
    <!-- Images -->
    <MauiImage Include="Resources\Images\*" />

    <!-- Fonts -->
    <MauiFont Include="Resources\Fonts\*" />

    <!-- Raw assets -->
    <MauiAsset Include="Resources\Raw\*" />
</ItemGroup>

Joker karakter (*), klasördeki tüm dosyaların belirtilen kaynak türünde olarak kabul edildiğini gösterir. Buna ek olarak, alt klasörlerdeki tüm dosyaları da dahil etmek mümkündür:

<ItemGroup>
    <!-- Images -->
    <MauiImage Include="Resources\Images\**\*" />
</ItemGroup>

Bu örnekte, çift joker karakter ('**') Images klasörünün alt klasörler içerebileceğini belirtir. Bu nedenle, <MauiImage Include="Resources\Images\**\*" /> Resources\Images klasöründeki tüm dosyaların veya Images klasörünün herhangi bir alt klasörünün, her platform için gerekli çözünürlüğün görüntülerinin oluşturulduğu kaynak görüntüler olarak kullanılacağını belirtir.

Platforma özgü kaynaklar, paylaşılan kaynak karşılıklarını geçersiz kılar. Örneğin Platforms\Android\Resources\drawable-xhdpi\logo.png konumunda bulunan Android'e özgü bir görüntüye sahipseniz ve paylaşılan bir Resources\Images\logo.svg görüntüsü de sağlıyorsanız, platforma özgü görüntü olarak zaten var olan XHDPI görüntüsü dışında Ölçeklenebilir Vektör Grafikleri (SVG) dosyası gerekli Android görüntülerini oluşturmak için kullanılır.

Uygulama simgeleri

Bir uygulama simgesi, bir görüntüyü projenin Resources\AppIcon klasörüne sürükleyerek uygulama projenize eklenebilir ve burada derleme eylemi otomatik olarak MauiIcon olarak ayarlanır. Bu, proje dosyanızda karşılık gelen bir girdi oluşturur:

<MauiIcon Include="Resources\AppIcon\appicon.svg" />

Derleme zamanında uygulama simgesi hedef platform ve cihaz için doğru boyutlara yeniden boyutlandırılır. Yeniden boyutlandırılan uygulama simgeleri daha sonra uygulama paketinize eklenir. Uygulama simgeleri, cihazda ve uygulama mağazasında uygulamayı temsil etmek için kullanılması da dahil olmak üzere birden çok kullanımları olduğundan birden çok çözünürlüğe yeniden boyutlandırılır.

Daha fazla bilgi için bkz . .NET MAUI uygulama projesine uygulama simgesi ekleme.

Görüntüler

Bir görüntü, uygulama projenize projenizin Resources\Images klasörüne sürüklenerek eklenebilir ve burada derleme eylemi otomatik olarak MauiImage olarak ayarlanır. Bu, proje dosyanızda karşılık gelen bir girdi oluşturur:

<MauiImage Include="Resources\Images\logo.svg" />

Derleme zamanında görüntüler hedef platform ve cihaz için doğru çözünürlüklerde yeniden boyutlandırılabilir. Sonuçta elde edilen görüntüler uygulama paketinize eklenir.

Daha fazla bilgi için bkz . .NET MAUI uygulama projesine görüntü ekleme.

Yazı tipleri

Uygulama projenize, derleme eyleminin otomatik olarak MauiFont olarak ayarlanacağı Resources\Fonts klasörüne sürükleyerek gerçek tür biçimi (TTF) veya açık yazı tipi (OTF) yazı tipi eklenebilir. Bu, proje dosyanızda yazı tipi başına karşılık gelen bir girdi oluşturur:

<MauiFont Include="Resources\Fonts\OpenSans-Regular.ttf" />

Derleme zamanında yazı tipleri uygulama paketinize kopyalanır.

Daha fazla bilgi için bkz . Yazı Tipleri.

Giriş ekranı

Bir görüntüyü projenin Resources\Splash klasörüne sürükleyerek uygulama projenize giriş ekranı eklenebilir ve burada derleme eylemi otomatik olarak MauiSplashScreen olarak ayarlanır. Bu, proje dosyanızda karşılık gelen bir girdi oluşturur:

<ItemGroup>
  <MauiSplashScreen Include="Resources\Splash\splashscreen.svg" />
</ItemGroup>

Derleme zamanında, giriş ekranı görüntüsü hedef platform ve cihaz için doğru boyuta yeniden boyutlandırılır. Yeniden boyutlandırılan giriş ekranı uygulama paketinize eklenir.

Daha fazla bilgi için bkz . .NET MAUI uygulama projesine giriş ekranı ekleme.

Ham varlıklar

HTML, JSON ve video gibi bir ham varlık dosyası, derleme eyleminin otomatik olarak MauiAsset olarak ayarlanacağı projenizin Resources\Raw klasörüne sürükleyerek uygulama projenize eklenebilir. Bu, proje dosyanızda varlık başına karşılık gelen bir giriş oluşturur:

<MauiAsset Include="Resources\Raw\index.html" />

Ham varlıklar gerektiğinde denetimler tarafından kullanılabilir:

<WebView Source="index.html" />

Derleme zamanında ham varlıklar uygulama paketinize kopyalanır. Varlık paketlemeyi devre dışı bırakma hakkında bilgi için bkz . Varlık dosyası paketlemeyi devre dışı bırakma.

CSS dosyaları

.NET MAUI uygulamaları, Basamaklı Stil Sayfası (CSS) dosyalarıyla kısmen stillendirilebilir. CSS dosyaları, projenizin herhangi bir klasörüne sürükleyip Özellikler penceresinde derleme eylemini MauiCssolarak ayarlayarak uygulama projenize eklenebilir.

CSS dosyalarının bir ResourceDictionaryöğesine eklenmeden StyleSheet önce sınıfı tarafından yüklenmesi gerekir:

<Application ...>
    <Application.Resources>
        <StyleSheet Source="/Resources/styles.css" />
    </Application.Resources>
</Application>

Daha fazla bilgi için bkz . CSS ile stil uygulamaları.

Uygulama bildirimi

Her platform, uygulama başlığı, kimlik, sürüm ve daha fazlası gibi bilgileri belirtmek için kendi yerel uygulama bildirim dosyasını kullanır. .NET MAUI tek projesi, bu ortak uygulama verilerini proje dosyasında tek bir konumda belirtmenizi sağlar.

Bir projenin paylaşılan uygulama bildirim verilerini belirtmek için, projenin kısayol menüsünü Çözüm Gezgini açın ve özellikler'i seçin. Uygulama başlığı, kimliği ve sürümü MAUI Paylaşılan > Genel'de belirtilebilir:

.NET MAUI app manifest screenshot.

Derleme zamanında paylaşılan uygulama bildirim verileri, yerel uygulama bildirim dosyasındaki platforma özgü verilerle birleştirilerek uygulama paketi için bildirim dosyası oluşturulur. Daha fazla bilgi için bkz . .NET MAUI'de proje yapılandırması - MAUI Paylaşılan.

Platforma özgü kod

.NET MAUI uygulama projesi, .NET MAUI'nin hedefleyebilecekleri bir platformu temsil eden her alt klasörün bulunduğu bir Platformlar klasörü içerir:

Platform folders screenshot.

Her platformun klasörleri platforma özgü kaynaklar ve uygulamayı her platformda başlatan kodu içerir:

Platform-specific code screenshot.

Derleme zamanında, derleme sistemi yalnızca belirli bir platform için derleme yaparken her klasörden gelen kodu içerir. Örneğin, Android için derleme yaptığınızda Platforms\Android klasöründeki dosyalar uygulama paketinde yerleşik olarak bulunur, ancak diğer Platformlar klasörlerindeki dosyalar oluşturulmaz. Bu yaklaşım, tek bir projeden birden çok platformu hedeflemek için çoklu hedefleme kullanır. Çoklu hedefleme, platformlar arası koddan yerel platform işlevselliğini çağırmak için kısmi sınıflar ve kısmi yöntemlerle birleştirilebilir. Daha fazla bilgi için bkz . Platform kodunu çağırma.

Bu varsayılan çoklu hedefleme yaklaşımına ek olarak, .NET MAUI uygulamaları kendi dosya adınıza ve klasör ölçütlerinize göre de çok hedefli olabilir. Bu, platform kodunuzu Platformlar klasörünün alt klasörlerine yerleştirmeniz gerekmeyecek şekilde .NET MAUI uygulama projenizi yapılandırmanızı sağlar. Daha fazla bilgi için bkz . Çoklu hedeflemeyi yapılandırma.

Çoklu hedefleme, kodun belirli platformlara hedeflenmesi için koşullu derlemeyle de birleştirilebilir:

#if ANDROID
                  handler.NativeView.SetBackgroundColor(Colors.Red.ToNative());
#elif IOS
                  handler.NativeView.BackgroundColor = Colors.Red.ToNative();
                  handler.NativeView.BorderStyle = UIKit.UITextBorderStyle.Line;
#elif WINDOWS
                  handler.NativeView.Background = Colors.Red.ToNative();
#endif

Koşullu derleme hakkında daha fazla bilgi için bkz . Koşullu derleme.

Uygulama giriş noktası

Platformlar klasörleri, uygulamayı her platformda başlatan platforma özgü kodlar içerirken, .NET MAUI uygulamalarının tek bir platformlar arası uygulama giriş noktası vardır. Her platform giriş noktası, uygulama projenizdeki statik MauiProgram sınıfta bir CreateMauiApp yöntem çağırır ve uygulamanızın giriş noktası olan bir MauiAppdöndürür.

Sınıfın MauiProgram en azından çalıştırmak için bir uygulama sağlaması gerekir:

namespace MyMauiApp;

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>();

        return builder.Build();
    }
}  

App sınıfı sınıfından Application türetilir:

namespace MyMauiApp;

public class App : Application
{
    public App()
    {
        InitializeComponent();

        MainPage = new AppShell();
    }
}

Yukarıdaki örnekte özelliği MainPage nesnesine AppShell ayarlanmıştır. AppShell , uygulamanın görsel hiyerarşisini açıklayan alt sınıf Shell bir sınıftır. Daha fazla bilgi için bkz . .NET MAUI Shell uygulaması oluşturma.