در حال حاضر ، در ویژوال استودیو ، می تواند راه حلی را ایجاد کنید که یک UI را با کد آن بگیرد و آن را در مرورگرهای Windows ، Android ، macOS ، iOS و اشتراک گذاری کند. این یک راه حل کامل بین کراس پلت فرم نیست (البته هنوز) ، اما اکنون در اینجا است.
پلت فرم منبع آزاد Uno در حال حاضر آنچه را که مایکروسافت MAUI وعده داده شده برای نوامبر 2022 را ارائه می دهد: امکان نوشتن کد C # با استفاده از .NET و اجرای آن در دستگاه های Windows ، Android ، macOS و iOS است. اما Uno هم اکنون بیش از آنچه MAUI در حال وعده برای آینده است نیز ارائه می دهد: با استفاده از Blazor ، برنامه Uno Platform شما نیز در مرورگرهای وب (هر مرورگر وب) اجرا می شود.
این فناوری را حداقل تا حدودی دوست دارم زیرا به نظرم می رسد گام آشکار بعدی برای توسعه .NET هر دو MAUI و Uno Platform افزونه های ابزار Xamarin مایکروسافت هستند که به شما امکان می دهد برنامه هایی بنویسید که روی چندین سیستم عامل اجرا شوند. آنچه Uno Platform انجام می دهد (و MAUI در حال حاضر شامل نمی شود) این است که از فناوری Open Source استفاده می کند که مایکروسافت در این زمینه حمایت می کند (Xamarin ، Blazor و غیره) و به شما امکان می دهد راه حل های مشتری را برای مرورگر خود بگنجانید.
در این مقاله ، من به شما نشان می دهم که چگونه می توانید یک پروژه Uno Platform را ایجاد کنید و درباره آنچه که من به عنوان یک محدودیت مهم با Uno می بینم ، بحث خواهیم کرد.
پیکربندی ویژوال استودیو
لازم نیست کارهای زیادی انجام دهید تا ویژوال استودیو برای ایجاد یک برنامه cross-platform با Uno آماده باشد. ابتدا به نسخه سازگار از Visual Studio نیاز دارید (من از Visual Studio 2019 Community Edition استفاده کردم اما قرار است هر نسخه از 16.3 به بعد کار کند). همچنین باید مطمئن شوید که ویژوال استودیو دارای این سه بار کار نصب شده است:
به الگوهای پروژه Uno Platform نیاز خواهید داشت. برای دریافت آنها ، از فهرست برنامه افزودنی ویژوال استودیو ، مدیریت برنامه های افزودنی را انتخاب کنید. در کادر گفتگوی نتیجه اطمینان حاصل کنید که در سمت چپ ، شما Online | Visual Studio Marketplace انتخاب کرده و سپس در کادر جستجو در سمت راست ، "Uno" را جستجو کنید. پس از یافتن گزینه Uno Platform Solution Templates ، آن را انتخاب کرده و روی دکمه Download کلیک کنید. مانند هر برنامه افزودنی ، فقط قالب هایی را برای نصب نصب می کنید ، بنابراین باید Visual Studio را ببندید ، منتظر بمانید تا کادر گفتگوی نصب ظاهر شود ، روی دکمه Modify کلیک کنید و منتظر بمانید که نصب تمام شود.
قبل از شروع ویژوال استودیو ، می توانید قبل از حل مشکل احتمالی ، از قبل حل کنید. هنگامی که شما در نهایت به کامپایل کردن یک برنامه پلتفرم Uno می پردازید ، ممکن است پیام خطایی دریافت کنید که می گوید: "متغیر محیطی بستر های نرم افزاری روی mcd تنظیم شده است." می توانید صبر کنید تا ببینید خطایی رخ داده است یا اکنون مشکل را بررسی یا رفع کرده اید. مراحل رفع مشکل عبارتند از:
ایجاد یک راه حل Uno
اکنون شما آماده اید تا یک راه حل Uno ایجاد کنید. پس از شروع Visual Studio ، از منوی File ، New را انتخاب کنید Project و در ایجاد گفتگوی پروژه جدید ، الگوی برنامه Cross-Platform (Uno Platform) را انتخاب کنید (به عنوان یک الگوی جدید ، احتمالاً درست در صدر لیست قرار دارد). در حال حاضر دو قالب وجود دارد - اطمینان حاصل کنید که الگویی را انتخاب کنید که توضیحات آن می گوید "یک برنامه XAML متقابل پلت فرم ایجاد کنید" (الگوی دیگر برای ایجاد یک پروژه کتابخانه کلاس Uno است).
از طریق Wizard کار کنید و به پروژه خود نام دهید. ممکن است در طی این فرآیند نیاز به دسترسی از طریق فایروال ویندوز داشته باشید و قطعاً باید مجوز پیش نمایش SDK Android را بپذیرید. پس از اتمام ، با پروژه های جداگانه ای برای Android ، macOS ، iOS ، Windows و مرورگر ، به علاوه یک پروژه مشترک که شامل پرونده های مورد استفاده همه آن پروژه ها است ، راه حلی خواهید داشت. این پروژه مشترک جایی است که شما Xamarin.Forms را که UI برنامه شما را تشکیل می دهد ، به همراه هر کد اجرا شده بر روی همه سیستم عامل ها (که به طور بالقوه تمام کد برنامه های شماست) قرار می دهید.
خیلی راحت می توان فهمید که کدام پروژه ها کدام سیستم عامل را هدف قرار می دهند: پروژه اندرویدی <yourProjectName> نامیده می شود .Droid ، نسخه مرورگر <yourProjectName> است .با این حال ، پروژه ویندوز <yourProjectName> است .UWP ، پروژه مشترک <yourProjectName> است. به اشتراک گذاشته شده و غیره. این همان روشی است که Xamarin راه حل های چند پلتفرمی خود را سازماندهی می کند (و یکی از مواردی که در MAUI تغییر می کند ، جایی که سیستم عامل های مختلف هدف فقط گزینه های سکویی در یک پروژه واحد می شوند).
اگر این اولین راه حل Uno / Xamarin شماست ، ممکن است بخواهید پروژه های macOS و iOS را حذف کنید که به دلیل محدودیت های مختلف صدور مجوز ، باید در رایانه MacIntosh کامپایل شوند (پروژه های Xamarin پشتیبانی گسترده ای را برای ساخت تیراندازی بر روی رایانه MacIntosh دارند. در یک شبکه و نظارت بر ساخت ... اما شما به یک رایانه MacIntosh احتیاج دارید). هیچ ضرری برای ترک پروژه ها در راه حل شما وجود ندارد ، اما با توجه به بستر Uno Platform بخش عمده ای از پیکربندی شما باید به صورت پروژه توسط پروژه انجام شود ، بنابراین کمتر پروژه ها با کار پیکربندی کمتری مواجه هستند.
به عنوان مثال، به پایان پیکربندی راه حل خود را، شما را به راست کلیک بر روی هر پروژه نیاز دارید، انتخاب کنید "Manage NuGet Packages را برای راه حل ..." و انجام این دو است:
در <yourProjectName> پروژه .Shared، به اطمینان حاصل شود که شما تمام پشتیبانی IntelliSense در شما به عنوان در هنگام کار با اشکال UI خود را دریافت کنید، باز کردن فرم MainPage.xaml و مطمئن شوید که لیست کشویی در گوشه سمت چپ بالای فرم ویرایشگر شما روی <yourProjectName> .UWP تنظیم شده است. سپس UWP پروژه پروژه خود را راه اندازی و ساخت راه حل خود را.
این همه آنچه از دیدگاه "جهانی" لازم است. با این حال ، برای پروژه های فردی ، شما باید کارهای بیشتری انجام دهید.
اگر قصد آزمایش پروژه Android خود را دارید ، باید این بسته های NuGet را به پروژه Droid خود اضافه کنید: Xamarin.AndroidX.Lifecycle.LiveData ، Xamarin.AndroidX.Browser و Xamarin.Google.Android.Material. همچنین باید اطمینان حاصل کنید که از شبیه سازهای اندرویدی برخوردار هستید ... اما ساده ترین راه برای بررسی اینکه آیا این کار را انجام می دهید ، تهیه و اجرای راه حل خود با پروژه <yourProjectName> .Droid به عنوان پروژه راه اندازی خود است. اگر آنها را ندارید ، من در مورد نحوه راه اندازی آنها بحث کرده ام.
اگر می خواهید برنامه خود را در یک مرورگر تست کنید ، در پرونده csproj * پروژه Wasm پروژه ، این خط را وارد کنید:
<EmbeddedResource Include="WasmCSS\Fonts.css" />
ایجاد قطعات مشترک
بطور پیش فرض ، هر پرونده ای که به پروژه Shared اضافه می کنید به صورت خودکار در پروژه های دیگر کپی شده و در آن پروژه ها استفاده می شود. بنابراین ، پروژه اشتراکی جایی است که ترجیح می دهید بیشترین تغییرات خود را انجام دهید.
اما این منجر به محدودیت قابل توجه در استفاده از سیستم عامل Uno می شود: اگر می خواهید پروژه Shared را با بسته های شخص ثالث گسترش دهید ... خوب ، در حال حاضر ، شما نمی توانید. پروژه مشترک از افزودن بسته های NuGet یا مراجعه به کتابخانه ها و پروژه های دیگر پشتیبانی نمی کند. اساساً ، هرچه مؤلفه های مشترک به هم بروند ، شما به کنترل های فرم Xamarin موجود در پروژه Shared و هر کدی که می خواهید در پروژه Shared بنویسید یا کپی کنید ، محدود می شوید.
البته می توانید سایر بسته های NuGet پروژه های دیگر را نیز در Solution گسترش دهید. با این حال ، شما نیاز به اضافه کردن مؤلفه های سازگار با پروژه به هر پروژه جداگانه ای دارید که می خواستید از آن استفاده کنید و نه یک جزء "cross-platform" تا در بین همه پروژه به اشتراک گذاشته شود. به عنوان مثال می توانید یک مؤلفه سازگار با Android را به پروژه Droid و یک جزء معادل iOS به پروژه iOS اضافه کنید. با این حال ، هر مؤلفه ای که به یکی از پروژه ها اضافه می کنید ، فقط می توانید از آن پروژه استفاده کنید ، بنابراین باید برای هر پروژه کد دلخواه بنویسید.
با این وجود ، اجزای Xamarin.Forms که می توانید در پروژه Shared از آنها استفاده کنید ، عملکرد بسیار زیادی در رابطه با UI ارائه می دهد. پروژه Shared صفحه راه اندازی پروژه شما را دارد (پرونده MainPage.xaml) و می توانید با استفاده از آن صفحه آزمایش Uno را شروع کنید. در اینجا یک فرم ساده با یک برچسب ، یک دکمه و یک جعبه متن (من همچنین پیش فرض Grid را در صفحه اصلی به یک صفحه تغییر داده ام). دکمه رویداد Click خود را با روشی به نام SayHello گره خورده است:
<Page x:Class="UnoTelerik.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <StackPanel> <TextBlock Name="HelloLabel"/> <TextBox x:Name="FirstName"></TextBox> <Button Click="Button_Click">Click Me!</Button> </StackPanel> </Page>
فایل code-behind برای فرم می تواند شامل کد دیگری باشد که می خواهید اضافه کنید. من یک روش SayHello قرار داده ام که برچسب UI را با یک پیام بر اساس مقدار وارد شده در جعبه متن به روز می کند:
private void SayHello(object sender, RoutedEventArgs e) { HelloLabel.Text = "Hello, " + FirstName.Text; }
و در آخر
در یک production app ، بهتر است از مدل MVVM را پیاده سازی کنید، که Uno از آن پشتیبانی می کند (در واقع ، در اینجا لیستی از ابزارها و فناوری هایی وجود دارد که پلت فرم Uno از آن پشتیبانی می کند).