پورتال کاج

واژه پرتال به معنی دروازه یا محل ورود به یک شهرمی باشد و تا بحال بیشترین کاربرد را در حوزه IT داشته است. طبق تعاریفی که تا بحال ارائه شده است، پرتال را می توان یک مرکز ارائه خدمات و اطلاعات اینترنتی دانست

یادداشت‌های انتشار: تازه‌های .NET MAUI در .NET 10 Preview 1


این نسخه عمدتاً بر بهبود کیفیت در .NET MAUI، دات‌نت برای اندروید (Android)، و دات‌نت برای پلتفرم‌های اپل (iOS، Mac Catalyst، macOS و tvOS) تمرکز داشته است.

در ادامه می‌توانید اطلاعات دقیقی درباره این بهبودها پیدا کنید:

  • ‎.NET MAUI
    • بهبودهای CollectionView برای iOS و Mac Catalyst
  • .NET for Android
    • پشتیبانی از Android 16 (Baklava) Beta 1
    • توصیه‌های جدید برای حداقل نسخه API اندروید
    • پشتیبانی از ساخت پروژه با JDK 21
    • پشتیبانی از دستور dotnet run برای پروژه‌های اندروید
    • فعال‌سازی متدهای مارشال (Marshal Methods) به صورت پیش‌فرض
    • بیلدهای زمان-طراحی (Design-Time Builds) در ویژوال استودیو دیگر aapt2 را فراخوانی نمی‌کنند
  • .NET for iOS, Mac Catalyst, macOS, tvOS
    • فعال‌سازی هشدارهای تریمر (Trimmer warnings) به صورت پیش‌فرض
    • باندل کردن منابع اصلی در کتابخانه‌ها

به‌روزرسانی‌های .NET MAUI در .NET 10

برای مطالعه جزئیات بیشتر به مستندات تازه‌های .NET MAUI در .NET 10 مراجعه کنید.

مسئله شناخته‌شده: در Preview 1، بیلد کردن پروژه‌هایی که فریمورک‌های net8.0-* را هدف قرار داده‌اند با استفاده از .NET 10 SDK با مشکل مواجه می‌شود.

بهبودهای CollectionView برای iOS و Mac Catalyst

دو هندلر (Handler) جدید برای CollectionView و CarouselView در iOS و Mac Catalyst که بهبودهایی در عملکرد و پایداری به همراه داشتند، در .NET 9 به صورت اختیاری در دسترس بودند. در این نسخه، این هندلرها به صورت پیش‌فرض فعال شده‌اند. اگر می‌خواهید به حالت قبل بازگردید، می‌توانید با افزودن کد زیر به کلاس MauiProgram خود، آن‌ها را غیرفعال کنید:

C#
#if IOS || MACCATALYST
builder.ConfigureMauiHandlers(handlers => {
    handlers.AddHandler<Microsoft.Maui.Controls.CollectionView, Microsoft.Maui.Controls.Handlers.Items.CollectionViewHandler>();
    handlers.AddHandler<Microsoft.Maui.Controls.CarouselView, Microsoft.Maui.Controls.Handlers.Items.CarouselViewHandler>();
});
#endif

ما هیجان‌زده هستیم که شما این هندلرهای جدید را امتحان کنید.

یادآوری می‌شود که اگر برنامه‌های مبتنی بر .NET 9 دارید، می‌توانید همین امروز با کد زیر آن‌ها را تست کنید:

C#
#if IOS || MACCATALYST
builder.ConfigureMauiHandlers(handlers => {
    handlers.AddHandler<Microsoft.Maui.Controls.CollectionView, Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2>();
    handlers.AddHandler<Microsoft.Maui.Controls.CarouselView, Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2>();
});
#endif

.NET for Android

تمرکز این نسخه بر بهبود کیفیت بوده است. لیست دقیق تغییرات را می‌توانید در صفحه انتشار dotnet/android در گیت‌هاب پیدا کنید.

Android 16 (Baklava) Beta 1

گوگل نسخه Beta 1 از Android 16 (API-36) SDK را منتشر کرده است. پشتیبانی برای استفاده از این APIهای پیش‌نمایش به دات‌نت اضافه شده است.

برای هدف قرار دادن API پیش‌نمایش اندروید ۱۶:

  1. از Android SDK Manager برای دانلود پلتفرم Android 16 (Baklava) استفاده کنید.
  2. TargetFramework پروژه خود را به net10.0-android36 به‌روزرسانی کنید.

به‌روزرسانی حداقل نسخه API پیشنهادی برای اندروید

قالب‌های پروژه .NET for Android به‌روزرسانی شده‌اند تا به جای API 21 ("Lollipop")، نسخه ۲۴ ("Nougat") را به عنوان $(SupportedOSPlatformVersion) پیش‌فرض مشخص کنند. این تغییر از بروز خطاهای زمان اجرا ناشی از "desugaring" هنگام استفاده از متدهای پیش‌فرض اینترفیس‌ها در جاوا جلوگیری می‌کند. اگرچه API-21 همچنان در .NET 10 پشتیبانی می‌شود، اما توصیه می‌کنیم پروژه‌های موجود را به API-24 به‌روزرسانی کنید تا از خطاهای غیرمنتظره در زمان اجرا جلوگیری شود.

توجه: برای اطلاعات بیشتر به Pull Request اصلی در گیت‌هاب مراجعه کنید.

پشتیبانی از ساخت پروژه با JDK 21

پروژه‌های .NET for Android اکنون می‌توانند با JDK 21 ساخته شوند.

پشتیبانی از دستور dotnet run برای اندروید

پروژه‌های .NET for Android اکنون می‌توانند با استفاده از دستور dotnet run اجرا شوند:

Bash
// اجرا روی تنها دستگاه فیزیکی اندروید متصل
dotnet run -p:AdbTarget=-d

// اجرا روی تنها شبیه‌ساز (emulator) در حال اجرای اندروید
dotnet run -p:AdbTarget=-e

// اجرا روی دستگاه فیزیکی یا شبیه‌ساز مشخص شده
dotnet run -p:AdbTarget="-s emulator-5554"

ویژگی AdbTarget به ابزار خط فرمان adb (Android Debug Bridge) ارسال می‌شود.

توجه: برای اطلاعات بیشتر به Pull Request در گیت‌هاب مراجعه کنید.

فعال‌سازی متدهای مارشال (Marshal Methods) به صورت پیش‌فرض

روش جدیدی برای ایجاد متدهای مارشال که برای فراخوانی کدهای #C از جاوا مورد نیاز است، اکنون به صورت پیش‌فرض فعال است. این ویژگی که در .NET 9 معرفی شد، در .NET 10 برای پایدارسازی بیشتر، بهبود یافته است. این قابلیت عملکرد زمان راه‌اندازی (startup) برنامه را بهبود می‌بخشد.

اگر در پیش‌نمایش‌های .NET 10 با هنگ کردن برنامه هنگام راه‌اندازی مواجه شدید که در .NET 9 وجود نداشت، سعی کنید متدهای مارشال را غیرفعال کنید. اگر این کار مشکل را برطرف کرد، لطفاً یک issue ثبت کنید تا ما را از مشکلات باقی‌مانده مطلع سازید.

XML
<AndroidEnableMarshalMethods>false</AndroidEnableMarshalMethods>

بیلدهای زمان-طراحی در ویژوال استودیو دیگر aapt2 را فراخوانی نمی‌کنند

برای بیلدهای زمان-طراحی، دیگر aapt2 فراخوانی نمی‌شود؛ در عوض، فایل‌های .aar و منابع اندروید زیربنایی به طور مستقیم تجزیه (parse) می‌شوند. این تغییر، زمان بیلد زمان-طراحی را در برخی از تست‌های واحد ما از بیش از ۲ ثانیه به کمتر از ۶۰۰ میلی‌ثانیه کاهش داده است.


.NET for iOS, Mac Catalyst, macOS, tvOS

تمرکز این نسخه بر بهبود کیفیت بوده است. لیست دقیقی از تغییرات و مسائل شناخته‌شده را می‌توانید در صفحه انتشار xamarin/xamarin-macios در گیت‌هاب پیدا کنید.

فعال‌سازی هشدارهای تریمر (Trimmer warnings) به صورت پیش‌فرض

در گذشته، ما هشدارهای تریمر را سرکوب می‌کردیم، زیرا کتابخانه کلاس پایه (BCL) خود دارای هشدارهای تریمر بود و این بدان معنا بود که توسعه‌دهندگان نمی‌توانستند تمام هشدارها را برطرف کنند. با این حال، معتقدیم که در .NET 9 تمام هشدارهای تریمر مربوط به کدهای خودمان را برطرف کرده‌ایم. اکنون آماده‌ایم تا توسعه‌دهندگان نیز همین کار را انجام دهند، بنابراین هشدارهای تریمر را به صورت پیش‌فرض فعال کرده‌ایم.

این ویژگی را می‌توان با افزودن کد زیر به فایل پروژه غیرفعال کرد:

XML
<PropertyGroup>
  <SuppressTrimAnalysisWarnings>true</SuppressTrimAnalysisWarnings>
</PropertyGroup>

برای اطلاعات بیشتر به Issue در گیت‌هاب مراجعه کنید.

باندل کردن منابع اصلی در کتابخانه‌ها

پروژه‌های کتابخانه‌ای می‌توانند انواع مختلفی از منابع باندل (مانند storyboards, xibs, property lists, png images, CoreML models, texture atlases) داشته باشند که به عنوان منابع جاسازی شده (embedded resources) در کتابخانه کامپایل‌شده قرار می‌گیرند. در گذشته، هرگونه پردازشی (مانند کامپایل کردن storyboards یا xibs، یا بهینه‌سازی property lists/png images) قبل از جاسازی انجام می‌شد، اما این کار بیلد کتابخانه‌ها را بسیار پیچیده می‌کرد، زیرا این پردازش:

  1. نیاز داشت که روی یک مک (Mac) اجرا شود.
  2. نیاز به مجموعه ابزارهای اپل (Apple's toolchain) داشت.
  3. تصمیم‌گیری بر اساس منابع اصلی هنگام ساخت اپلیکیشن را غیرممکن می‌کرد.

بنابراین، ما در .NET 9 پشتیبانی اختیاری (opt-in) برای جاسازی منابع اصلی در کتابخانه‌ها اضافه کردیم و در .NET 10 آن را به حالت پیش‌فرض (opt-out) تغییر دادیم.

رفتار پیش‌فرض را می‌توان در فایل پروژه به صورت زیر تغییر داد:

XML
<PropertyGroup>
  <BundleOriginalResources>false</BundleOriginalResources>
</PropertyGroup>

برای اطلاعات بیشتر به Issue در گیت‌هاب مراجعه کنید.


منبع (Reference):

https://github.com/dotnet/core/blob/main/release-notes/10.0/preview/preview1/dotnetmaui.md