Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Yerel AOT dağıtımı, önceden zamanda (AOT) derlenmiş yerel koda sahip bir .NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) uygulaması oluşturur ve bu uygulama iOS ve Mac Catalyst'te çalışır. Yerel AOT, statik program analizi, uygulamanızın tam kırpılması ve statik olarak başvurulmayan kodun agresif bir şekilde kaldırılması ile zamanından önce kod oluşturma işlemlerini gerçekleştiren bir yapıdır.
Yerel AOT uygulamasını yayımlamak ve dağıtmak aşağıdaki avantajları sağlar:
- Uygulama paketi boyutu küçültüldü.
- Daha hızlı başlangıç süresi.
- Daha hızlı derleme süresi.
Yerel AOT, .NET çalışma zamanının belirli yönlerinin kullanımıyla ilgili sınırlamalar sunar ve yalnızca uygulama boyutunun ve performansının önemli olduğu senaryolarda kullanılmalıdır. Uygulamalarınızı Yerel AOT gereksinimlerine uyacak şekilde uyarlamanız gerekir; bu, bunların tamamen optimize edildiğinden ve AOT ile uyumlu olduğundan emin olmanız anlamına gelir. Yerel AOT sınırlamaları hakkında daha fazla bilgi için Native AOT sınırlamaları bölümüne bakın.
Yerel AOT dağıtımı etkinleştirildiğinde, derleme sistemi kodunuzu ve tüm bağımlılıklarını analiz ederek tam kırpma ve AOT derlemesi için uygun olup olmadığını doğrular. Uyumsuzluklar algılanırsa, kesme ve AOT uyarıları oluşturulur. Tek bir kesme veya AOT uyarısı, uygulamanın Native AOT dağıtımıyla uyumlu olmadığı ve düzgün çalışmayabileceği anlamına gelir. Bu nedenle, yerel AOT dağıtımına yönelik bir uygulama geliştirirken tüm kırpma ve AOT uyarılarını gözden geçirip düzeltmeniz gerekir. Gerekli kod kaldırılmış olabileceğinden, bunun yapılmaması çalışma zamanında özel durumlara neden olabilir. Uyarıları bastırırsanız, AOT ile dağıtılan uygulamanın, işlevselliğin kısaltılmamış uygulamadan değişmediğini doğrulamak için kapsamlı bir şekilde test edilmesi gerekir. Daha fazla bilgi için Kırpma uyarılarına ve AOT uyarılarına giriş bölümlerine bakın.
Not
Kırpma ve AOT uyarılarını düzeltmenin mümkün olmadığı durumlar olabilir, özellikle de bunlar üçüncü taraf kütüphanelerle ilgili gerçekleştiğinde. Bu gibi durumlarda, üçüncü taraf kitaplıkların tamamen uyumlu olması için güncelleştirilmesi gerekir.
Yerel AOT performans avantajları
Yerel AOT uygulaması yayımlama ve dağıtma genellikle 2,5 kata kadar daha küçük bir uygulama ve genellikle 2 kata kadar daha hızlı başlayan bir uygulama üretir. Ancak, tam performans avantajları kullanılan platformu, uygulamanın çalıştığı cihazı ve uygulamanın kendisini içeren birden çok faktöre bağlıdır.
Önemli
Aşağıdaki grafikler, iOS ve Mac Catalyst'te bir dotnet new maui uygulama için Yerel AOT dağıtımının tipik performans avantajlarını gösterir. Ancak, tam veriler donanıma bağlıdır ve gelecek sürümlerde değişebilir.
Aşağıdaki grafikte, farklı dağıtım modellerinde iOS ve Mac Catalyst'te bir dotnet new maui uygulamanın uygulama paketi boyutu gösterilmektedir:
Yukarıdaki grafikte, Yerel AOT'nin hem iOS hem de Mac Catalyst için varsayılan dağıtım modeline kıyasla 2 kat daha küçük uygulamalar ürettiği gösterilmektedir.
Aşağıdaki grafikte, Mono ve Yerel AOT dağıtımında iOS ve Mac Catalyst üzerinde bir uygulama için belirli donanımlarda dotnet new maui ortalama başlangıç süresi gösterilmektedir:
Yukarıdaki grafikte Yerel AOT'nin genellikle iOS cihazlarında 2 kata kadar daha hızlı başlangıç süresine ve Mac Catalyst'te Mono dağıtımına kıyasla 1,2 kat daha hızlı başlangıç süresine sahip olduğu gösterilmektedir.
Aşağıdaki grafik, farklı dağıtım modellerinde iOS ve Mac Catalyst'te bir uygulamanın belirli donanımlarda dotnet new maui ortalama derleme süresini gösterir:
Yukarıdaki grafik, yerel AOT'nin varsayılan dağıtım modeline kıyasla iOS cihazlarında genellikle 2,8 kata kadar daha hızlı derleme süresine sahip olduğunu göstermektedir. Mac Catalyst için derleme süreleri arm64 tek RID uygulamaları için karşılaştırılabilir, ancak Mono dağıtımına kıyasla evrensel uygulamalar için biraz daha yavaştır.
Önemli
Birçok senaryoda Yerel AOT daha küçük ve daha hızlı uygulamalar üretecektir. Ancak bazı senaryolarda Yerel AOT daha küçük ve daha hızlı uygulamalar üretmeyebilir. Bu nedenle, yerel AOT dağıtımının etkinleştirilmesinin sonucunu belirlemek için uygulamanızı test etmek ve profil oluşturmak önemlidir.
Yerel AOT kullanarak yayımlama
Yerel AOT dağıtım modeli, $(PublishAot) derleme özelliği ve dotnet publish komutuyla etkinleştirilir. Aşağıdaki örnekte, iOS ve Mac Catalyst'te Yerel AOT dağıtımını etkinleştirmek için proje dosyasının nasıl değiştirileceği gösterilmektedir:
<PropertyGroup>
<!-- enable trimming and AOT analyzers on all platforms -->
<IsAotCompatible>true</IsAotCompatible>
<!-- select platforms to use with NativeAOT -->
<PublishAot Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">true</PublishAot>
<PublishAot Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">true</PublishAot>
</PropertyGroup>
Derleme özelliğinin $(IsAotCompatible) olarak, tüm platformlar için true ayarlanması, kırpmayı ve AOT çözümleyicilerini etkinleştirir. Bu çözümleyiciler kırpma veya AOT ile uyumlu olmayan kodu belirlemenize yardımcı olur.
iOS ve Mac Catalyst için $(PublishAot)'ün true olarak koşullu ayarlanması, derleme sürecinde dinamik kod kullanım analizini ve yayımlama sırasında Yerel AOT derlemeyi etkinleştirir. Yerel AOT analizi, uygulamanın tüm kodunu ve uygulamanın bağımlı olduğu tüm kitaplıkları içerir.
Uyarı
$(PublishAot) Derleme özelliği, derleme yapılandırmasına göre koşullandırılmamalıdır. Bunun nedeni, derleme özelliğinin değerine göre kırpma özellikleri anahtarlarının etkinleştirilmesi veya devre dışı bırakılması ve kodunuzun $(PublishAot) aynı şekilde davranması için tüm derleme yapılandırmalarında aynı özelliklerin etkinleştirilmesi veya devre dışı bırakılması gerekir. Özellik anahtarlarını kırpma hakkında daha fazla bilgi için Özellik anahtarlarını kırpma'ya bakın.
Yerel AOT uygulamasının düzgün çalıştığını doğrulamanın tek yolu uygulamayı dotnet publish kullanarak yayımlamak ve kodunuz ile bağımlılıklarınız tarafından hiçbir kırpma veya AOT uyarısının üretilmediğini doğrulamaktır. Özellikle, dotnet build -t:Publish ile dotnet publisheşdeğer değildir.
Yerel AOT dağıtımını kullanarak uygulamanızı iOS ve Mac Catalyst'te yayımlamak için aşağıdaki dotnet publish komutu kullanın:
# iOS
dotnet publish -f net9.0-ios -r ios-arm64
# Mac Catalyst
dotnet publish -f net9.0-maccatalyst -r maccatalyst-arm64
dotnet publish -f net9.0-maccatalyst -r maccatalyst-x64
# Universal Mac Catalyst apps
# (when <RuntimeIdentifiers>maccatalyst-x64;maccatalyst-arm64</RuntimeIdentifiers> is set in the project file)
dotnet publish -f net9.0-maccatalyst
İpucu
Geliştirme yaşam döngüsünün başlarında kırpma veya AOT sorunlarını keşfetmek için uygulamaları sık sık yayımlayın.
Yerel AOT sınırlamaları
Yerel AOT, .NET çalışma zamanının belirli yönlerinin kullanımıyla ilgili sınırlamalar sunar ve yalnızca uygulama boyutunun ve performansının önemli olduğu senaryolarda kullanılmalıdır. Uygulamalarınızı Yerel AOT gereksinimlerine uyarlamanız gerekir; bu da bunların tamamen kırpıldığından ve AOT ile uyumlu olduğundan emin olmanız anlamına gelir ve bu çok fazla çalışma gerektirebilir. Yerel AOT dağıtımının .NET sınırlamalarına ek olarak, .NET MAUI için Yerel AOT dağıtımının ek sınırlamaları vardır.
Uygulamalarınızın bağımlı olduğu üçüncü taraf kitaplıkları AOT ile uyumlu olmayabilir. Bir kitaplığın kırpma ve AOT uyumlu olmasını sağlamanın tek yolu, uygulamanızı Yerel AOT dağıtımı (ve dotnet publish komutu ile) kullanarak yayımlamak ve Yerel AOT derleyicisinin kitaplık için herhangi bir uyarı üretip üretmediğini kontrol etmektir. Kendi kitaplıklarınızı yerel AOT ile uyumlu hale getirme hakkında bilgi için Kitaplıkları yerel AOT ile uyumlu hale getirme bölümüne bakın.
Yansıma ve dinamik kod
Yerel AOT dağıtımı, kodunuzda ve bağımlılıklarında yansıma kullanımını sınırlar ve Yerel AOT derleyicisinin yansıma desenlerini anlamasına yardımcı olmak için ek açıklamaların kullanılması gerekebilir. Derleyici bir yansıma deseni ile karşılaştığında statik olarak çözümleyemez ve bu nedenle uygulamayı derleyemez, kırpma uyarıları üretir. Yerel AOT, uygulamanızda dinamik kod kullanmanızı da engeller. Örneğin derleme System.Linq.Expressions beklendiği gibi çalışmaz ve derlemeleri çalışma zamanında yükleyip yürütmek mümkün değildir. Derleyici, önceden derleme yapamadığı dinamik bir desenle karşılaştığında bir AOT uyarısı oluşturur.
.NET MAUI uygulamasında bu şu anlama gelir:
- Tüm XAML'nin önceden derlenmiş olması gerekir. Bu nedenle, XAML derleme işlemini devre dışı bırakmadığınızdan ve tüm bağlayıcıların derlendiğinden emin olun. Daha fazla bilgi için bkz . XAML derlemesi ve Derlenmiş bağlamalar.
- Tüm bağlama ifadeleri, bir dizeye ayarlanmış bir bağlama yolu yerine derlenmiş bağlamalar kullanmalıdır. Daha fazla bilgi için bkz . Derlenmiş bağlamalar.
- XAML'deki bir özelliğe uyumsuz türde bir değer atarken veya farklı türlerdeki iki özellik veri bağlaması kullandığında örtük dönüştürme işleçleri çağrılamayabilir. Bunun yerine, türünüz için bir TypeConverter tanımlamanız ve bunu TypeConverterAttribute kullanarak türüne eklemeniz gerekir. Daha fazla bilgi için bkz Örtük dönüştürme işlecini değiştirmek için bir TypeConverter tanımlama.
- Çalışma zamanında LoadFromXaml yöntemiyle XAML ayrıştırmak mümkün değildir. Bu, çalışma zamanında yüklenebilen tüm türlere
DynamicallyAccessedMembersveyaDynamicDependencyözniteliği ile ek açıklama eklenerek kırpmaya karşı güvenli hale getirilebilir, ancak bu yöntem çok hataya açıktır ve önerilmez. - QueryPropertyAttribute'yi kullanarak gezinti verilerini almak çalışmaz. Bunun yerine, türlerin sorgu parametrelerini kabul edebilmesi için IQueryAttributable arabirimini uygulamanız gerekir. Daha fazla bilgi için bkz . Gezinti verilerini tek bir yöntem kullanarak işleme.
-
SearchHandler.DisplayMemberNameÖzelliği çalışmayabilir. Bunun yerine, ItemTemplate sonuçların görünümünü tanımlamak için bir SearchHandler sağlamanız gerekir. Daha fazla bilgi için bkz . Arama sonuçları öğe görünümünü tanımlama. -
OnPlatformXAML işaretleme uzantısıyla kullanıcı arabirimi görünümünü özelleştirmek mümkün değildir. Bunun yerine, OnPlatform<T> sınıfını kullanmanız gerekir. Daha fazla bilgi için bkz. Platformtemelinde kullanıcı arabirimi görünümünü özelleştirme. -
OnIdiomXAML işaretleme uzantısıyla kullanıcı arabirimi görünümünü özelleştirmek mümkün değildir. Bunun yerine, OnIdiom<T> sınıfını kullanmanız gerekir. Daha fazla bilgi için bkz. Kullanıcı arabirimi görünümünü cihaz deyimine göre özelleştirme.
Önemli
Mono yorumlayıcı Yerel AOT dağıtımıyla uyumlu değildir ve bu nedenle $(UseInterpreter) ve $(MtouchInterpreter) MSBuild özelliklerinin Yerel AOT kullanılırken hiçbir etkisi yoktur. Mono yorumlayıcı hakkında daha fazla bilgi için bkz . iOS ve Mac Catalyst üzerinde Mono yorumlayıcı.
Trim uyarıları hakkında daha fazla bilgi için Trim Uyarılarına Giriş bölümüne bakın. AOT uyarıları hakkında daha fazla bilgi için bkz: AOT uyarılarına giriş.
Uygulamayı Yerel AOT dağıtımına uyarlama
Uygulamanızı Yerel AOT dağıtım gereksinimlerine uyarlamanıza yardımcı olması için aşağıdaki denetim listesini kullanın:
- Tüm XAML'nin derlendiğinden emin olun:
- Tüm
[XamlCompilation(XamlCompilationOptions.Skip)]kullanımı kaldırın. - Tüm
<?xaml-comp compile="false" ?>kullanımı kaldırın.
- Tüm
- yöntemine yapılan tüm çağrıları LoadFromXaml kaldırın.
- Tüm veri bağlamalarının derlendiğinden emin olun. Daha fazla bilgi için bkz . Derlenmiş bağlamalar.
- Tüm XAML veri bağlamalarının
x:DataTypeile ek açıklama ile olduğundan emin olun. - Tüm kod veri bağlamalarının tüm dize tabanlı bağlamaları lambda tabanlı bağlamalarla değiştirdiğinden emin olun.
- Tüm XAML veri bağlamalarının
- tüm
OnPlatformXAML işaretleme uzantısı kullanımını OnPlatform<T> sınıfını kullanan bir uygulamayla değiştirin. Daha fazla bilgi için bkz. Platformtemelinde kullanıcı arabirimi görünümünü özelleştirme. - tüm
OnIdiomXAML işaretleme uzantısı kullanımını OnIdiom<T> sınıfını kullanan bir uygulamayla değiştirin. Daha fazla bilgi için bkz. Kullanıcı arabirimi görünümünü cihaz deyimine göre özelleştirme. - Tüm
[QueryProperty(...)]kullanımı arabirimininIQueryAttributablebir uygulamasıyla değiştirin. Daha fazla bilgi için bkz . Gezinti verilerini tek bir yöntem kullanarak işleme. - Tüm
SearchHandler.DisplayMemberNamekullanımlarını ItemTemplate ile değiştirin. Daha fazla bilgi için bkz . Arama sonuçları öğe görünümünü tanımlama. - XAML'de kullanılan türler için tüm örtük dönüştürme işleçlerini bir TypeConverter ile değiştirin ve onu TypeConverterAttribute kullanarak türünüze ekleyin. Daha fazla bilgi için bkz Örtük dönüştürme işlecini değiştirmek için bir TypeConverter tanımlama.
- Türünden türüne dönüştürme işlemi yapılırken,
ConvertToileAilişkilendirilmiş bir tür dönüştürücüsünün yöntemi veyaConvertFromileBilişkilendirilmiş bir tür dönüştürücüsünün yöntemi kullanılır. - Hem kaynak hem de hedef türleri ilişkili bir tür dönüştürücüye sahip olduğunda, bunlardan biri kullanılabilir.
- Türünden türüne dönüştürme işlemi yapılırken,
- Kaynak oluşturucuları kullanarak tüm normal ifadeleri derleyin. Daha fazla bilgi için bkz . .NET normal ifade kaynak oluşturucuları.
- JSON serileştirme ve seri durumdan çıkarmanın kaynak tarafından oluşturulan bir bağlam kullandığından emin olun. Daha fazla bilgi için bkz . Minimum API'ler ve JSON yükleri.
- Kırpma veya AOT uyarılarını kontrol edin ve gerekli düzeltmeleri yapın. Daha fazla bilgi için Kırpma uyarılarına ve AOT uyarılarına giriş bölümlerine bakın.
- Uygulamanızı kapsamlı bir şekilde test edin.
iOS ve Mac Catalyst'te yerel AOT tanılama desteği
Yerel AOT ve Mono, tanılama ve izleme özelliklerinin bir alt kümesini paylaşır. Mono'nun çeşitli tanılama araçları nedeniyle, sorunları Yerel AOT yerine Mono içinde tanılamak ve hata ayıklamak yararlı olabilir. Kırpma ve AOT uyumlu uygulamalarda davranış farklılıkları olmamalıdır, bu nedenle araştırma genellikle her iki çalışma zamanı için de geçerlidir.
Aşağıdaki tabloda iOS ve Mac Catalyst üzerinde Yerel AOT ile tanılama desteği gösterilmektedir:
| Özellik | Tam olarak desteklenir | Kısmen desteklenir | Desteklenmez |
|---|---|---|---|
| Gözlemlenebilirlik ve telemetri | Kısmen desteklenir | ||
| Geliştirme süreci tanılama | Tam olarak desteklenir | ||
| Yerel hata ayıklama | Kısmen desteklenir | ||
| CPU Profili Oluşturma | Kısmen desteklenir | ||
| Yığın analizi | Desteklenmiyor |
Aşağıdaki bölümlerde bu tanılama desteği hakkında ek bilgiler sağlanmaktadır.
Gözlemlenebilirlik ve telemetri
.NET MAUI uygulamalarının mobil platformlarda izlemesi, tanılama araçlarını iOS ve Mac Catalyst üzerinde çalışan .NET uygulamalarına TCP/IP üzerinden bağlayan dotnet-dsrouter aracılığıyla etkinleştirilir. Ancak Yerel AOT, TCP/IP yığınıyla oluşturulmuş EventPipe/DiagnosticServer bileşenlerini desteklemediğinden şu anda bu senaryoyla uyumlu değildir. Gözlemlenebilirlik hala kodda açıkça ulaşılabilir.
Geliştirme süresi teşhisi
.NET CLI araçları build ve publish için ayrı komutlar sağlar.
dotnet build (veya Start Debugging (F5) Visual Studio Code'da), .NET MAUI iOS veya Mac Catalyst uygulamaları oluştururken veya başlatırken varsayılan olarak Mono kullanır. Yalnızca dotnet publish bu dağıtım modeli proje dosyasında etkinleştirilmişse Yerel AOT uygulaması oluşturur.
Tüm tanılama araçları yayımlanan Yerel AOT uygulamalarıyla sorunsuz çalışmaz. Bununla birlikte, kırpma ve AOT uyumlu tüm uygulamalarda (yani, derleme zamanında kırpma ve AOT uyarısı üretmeyen uygulamalarda) Mono ile Yerel AOT arasında davranış farklılıkları olmamalıdır. Bu nedenle, Hot Reload gibi tüm .NET geliştirme zamanına ait tanılama araçları, mobil uygulama geliştirme döngüsü sırasında geliştiriciler tarafından hala kullanılabilir.
İpucu
Uygulamanızı her zamanki gibi geliştirmeli, hata ayıklayıp test etmeli ve son uygulamanızı Yerel AOT ile son adımlardan biri olarak yayımlamalısınız.
Yerel hata ayıklama
Geliştirme sırasında .NET MAUI iOS veya Mac Catalyst uygulamanızı çalıştırdığınızda, varsayılan olarak Mono üzerinde çalışır. Ancak proje dosyasında Doğal AOT dağıtımı etkinleştirilirse, uygulama derleme zamanında herhangi bir kırpma ve AOT uyarısı üretmediğinde, Mono ve Doğal AOT arasında davranışın aynı olması beklenir. Uygulamanızın bu gereksinimi karşılaması koşuluyla, geliştirme ve test için standart Visual Studio Code yönetilen hata ayıklama altyapısını kullanabilirsiniz.
Yayınlandıktan sonra, Yerel AOT uygulamaları gerçek yerel ikili dosyalar haline gelir ve bu nedenle, yönetilen hata ayıklayıcı bu yerel ikili dosyalar üzerinde çalışmaz. Ancak, Yerel AOT derleyicisi tamamen yerel yürütülebilir dosyalar oluşturur ve bu dosyaları lldb ile hata ayıklayabilirsiniz. Bir Mac Catalyst uygulamasında lldb ile hata ayıklama işlemi, aynı sistemde yürütüldüğü için kolaydır. Ancak NativeAOT iOS uygulamalarında hata ayıklamak için ek çaba gerekir.
Yerel AOT ile .NET MAUI iOS uygulamalarında hata ayıklama
Yerel AOT ile uyumlu olan ve bu dağıtım modeliyle düzgün yapılandırılan ve yayımlanan .NET MAUI iOS uygulamalarında aşağıdaki gibi hata ayıklanabilir:
Uygulamanızı Yerel AOT hedeflemesi
ios-arm64ile yayımlayın ve aşağıdaki bilgileri not edin:- Uygulama adı (aşağıda
<app-name>olarak atıfta bulunulan). - Paket tanımlayıcısı (aşağıda
<bundle-identifier>olarak referans verilmiştir). - Yayımlanan uygulamanın arşiv dosyası .ipa yolunun (
<path-to-ipa>olarak aşağıda başvurulur).
- Uygulama adı (aşağıda
Fiziksel cihaz kimliğinizi alın (aşağıda
<device-identifier>olarak referans verilmektedir):xcrun devicectl list devicesUygulamayı fiziksel cihazınıza yükleyin:
xcrun devicectl device install app --device <device-identifier> <path-to-ipa>Uygulamayı fiziksel cihazınızda başlatın:
xcrun devicectl device process launch --device <device-identifier> --start-stopped <bundle-identifier>Fiziksel cihazınızı açın
lldbve bu cihaza bağlanın:(lldb) device select <device-identifier> (lldb) device process attach -n <app-name>
Bu adımları başarıyla tamamladıktan sonra Yerel AOT .NET MAUI iOS uygulamanızda lldb hata ayıklamaya başlayabilirsiniz.
Sembol dosyasının önemi
Varsayılan olarak, hata ayıklama simgeleri uygulamanın ikili dosyasından bir .dSYM dosyasına çıkarılır. Bu dosya, yerel değişkenler, kaynak satır numaraları hakkındaki bilgileri göstermek ve çökme dökümlerinin yığın izlerini yeniden oluşturmak için hata ayıklayıcılar ve ölüm sonrası analiz araçları tarafından kullanılır. Bu nedenle, uygulamanızı App Store'a göndermeden önce sembol dosyasını korumak önemlidir.
CPU profili oluşturma
Xcode Instruments , Yerel AOT uygulamasının CPU örneklerini toplamak için kullanılabilir.
Yığın analizi
Yığın analizi şu anda Yerel AOT ile desteklenmiyor.