Skip to main content

این روزها که بحث نوشتن برنامه های موبایل داغ است، بسیاری به فکر تولید اپ و ایده هایی هستند که به صورت بازی یا برنامه‌ی موبایل به دیگران عرضه کنند. این سوال عموما مطرح می‌شود که برنامه‌ی مورد نظر را با استفاده کدام تکنولوژی یا کدام ابزار باید تولید کرد؟ آیا بهتر نیست از ابزارهایی که به صورت همزمان برای آندروید و 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) را ندارند.

چه ابزارهایی برای خروجی همزمان روی چند پلت‌فرم وجود دارد؟

ابزارهای تولید نرم افزار موبایل برای چند پلت فرم Xamarin Appcelerator

این دسته از ابزارها هر یک با نگاه خاصی به حل این مساله پرداخته اند که با نوشتن یک برنامه‌ی مشترک، خروجی همزمان برای دو یا چند سیستم عامل ایجاد شود. با توجه به میزان استفاده از کد بومی و روشی که پیش گرفته‌اند می‌توان آنها را به دو دسته تقسیم کرد:

۱- ابزارهای ترکیبی (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 مناسب برای بازی‌های سه بعدی

http://www.unrealengine.com

۳ CryEngine  Lua مناسب برای بازی های سه بعدی با امکان خروجی برای کنسولها و PC

http://www.crytek.com/cryengine

۴ GameMaker  GML http://www.yoyogames.com
۵ Cocos2d-X  Lua, C++, JS مناسب برای بازی های دوبعدی و موبایل

http://www.cocos2d-x.org

۶ Corona SDK  Lua

مناسب برای بازی های دوبعدی و موبایل

رایگان، نسخه فروشی در صورت نیاز به افزودن کتابخانه‌های بومی

https://coronalabs.com/products/corona-sdk

چه زمانی از ابزارهای خروجی همزمان استفاده کنم؟

جواب به این سوال، به نیاز شما و نوع برنامه‌ای که تولید می‌کنید بستگی دارد!

اگر بازی تولید میکنید: قطعا استفاده کنید! چارچوب های تولید برنامه برای چند پلت فرم در تمام آنها عملکرد بسیار مشابه دارند و با تغییرات اندکی می‌توانید برای هر پلت فرم خروجی مورد نظر خود را بگیرید. اگر بازی خود را با Android-SDK شرکت گوگل تولید کنید، برای iOS مجبور خواهید بود بسیاری از ساختارها رابازنویسی کنید اما استفاده از چارچوب های خروجی همزمان و موتورهای بازی مانند Unity به شما کمک میکند با کمترین تغییرات بازی خود را برای پلت دوم و سومی خروجی بگیرید.

اگر یک اپ ساده برای ارایه محتوا تولید می‌کنید: از چارچوب‌های خروجی همزمان با HTML5 استفاده کنید. این چارچوب‌ها ارایه‌ی محتوا را بسیار ساده کرده‌اند و محتوای شما به یک شکل در پلت فرم‌های مختلف دیده می‌شود. اگر با ActionScript یا فلش از قبل آشنا هستید، Adobe Air گزینه خوبی برای شماست.

اگر یک اپ با UI زیاد تولید می‌کنید و می‌خواهید آن را تا حد زیادی شخصی‌سازی (Customize) کنید: در استفاده از چارچوب‌های Native شک نکنید، استفاده از چارچوب‌های خروجی همزمان در بسیاری موارد مانعی بر سر راه شما برای شخصی سازی المان‌های نمایشی و UI هستند.

اگر یک اپ با UI عادی اما حجم کد منطق و پردازشی زیاد تولید می‌کنید: استفاده از ابزارهای خروجی همزمان مانند Xamarin به شما کمک می‌کند که بخش هایی از نرم افزار که به دریافت، پردازش و نگهداری اطلاعات می‌پردازد را یک بار توسعه بدهید.

بخش پنهان و خاموش برنامه های موبایل را فراموش نکنیم!

بسیاری از بازی ها وبرنامه هایی که امروزه استفاده میکنیم، اطلاعات را در خود دستگاه ذخیره نمیکنند بلکه با یک ارتباط اینترنتی خدمات را ارایه میدهند و پشت صحنه‌ی آنها، یک سرور مرکزی برای جمع آوری، نگهداری و تحویل اطلاعات وجود دارد. این مقاله به تکنولوژی های مربوط به نوشتن برنامه‌ی موبایل یا Client پرداخته است، اما اگر سیستمی که به دنبال پیاده سازی آن هستید نیاز به بخش Server دارد، می‌بایست تکنولوژی های سمت وب از جمله PHP، ASP.NET و Ruby و یا Python را هم بررسی کنید که عموما برای تولید سرویس دهنده ها مورد استفاده قرار میگیرند.

علی نادعلیزاده

مدیر اجرایی در تاد - علاقه مند و دنبال کننده‌ی مسایل مربوط به تولید و نشر بازی‌ها، نرم افزارهای آزاد، کارگروهی و رهبری تیم

۹ Comments

  • هادی دعایی گفت:

    چقدر خوب و کامل بود. سوال هایی بود که هم برای من (که توسعه دهنده نیستم) هم پیش اومده بود وخیلی‌ها هم دیده بودم (مخصوصا مبتدی ها) که برای اینکه چه پلتفرمی رو انتخاب کنن سوال داشتن.

  • در تجربه ای هم که من با Xamarin داشتم، باید بگم که اگر چه از لحاظ زیر ساختی و مهندسی کار بسیار بزرگ و خوبی صورت دادن اما متاسفانه اکوسیستم زامارین هنوز خیلی ضعیف و نوپاست و نتوسته جامعه قوی ای رو حول خودش ایجاد کنه. در صورت پیشرفته شدن پروژه و بروز مشکل احتمالا به سختی بشه نتیجه خوبی رو در اینترنت پیدا کرد. کامپوننت ها و کتابخونه هایی که در اندروید توسعه داده شدن بسیار بسیار بیشتر از کتابخانه های آماده شده در زامارین هستن و این بدین معنی هست که خیلی جاها باید از نو چرخ رو اختراع کرد. اگر چه میشه از نظر فنی و تکنیکی کتابخونه های جاوایی رو در زامارین استفاده کرد اما این عمدتا کار خیلی زمانگیری میشه و با هر به روزرسانی کتابخونه اصلی (جاوایی) باید تغییرات رو در فایل های سی شارپ زامارین هم اعمال کرد. همچنین این موضوع وقتی که با کامپوننت های UI مربوط میشه خیلی آزاردهنده تر میشه.

    نکته بعدی هم اینکه اگر چه اپ ها در زامارین تحت پلتفرم دات نت توسعه داده میشن و این موجب “یکپارچگی زبانی” در کد ها میشه، اما تیم توسعه دهنده باید از تمامی مفاهیم سکوی توسعه (اندروید، آی او اس و ویندوز فون) به صورت جداگانه مطلع باشه. چرا که زامارین در هر کدام از این سکو ها از مفاهیم و کتابخانه های همین سکو ها استفاده می کنه. شعار زامارین این هست که شما می تونید نحوه استفاده از زامارین رو از خوندن مطالب آموزشی اندروید در سایت گوگل یاد بگیرید و نگاشت یک به یکی بین کلاس ها و معماری وجود داره. اما سوالی که پیش میاد این هست که اگر تیمی با اندروید آشنا هست و تیمی با آی او اس آشنا هست چرا باید پس از سی شارپ استفاده کنه؟ آیا وقتی که عمده منطق و سرویس ها در سمت سرور استفاده میشن، استفاده از زامارین برای تولید Shared Codebase به صرفه و مقدور هست؟

    اما با این حال فکر می کنم به طور کلی واسه اپ های ساده و سر راست در حال حاضر تجربه خوبی ارائه بده.

  • مهندس نرم افزار گفت:

    خیلی عالی، واقعا مختصر، مفید و حسابی بود.
    خیلی ممنون

  • جمال داشخانه گفت:

    باسلام خدمت شما جوانان موفق ایرانی
    بنده هم از این مطالب بصورت هدفمند استفاده کردم و با جرات میتونم بگم که خیلی کارتون درسته.
    آرزوی موفقیت های بیشتر برای تاد دارم.

  • افشین گفت:

    سلام،میشه لطفا بفرمایید آسان ترین راه برای تولید کتاب اندرویدی چیست؟چندین نرم افزار برای این کار بصورت رایگان هست اما کافه بازار آنها راقبول نمی کند،لطفا راهنمایی بفرمایید

    • علی نادعلیزاده گفت:

      افشین جان تابحال کتاب آندرویدی تولید نکردیم راستش، متاسفانه اطلاع ندارم.

  • آناهیتا گفت:

    میخام برنامه نویسی اندروید رو ب صورت حرفه ای یاد بگیرم .متاسفانه کلاس یا جزوه ای در شهرم نیست .باید چکار کنم ..تورو خدا خیلی خوب راهنماییم کنید .