این روزها که بحث نوشتن برنامه های موبایل داغ است، بسیاری به فکر تولید اپ و ایده هایی هستند که به صورت بازی یا برنامهی موبایل به دیگران عرضه کنند. این سوال عموما مطرح میشود که برنامهی مورد نظر را با استفاده کدام تکنولوژی یا کدام ابزار باید تولید کرد؟ آیا بهتر نیست از ابزارهایی که به صورت همزمان برای آندروید و iOS خروجی میدهند استفاده کرد؟ آیا استفاده از این ابزارها هزینه تولید را کاهش میدهد یا چالشهای دیگری نیز به همراه دارد؟ هدف این نوشتار، آشنایی شما با اکوسیستم موبایل و انتقال تجربهی توسعه با ابزارهای مختلف و مقایسهی خوبیها و بدیهای آنهاست تا به برخی از سوالات فوق جواب داده شود.
سهم هر یک از پلت فرمهای موبایل در حال حاضر مطابق نمودار زیر در جهان است:
مطابق این نمودار نمیتوان به یکی از این پلتفرم ها بسنده کرد و در صورتی که مشتریان زیادی از برنامک/اپ ما در یک پلت فرم استقبال کنند، بهتر است با تولید اپی با همان کارایی در پلت فرم های دیگران، از دیگر جوامع کاربری موبایل هم استفاده کرد.
چه ابزارهای استانداردی عرضه شده است؟
برای نوشتن برنامه های هر سیستم عامل موبایل، ابزارهای استانداردی از سوی شرکت های مادر معرفی شده است. اگر پلت فرمهای اصلی را آندروید شرکت گوگل، iOS شرکت اپل و ویندوزفون شرکت مایکروسافت بدانیم، به ترتیب ابزارها و زبانهای برنامه نویسی زیر جهت تولید برنامه از سوی این شرکت ها معرفی شده است:
سیستم عامل | محیط توسعه | زبان برنامه نویسی | سایت رسمی توسعه دهندگان |
آندروید | Android Studio یا Eclipse | Java | developer.android.com |
iOS | Xcode | Objective-C یا Swift | developer.apple.com |
ویندوزفون | Visual Studio | عموما #C | dev.windows.com |
هنگامی که از تکنولوژی های اصلی هر سیستم عامل برای تولید برنامه استفاده میکنیم، اصطلاحا از ابزارهای بومی (یا Native) بهره بردهایم که در واقع سیستمعامل مورد نظر با بهترین سرعت ممکن و بیشترین میزان هماهنگی از نظر امکانات و ظاهر برنامه را اجرا خواهد کرد. راه حلهای جایگزین دیگری نیز برای تولید برنامه موبایل وجود دارد که برخی از ویژگی های ذکر شدهی اپ های بومی (Native) را ندارند.
چه ابزارهایی برای خروجی همزمان روی چند پلتفرم وجود دارد؟
این دسته از ابزارها هر یک با نگاه خاصی به حل این مساله پرداخته اند که با نوشتن یک برنامهی مشترک، خروجی همزمان برای دو یا چند سیستم عامل ایجاد شود. با توجه به میزان استفاده از کد بومی و روشی که پیش گرفتهاند میتوان آنها را به دو دسته تقسیم کرد:
۱- ابزارهای ترکیبی (Hybrid) با استفاده از HTML5 و Adobe Air
با ورود HTML5 و پشتیبانی مرورگرهای موبایل از این استاندارد، و از طرفی معرفی Adobe Air برای موبایل، این ابزارها تلاش نموده اند تا با استفاده از همان تکنولوژی هایی که بر روی مرورگرها وجود دارد یعنی HTML, Flash, CSS و JavaScript برنامه هایی طراحی کنند که به دلیل استاندارد بودن نحوه نمایش صفحات طراحی شده با HTML5، این صفحات بر روی دستگاه های مختلف به یک شکل و به صورت همزمان قابل مشاهده خواهند بود. این ابزارها حتی با پیوند زدن Javascript با امکانات بومی دستگاه، امکان استفاده از امکانات دستگاه مانند دوربین، موقعیت مکانی GPS و امکانات ارتباطی ایمیل و پیامک را به برنامههای نوشته شده میدهند. نمونههای موجود عبارتند از:
ردیف | نام | لینک |
۱ | Sencha Touch | https://www.sencha.com/products/touch |
۲ | PhoneGap | http://phonegap.com |
۳ | SAP | http://go.sap.com/developer.html |
۴ | Kony | http://www.kony.com/products/mobilefabric |
۵ | Adobe Air | http://www.adobe.com/devnet/devices.html |
استفاده از این ابزارها به کسانی که با ابزارهای توسعهی وب سایت ها آشنا هستند، این امکان را میدهد که با استفاده از همان دانش بتوانند ساخت برنامه موبایل نیز را انجام بدهند. از طرفی به دلیل استاندارد نسبی بین موتورهای نمایش صفحات HTML ظاهر نسبتا ثابتی بین پلت فرم های مختلف نمایش داده میشود.
از آنجایی که اکثر پلت فرمهای موجود بر پایه HTML5 یا Flash (به استثنای Starling) از امکانات افزایش سرعت سختافزاری استفاده نمیکنند، معمولا عملکرد کند تری نسبت به برنامه های معمول دارند و برای برنامه هایی که نیاز به Performance بالا دارند مناسب نیستند. به همین جهت در حال حاضر اکثر برنامه های تولید شده توسط این ابزارها، شامل نمایش محتوا و یا پر کردن فرم های درخواست میشود.
۲- ابزارهایی که خروجی بومی میدهند
ابزارهای این دسته راه حل های بسیار پیچیده تری را در پیش گرفته اند تا بتوانند برنامه هایی با ظاهر بومی هر سیستم عامل تولید نمایند و از سرعت و هماهنگی ظاهر که برای برخی از پروژههای موبایل الزامی هستند بهره ببرند.
Xamarin تلاش میکند تا از چارچوب .NET استفاده کرده و زبان برنامه نویسی مشترکی بین دو پلت فرم آندروید و آی-او-اس ایجاد نماید تا توسعه دهندگان به جای یادگیری دو زبان برنامه نویسی Java و Objective-C به صورت مشترک با زبان #C اقدام به نوشتن برنامههای خود کنند. بنابراین به صورت عمده بهرهای که در استفاده از این ابزار گرفته میشود، این است که هنگام ساخت نرم افزارهای آی-او-اس، توابع و کتابخانههای ارایه شده توسط شرکت اپل در زبان #C قابل دسترسی و اجرا میشوند. به عنوان مثال برای نمایش یک پیام به کاربر (Alert View) قطعه کدهای زیر را مشاهده کنید:
Objective-C (iOS) |
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"alert title" message:@"this is a sample alert" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; |
Xamarin C# (iOS) |
UIAlertView alert = new UIAlertView () { Title = "alert title", Message = "this is a simple alert" }; alert.AddButton("OK"); alert.Show (); |
Java (Android) |
new AlertDialog.Builder(context) .setTitle("alert title") .setMessage("this is a sample alert") .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }) .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }) .setIcon(android.R.drawable.ic_dialog_alert) .show(); |
Xamarin C# (Android) |
AlertDialog.Builder alert = new AlertDialog.Builder (this); alert.SetTitle ("alert title"); alert.SetMessage ("this is a sample alert"); alert.SetPositiveButton ("Ok", (senderAlert, args) => { } ); //run the alert in UI thread to display in the screen RunOnUiThread (() => { alert.Show(); } ); |
در تجربهای که با ابزار Titanium یا Appcelerator داشتیم، به این نتیجه رسیدیم که برای برنامهای مانند یک سیستم پخش موسیقی که نیاز به شخصی سازی (Customization) زیادی دارد، استفاده از این پلت فرم دست توسعه دهنده را میبندد و به حالتی منجر میشود که میبایست تعداد زیادی افزونه (Plugin) به زبان بومی iOS و آندروید نوشته شود که کارایی های دلخواه و شخصی شده را ارایه بدهد. بنابراین نه تنها توسعه دهندگان تیم شما میبایست به محیط Titanium مسلط باشند، بلکه بابت نیازهای خاص ایجاد شده میبایست بر محیط توسعه بومی iOS و آندروید نیز تسلط به دست بیاورند.
۳- چارچوبهای ساخت بازی
بازی ها به دلیل ماهیت شان و اینکه به المان های سیستم عامل وابستگی چندانی ندارند، بهترین گزینه برای خروجی گرفتن همزمان بر روی چند پلت فرم هستند. تکنولوژی های مورد نیاز برای بازی های دو بعدی و سه بعدی در موبایل اکثرا در انتها به استفاده از OpenGL باز میگردد که API های مشابه و مستقل از سخت افزار اکثر آن را تشکیل میدهد. به همین دلیل ابزارهای خروجی همزمان بسیار در این زمینه موفق عمل کرده اند و موتورهایی نظیر Unity و UDK در سال های اخیر توسط بسیاری از توسعه دهندگان بازی های مستقل (Indie) مورد استفاده قرار گرفته است. تعدادی از موتورهای بازی سازی با امکان خروجی همزمان در فهرست زیر معرفی شده اند:
نام | زبان برنامه نویسی | توضیحات | |
۱ | Unity | #C | مناسب برای بازیهای دوبعدی و سه بعدی http://www.unity3d.com |
۲ | UDK | UnrealScript | مناسب برای بازیهای سه بعدی |
۳ | CryEngine | Lua | مناسب برای بازی های سه بعدی با امکان خروجی برای کنسولها و PC |
۴ | GameMaker | GML | http://www.yoyogames.com |
۵ | Cocos2d-X | Lua, C++, JS | مناسب برای بازی های دوبعدی و موبایل |
۶ | Corona SDK | Lua |
مناسب برای بازی های دوبعدی و موبایل رایگان، نسخه فروشی در صورت نیاز به افزودن کتابخانههای بومی |
چه زمانی از ابزارهای خروجی همزمان استفاده کنم؟
جواب به این سوال، به نیاز شما و نوع برنامهای که تولید میکنید بستگی دارد!
اگر بازی تولید میکنید: قطعا استفاده کنید! چارچوب های تولید برنامه برای چند پلت فرم در تمام آنها عملکرد بسیار مشابه دارند و با تغییرات اندکی میتوانید برای هر پلت فرم خروجی مورد نظر خود را بگیرید. اگر بازی خود را با Android-SDK شرکت گوگل تولید کنید، برای iOS مجبور خواهید بود بسیاری از ساختارها رابازنویسی کنید اما استفاده از چارچوب های خروجی همزمان و موتورهای بازی مانند Unity به شما کمک میکند با کمترین تغییرات بازی خود را برای پلت دوم و سومی خروجی بگیرید.
اگر یک اپ ساده برای ارایه محتوا تولید میکنید: از چارچوبهای خروجی همزمان با HTML5 استفاده کنید. این چارچوبها ارایهی محتوا را بسیار ساده کردهاند و محتوای شما به یک شکل در پلت فرمهای مختلف دیده میشود. اگر با ActionScript یا فلش از قبل آشنا هستید، Adobe Air گزینه خوبی برای شماست.
اگر یک اپ با UI زیاد تولید میکنید و میخواهید آن را تا حد زیادی شخصیسازی (Customize) کنید: در استفاده از چارچوبهای Native شک نکنید، استفاده از چارچوبهای خروجی همزمان در بسیاری موارد مانعی بر سر راه شما برای شخصی سازی المانهای نمایشی و UI هستند.
اگر یک اپ با UI عادی اما حجم کد منطق و پردازشی زیاد تولید میکنید: استفاده از ابزارهای خروجی همزمان مانند Xamarin به شما کمک میکند که بخش هایی از نرم افزار که به دریافت، پردازش و نگهداری اطلاعات میپردازد را یک بار توسعه بدهید.
بخش پنهان و خاموش برنامه های موبایل را فراموش نکنیم!
بسیاری از بازی ها وبرنامه هایی که امروزه استفاده میکنیم، اطلاعات را در خود دستگاه ذخیره نمیکنند بلکه با یک ارتباط اینترنتی خدمات را ارایه میدهند و پشت صحنهی آنها، یک سرور مرکزی برای جمع آوری، نگهداری و تحویل اطلاعات وجود دارد. این مقاله به تکنولوژی های مربوط به نوشتن برنامهی موبایل یا Client پرداخته است، اما اگر سیستمی که به دنبال پیاده سازی آن هستید نیاز به بخش Server دارد، میبایست تکنولوژی های سمت وب از جمله PHP، ASP.NET و Ruby و یا Python را هم بررسی کنید که عموما برای تولید سرویس دهنده ها مورد استفاده قرار میگیرند.
چقدر خوب و کامل بود. سوال هایی بود که هم برای من (که توسعه دهنده نیستم) هم پیش اومده بود وخیلیها هم دیده بودم (مخصوصا مبتدی ها) که برای اینکه چه پلتفرمی رو انتخاب کنن سوال داشتن.
در تجربه ای هم که من با Xamarin داشتم، باید بگم که اگر چه از لحاظ زیر ساختی و مهندسی کار بسیار بزرگ و خوبی صورت دادن اما متاسفانه اکوسیستم زامارین هنوز خیلی ضعیف و نوپاست و نتوسته جامعه قوی ای رو حول خودش ایجاد کنه. در صورت پیشرفته شدن پروژه و بروز مشکل احتمالا به سختی بشه نتیجه خوبی رو در اینترنت پیدا کرد. کامپوننت ها و کتابخونه هایی که در اندروید توسعه داده شدن بسیار بسیار بیشتر از کتابخانه های آماده شده در زامارین هستن و این بدین معنی هست که خیلی جاها باید از نو چرخ رو اختراع کرد. اگر چه میشه از نظر فنی و تکنیکی کتابخونه های جاوایی رو در زامارین استفاده کرد اما این عمدتا کار خیلی زمانگیری میشه و با هر به روزرسانی کتابخونه اصلی (جاوایی) باید تغییرات رو در فایل های سی شارپ زامارین هم اعمال کرد. همچنین این موضوع وقتی که با کامپوننت های UI مربوط میشه خیلی آزاردهنده تر میشه.
نکته بعدی هم اینکه اگر چه اپ ها در زامارین تحت پلتفرم دات نت توسعه داده میشن و این موجب “یکپارچگی زبانی” در کد ها میشه، اما تیم توسعه دهنده باید از تمامی مفاهیم سکوی توسعه (اندروید، آی او اس و ویندوز فون) به صورت جداگانه مطلع باشه. چرا که زامارین در هر کدام از این سکو ها از مفاهیم و کتابخانه های همین سکو ها استفاده می کنه. شعار زامارین این هست که شما می تونید نحوه استفاده از زامارین رو از خوندن مطالب آموزشی اندروید در سایت گوگل یاد بگیرید و نگاشت یک به یکی بین کلاس ها و معماری وجود داره. اما سوالی که پیش میاد این هست که اگر تیمی با اندروید آشنا هست و تیمی با آی او اس آشنا هست چرا باید پس از سی شارپ استفاده کنه؟ آیا وقتی که عمده منطق و سرویس ها در سمت سرور استفاده میشن، استفاده از زامارین برای تولید Shared Codebase به صرفه و مقدور هست؟
اما با این حال فکر می کنم به طور کلی واسه اپ های ساده و سر راست در حال حاضر تجربه خوبی ارائه بده.
خیلی عالی، واقعا مختصر، مفید و حسابی بود.
خیلی ممنون
باسلام خدمت شما جوانان موفق ایرانی
بنده هم از این مطالب بصورت هدفمند استفاده کردم و با جرات میتونم بگم که خیلی کارتون درسته.
آرزوی موفقیت های بیشتر برای تاد دارم.
سلام،میشه لطفا بفرمایید آسان ترین راه برای تولید کتاب اندرویدی چیست؟چندین نرم افزار برای این کار بصورت رایگان هست اما کافه بازار آنها راقبول نمی کند،لطفا راهنمایی بفرمایید
افشین جان تابحال کتاب آندرویدی تولید نکردیم راستش، متاسفانه اطلاع ندارم.
میخام برنامه نویسی اندروید رو ب صورت حرفه ای یاد بگیرم .متاسفانه کلاس یا جزوه ای در شهرم نیست .باید چکار کنم ..تورو خدا خیلی خوب راهنماییم کنید .
سلام
آناهیتا خانم حتما نیاز نیست که کلاس باشه در شهرتون. روی اینترنت میتونید منابع زیادی پیدا کنید که این مطالب رو رایگان آموزش میدن به صورت ویدیویی. مثل این سایت:
http://nikandroid.com/%D9%BE%DA%A9%DB%8C%D8%AC-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A7%D9%86%D8%AF%D8%B1%D9%88/
حتی بستههای آموزش ویدیویی فارسی هم فروخته میشه که میتونید سفارش بدین. قدم به قدم از روی این ویدیوها پیش برید و یاد بگیرید…
ممنونم .