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ı, iOS ve Mac Catalyst üzerinde yerel koda derlenmiş bir .NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) uygulaması oluşturur. Yerel AOT statik program analizi, uygulamanızın tam kırpması gerçekleştirir ve statik olarak başvurulmayan kodu kaldırmada agresiftir ve önceden kod oluşturma işlemi gerçekleştirir.
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 uyarlamanız gerekir; bu da bunların tamamen kırpıldığından ve AOT ile uyumlu olduğundan emin olmanız anlamına gelir. Yerel AOT sınırlamaları hakkında daha fazla bilgi için bkz . Yerel AOT sınırlamaları.
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, kırpma ve AOT uyarıları üretilir. Tek bir kırpma veya AOT uyarısı, uygulamanın Yerel AOT dağıtımıyla uyumlu olmadığı ve düzgün çalışmayabileceği anlamına gelir. Bu nedenle, Yerel AOT dağıtımı için bir uygulama oluştururken 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ı gizlerseniz, AOT dağıtılan uygulamanın, işlevselliğin denenmeyen uygulamadan değişmediğini doğrulamak için kapsamlı bir şekilde test edilmesi gerekir. Daha fazla bilgi için bkz . Kırpma uyarılarına giriş ve AOT uyarılarına giriş.
Not
Kırpma ve AOT uyarılarını düzeltmenin mümkün olmadığı durumlar (örneğin, üçüncü taraf kitaplıklar için gerçekleştiği durumlar) olabilir. 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ı etkinleştirmenin sonucunu belirlemek için uygulamanızı test etmek ve profili oluşturmak önemlidir.
Yerel AOT kullanarak yayımlama
Yerel AOT dağıtım modeli derleme özelliği ve $(PublishAot) komutuyla dotnet publish 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) tüm platformlar için olarak trueayarlanması, 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 koşullu ayar $(PublishAot)true, derleme sırasında dinamik kod kullanım analizini ve yayımlama sırasında Yerel AOT derlemesini 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 bkz . Özellik anahtarlarını kırpma.
Yerel AOT uygulamasının düzgün çalıştığını doğrulamanın tek yolu kullanarak uygulamayı yayımlamak dotnet publish ve kodunuz ve bağımlılıkları tarafından üretilen kırpma veya AOT uyarısı olmadığını 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. Kitaplığın kırpma ve AOT uyumlu olmasını sağlamanın tek yolu Yerel AOT dağıtımı ve dotnet publish komutunu kullanarak uygulamanızı yayımlamak ve Yerel AOT derleyicisinin kitaplık için herhangi bir uyarı üretip üretmediğini görmektir. Kendi kitaplıklarınızı AOT ile uyumlu hale getirme hakkında bilgi için bkz . Kitaplıkları yerel AOT ile uyumlu hale getirme.
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 derleyemediğini 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 derlemesini devre dışı bırakılmadığından ve tüm bağlamaları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 kullanarak TypeConverterAttributetürüne eklemeniz gerekir. Daha fazla bilgi için bkz . Örtük dönüştürme işlecini değiştirmek için TypeConverter tanımlama.
- Çalışma zamanında yöntemiyle LoadFromXaml XAML ayrıştırmak mümkün değildir. Bu, çalışma zamanında yüklenebilen tüm türlere özniteliği veya
DynamicallyAccessedMembersözniteliğiyle ek açıklama eklenerek kırpma güvenliDynamicDependencyhale getirilebilir ancak bu çok hataya açıktır ve önerilmez. - kullanarak QueryPropertyAttribute gezinti verilerini alma işe yaramaz. Bunun yerine, sorgu parametrelerini kabul etmesi gereken türlerde arabirimini uygulamanız IQueryAttributable gerekir. Daha fazla bilgi için bkz . Gezinti verilerini tek bir yöntem kullanarak işleme.
-
SearchHandler.DisplayMemberNameÖzelliği çalışmayabilir. Bunun yerine, sonuçların görünümünü ItemTemplate 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ı.
Kırpma uyarıları hakkında daha fazla bilgi için bkz . Kırpma uyarılarına giriş. 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 ile
x:DataTypeek açıklamalı 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 ile
- 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ımı ile ItemTemplatedeğ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 TypeConverterile değiştirin ve kullanarak TypeConverterAttributebunu türünüzle ekleyin. Daha fazla bilgi için bkz . Örtük dönüştürme işlecini değiştirmek için TypeConverter tanımlama.
- türünden türüne
ABdönüştürürken,ConvertToileAilişkilendirilmiş bir tür dönüştürücüsü üzerindeki yöntem veyaConvertFromileBilişkilendirilmiş bir tür dönüştürücüsü üzerindeki yöntem 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
- 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ı gözden geçirin ve düzeltin. Daha fazla bilgi için bkz . Kırpma uyarılarına giriş ve AOT uyarılarına giriş.
- 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 hatalarını 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 zamanı tanılaması | 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 zamanı tanılaması
.NET CLI araçları ve buildiçin publish 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.
Yayımlanan Yerel AOT uygulamalarıyla tüm tanılama araçları 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, Çalışırken Yeniden Yükleme gibi tüm .NET geliştirme zamanı tanılama araçları mobil uygulama geliştirme döngüsü sırasında geliştiriciler tarafından 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 Yerel AOT dağıtımı etkinleştirilirse, uygulama derleme zamanında kırpma ve AOT uyarıları üretmediğinde Mono ile Yerel 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ımladıktan sonra Yerel AOT uygulamaları gerçek yerel ikili dosyalardır ve bu nedenle yönetilen hata ayıklayıcı bunlar üzerinde çalışmaz. Ancak, Yerel AOT derleyicisi ile lldbhata ayıklayabileceğiniz tamamen yerel yürütülebilir dosyalar oluşturur. Ile bir Mac Catalyst uygulamasında lldb hata ayıklama işlemi, aynı sistemde yürütülürken doğrudan yapılı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 olarak başvurulur
<app-name>). - Paket tanımlayıcısı (aşağıda olarak başvurulur
<bundle-identifier>). - Yayımlanan uygulamanın arşiv .ipa dosyasının yolu (aşağıda olarak başvurulur
<path-to-ipa>).
- Uygulama adı (aşağıda olarak başvurulur
Fiziksel cihaz kimliğinizi alın (aşağıda olarak başvurulur
<device-identifier>):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 ile Yerel AOT .NET MAUI iOS uygulamanızda lldbhata 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 kilitlenme dökümlerinin yığın izlemelerini yeniden oluşturmak için hata ayıklayıcılar ve mortem sonrası çözümleme 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.