در
قسمت قبل، محیط توسعه نرم افزار مد نظرمان را ایجاد کردیم و توانستیم پروژه پیش فرض Xamarin forms را بیلد کنیم. حالا قصد داریم تا یک مثال ساده را با هم بررسی کنیم و آن را بر روی ویندوز تست کنیم. در قسمت بعدی نیز همین مثال ساده را بر روی Android و در قسمت بعدتر نیز بر روی iOS تست میکنیم. پس از اطمینان از اینکه امکان تست برنامه را بر روی هر سه پلتفرم یافتهاید، بر روی آموزش موارد بیشتری از Xamarin Forms تمرکز میکنیم.
سپس در صورتیکه ابزار git را ندارید، آن را نیز
دانلود و نصب کنید و بعد دستور git clone https://github.com/ysmoradi/XamApp را در Command line وارد کنید. دقت کنید پروژه را در جایی Clone نکنید که مسیر فولدر آن طولانی شود. این پروژه، یک پروژه آماده برای تست و تغییر است و ما برای
بررسی نحوه اجرا آن در UWP - Android - iOS از آن استفاده میکنیم.
خود کدها در جلسات بعدتر بررسی خواهند شد. تنها چیزی که الآن اهمیت دارد اطمینان از راه اندازی شدن محیط توسعه نرم افزار شما به بهترین شکل ممکن است.
با ساختار پروژه و جزئیات آن در گذر زمان بیشتر آشنا میشویم، ولی به صورت کلی این Solution دارای 4 پروژه است:
XamApp - XamApp.Android - XamApp.iOS - XamApp.UWP
- در XamApp، تقریبا تمامی پروژه نوشته میشود. این مورد شامل منطق برنامه است که با CSharp نوشته میشود و ظاهر برنامه که با XAML نوشته میشود. اگر چه که میتوان ظاهر برنامه را نیز با CSharp زد، انجام این کار به هیچ وجه توصیه نمیشود. در مورد Xaml نیز بعد از راه اندازی این مثال در Windows-Android-iOS صحبت خواهیم کرد.
- XamApp.Android پروژهای است که اگر Set as start up project شود، به شما اجازه تست کدهای داخل XamApp را بر روی گوشی یا Emulatorهای اندرویدی میدهد. همچنین از طریق این پروژه میتوانید پابلیش apk را بگیرید و به امکانات پایه Android مانند Activity - Fragment - Android XML - Intent و ... در همان زبان CSharp دسترسی داشته باشید. استفاده از این پروژه، مطلب قسمت بعدی این دوره آموزشی است.
- XamApp.iOS پروژهای است که اگر Set as start up project شود، به شما اجازه تست کدهای داخل XamApp را بر روی گوشی یا Emulatorهای iOS ای میدهد. همچنین از طریق این پروژه میتوانید پابلیش ipa را بگیرید و به امکانات پایه iOS مانند Delegate - Storyboard و ... در همان زبان CSharp دسترسی داشته باشید. در آموزش بعد از آموزش Android، به iOS نیز خواهیم پرداخت.
- XamApp.UWP پروژهای است که اگر Set as start up project شود، به شما اجازه تست کدهای داخل XamApp را بر روی ویندوز خودتان میدهد. همچنین از طریق این پروژه میتوانید پابلیش appxbundle یا msi را بگیرید و به امکانات پایه Windows در همان زبان CSharp دسترسی داشته باشید. UWP مخفف Universal windows platform است.
برای شروع پروژههای XamApp.Android و XamApp.iOS را Unload کنید، زیرا در این قسمت با آنها کاری نداریم. همچنین پروژه XamApp.UWP را Set as start up project کنید.
فقط برای یکبار از منوی Tools در ویژوال استدیو، Options را باز کنید و در قسمت جستجوی آن، عبارت Intellitrace را بنویسید و اگر چیزی پیدا شد، تیک Enable Intellitrace را بردارید تا غیر فعال شود. همچنین مجدد Suppress JIT optimization را جستجو کنید و تیک آن را بزنید تا فعال شود.
دکمه F5 را بزنید و برنامه را اجرا کنید. یک دکمه میبینید که Text آن عبارت + است. اگر بر روی آن کلیک کنید، میبینید که متن Label بالای آن میشود Button tapped 1 time
فایل HelloWorldView.xaml را در فولدر Views در پروژه XamApp، پیدا کنید و نگاهی به کد Label و Button بیاندازید که درون StackLayout هستند و StackLayout خود داخل ContentPage است که در نتیجه صفحه اول ما کل فضایی را که دارد، به StackLayout اختصاص یافتهاست.
<StackLayout HorizontalOptions="Center" VerticalOptions="Center">
<Label Text="{Binding StepsCount, StringFormat='{}Button tapped {0} times!'}" />
<Button Command="{Binding IncreaseStepsCountCommand}" Text="+" />
</StackLayout>
StackLayout نوعی Layout سادهاست که بسته به تنظیم Orientation اش، میتواند Vertical یا Horizontal باشد. آیتمهای داخلاش را که در این مثال Label و Button هستند، یا عمودی یا افقی میچیند که پیش فرضاش عمودی است. Horizontal Options و Vertical Options اش هم که هر دو Center هستند باعث میشود آیتمها دقیقا در وسط StackLayout بنشینند. چون تمامی فضای ContentPage به StackLayout اختصاص یافتهاست، عملا Label و Button در وسط برنامه ظاهر میشوند.
Label ما دارای Text ای است که به StepsCount متصل یا Bind شده است ( به کمک Binding StepsCount).
StepsCount عددی است که در ابتدا صفر است و با کلیک دکمه، مقدار آن یکی یکی افزایش مییابد. این کد در HelloWorldViewModel.cs و به زبان CSharp نوشته شدهاست. StringFormat نیز در اینجا عملکردی معادل StringFormat در CSharp را دارد.
Button دارای Command ای است که به متدی در CSharp به نام IncreaseStepsCount متصل شدهاست.
حال نگاهی به کد CSharp بیندازیم:
public class HelloWorldViewModel : BitViewModelBase
{
public int StepsCount { get; set; }
public BitDelegateCommand IncreaseStepsCountCommand { get; set; }
public HelloWorldViewModel()
{
IncreaseStepsCountCommand = new BitDelegateCommand(IncreaseStepsCount);
}
async Task IncreaseStepsCount()
{
StepsCount += 1;
}
}
ظاهر برنامه در فایل Xaml ای نوشته شده به نام HelloWorld
View.xaml و منطق برنامه در کلاسی است به نام HelloWorld
ViewModel که این
View و
ViewModel انتهای نام این دو، از معماری
MVVM یا Model - View - View Model میآید که در سال 2006~2007 و با معرفی WPF کم کم معروف شد و ما نیز از آن در این مثال داریم استفاده میکنیم.
StepsCount که در View به Text آن Label وصل شده بود، در CSharp یک Property از جنس int است. Command ما با نام IncreaseStepsCountCommand به متدی وصل شدهاست که کارش اضافه کردن یکی یکی StepsCount است.
در حالت عادی اگر بخواهید این برنامه را تغییر دهید که مثلا به جای یکی یکی بالا بردن StepsCount، آن را یکی یکی کم کند، ابتدا برنامه را Stop میکنید و سپس در Xaml برای Button مربوطه، Text را از + به - تغییر میدهید. همچنین کد CSharp را نیز عوض میکنید که میشود:
StepsCount -= 1
و مجددا F5 را میزنید. این روش قطعا خیلی Productive نیست و زمان زیادی را از شما میگیرد. شما میتوانید با Break کردن اجرای برنامه به تغییر کدهای CSharp بپردازید. همچنین بدون Break کردن میتوانید کدهای Xaml را تغییر دهید و به این روی، خیلی سریعتر پروژه را پیش ببرید.
با مشاهده
این ویدئو می توانید درک بهتری از عملکرد Edit & continue داشته باشید. دقت کنید که در زمان تغییر ظاهر و منطق، اگر مثلا عدد، تا 17 افزایش داده شده بود برای تست، روی 17 میماند و به صفر بر نمیگردد. در واقع کل برنامه Reload نمیشود و این تفاوت Edit & continue با Hot reload موجود در سایر ابزارهاست.
همچنین با کوچک و بزرگ کردن برنامه اجرا شده به سایز گوشیها و تبلتهای مختلف عملا میتوانید برنامه را در سایزهای مختلف تست کنید. توجه داشته باشید که در Xamarin Forms مقدار دهی به طول و عرض و ... در تمامی پلتفرمها و Deviceها فارغ از Resolution یکسان است و در همه جا Width=64 عملا به یک سانتی متر اشاره دارد. علاوه بر این بدون اینکه صفحه مانیتور شما Touch باشد، میتواند حتی Touch را نیز تست کنید که برای این کار میتوانید از Simulator استفاده کنید. به این صورت که به جای Local Machine گزینه Simulator را انتخاب میکنید.
برای پابلیش پروژه نیز میتوانید از آموزشهای بر روی وب استفاده کنید که شامل ارائه برنامه به استفاده کنندگان با یا بدون Microsoft Store است که از فرمت نه چندان جالب appxbundle استفاده میکند و ما از این آموزش عبور میکنیم و به ذکر این نکته بسنده میکنیم که نسخه بعدی Visual Studio 2017 یعنی 15.9 قابلیت ساختن msix یا Windows installer را نیز دارد که از هر چیزی بهتر است و برای پابلیش بهتر است تا ارائه نسخه Stable بعدی ویژوال استودیو که احتمالا در طی کمتر از یک ماه دیگر ارائه میشود، صبر کنید. دقت کنید علاوه بر کامپیوتر، لپ تاپ و تبلتهای ویندوزی، برنامهی شما بر روی XBox نیز میتواند کار کند.
در قسمت بعدی، همین پروژه را بر روی Android نیز اجرا میکنیم.