نشریه دانشکده کامپیوتر دانشگاه صنعتی اصفهان
روش های توسعه اپ موبایل
به قلم سپهر گنجی ورودی ۹۷ کارشناسی مهندسی کامپیوتر صنعتی اصفهان
بازنگری شده توسط سنا محراب بیگی و رسول بوسعیدی
همونطور که میدونید بخش جدانشدنی زندگی همه ما تلفنهای همراهمونه! از صبح تا شب هرجا که باشیم از محل کار گرفته تا خونه و دانشگاه این وسیلههای کوچولوی دوست داشتنی با کلی اپ کاربردی و بازی همراهمون هستن.
سیستم عاملهای اندروید و iOS در حال حاضر محبوبترین و پرکاربردترین سیستم عاملها برای این گوشیها محسوب میشن. از سال 2007 که iOS عرضه شد و یک سال بعد اندروید هم به صورت رسمی توسط گوگل بهش پیوست یکی از بحثهای خیلی مهم و داغی که تا همین الان مطرحه توسعه اپلیکیشنهای کاربردی برای اونهاست.
توی این نوشته سعی میکنیم این راهها رو توضیح بدیم و معایب و مزایای هرکدوم رو بیان کنیم. (دقت کنید که این صحبتها ربطی به بازی سازی نداره و دنیای اون کلا جداست!)
۱.توسعه محلی یا بومی[1]
یکی از اولین کارهایی که انتظار میره هر شرکت پس از انتشار سیستم عاملش بکنه فراهم کردن یه محیط توسعه برنامه برای سیستم عاملشه. گوگل و اپل هم چون بچههای خوبی بودن هرکدوم محیطهای توسعه خاص خودشون رو معرفی کردن تا توسعه دهندهها بتونن برنامههای کاربردی رو برای این سیستم عاملها توسعه بدن.
اپل اومد و ایکس کد[2] رو معرفی کرد که برنامه نویسها می تونستن با زبان آبجکتیو-سی[3] توی اون کد بزنن. البته اپل بعدا توی سال 2014 زبان سوییفت[4] رو به عنوان زبان رسمی توسعه iOS معرفی کرد.
گوگل هم شروع به توسعه ابزارهای مورد نیاز مثل اسدیکی اندروید[5] کرد و با اضافه کردن یهسری ابزارها به محیط توسعه جاوا یعنی اکلیپس[6] ، محیط توسعه رو برای توسعه دهندهها آماده کرد. البته توی سال 2014 از محیط اختصاصی خودش به اسم اندروید استودیو رونمایی کرد و به تازگی هم زبان برنامهنویسی نوپای کاتلین[7] رو به عنوان زبان رسمی توسعه معرفی کرده.
از اینا که بگذریم میرسیم به اولین روش توسعه برای موبایل که روش نیتیو هست ؛ این روش یعنی با استفاده از ابزارها و زبانهای برنامهنویسی رسمی معرفی شده خود کمپانی سازنده سیستم عامل کار کنیم و برنامههای کاربردی خودمون رو توسعه بدیم.
مزایای توسعه نیتیو چیه؟
مهمترین مزیت این روش کارکرد عالی برنامه و دسترسی به تمامی امکانات و فیچرهای جدید سیستم عامله. طبیعیه که چون توسعه نیتیو بصورت مستقیم توسط کمپانی سازنده پشتیبانی میشه اگه قابلیت جدیدی به سیستم عامل اضافه بشه یا ویجت جدیدی رونمایی بشه توسعه دهندههای نیتیو میتونن بلافاصله از اونها توی برنامههای خودشون استفاده کنن. مزیت دیگهی این روش بالغ بودن اونه؛ یعنی اینکه یه جامعه بزرگی از توسعه دهندهها سالهاست که دارن از این بستر استفاده میکنن و حاصل اون کمتر شدن باگهای موجود و همچنین وجود منابع بسیار زیاد و انجمنها و پرسش و پاسخهای خیلی متنوع هست به طوری که میتونم بگم شما به هر مشکلی بخورید قبلا یه نفر اون رو یه جایی پرسیده و اون جامعه بزرگی که گفتم راه حل رو جلوی پاش قرار دادن! از مزیتهای دیگهای که میشه برای این روش نام برد وجود کتابخونههای گسترده و امن و همچنین سرعت بالای برنامههای نوشته شده با این روشه.
معایب توسعه نیتیو چیه؟
یکی از معایبی که به نظر خیلیا عیب وحشتناکی محسوب نمیشه پیچیده بودن توسعه نیتیو هستش. مثلا یه شخصی که تازه با برنامهنویسی آشنا شده بخواد سراغ توسعه نیتیو اندروید اونم با جاوا بره شاید تا چند ماه کلا نفهمه داره چیکار میکنه! ولی روشهای دیگه ای که در ادامه می بینیم نسبتا سادهتر هستن و برای شروع شاید مناسبتر و قابل فهمتر باشن. عیب دیگهای که برای این روش میشه نام برد اینه که اگه شما بخواید هم برای iOS و هم برای اندروید یک برنامه خاص رو بنویسید باید دو کد کاملا مجزا و متفاوت رو بنویسید. این باعث میشه که روند توسعه یکم کندتر باشه و هزینه و وقتی که میذارید هم بیشتر باشه.
۲.توسعه هیبریدی[8]
در سال 2009 میلادی شرکت نیتوبی[9] اومد و فونگپ[10] رو معرفی کرد. فونگپ یه فریمورک توسعه اپلیکیشن برای موبایله که با یه کد شما میتونید خروجیهای اندروید و آی او اس و ویندوزفون بگیرید! دو سال بعد شرکت ادوبی[11] نیتوبی رو خرید و بعدها اسم این فریمورک رو به کوردوا[12] تغییر داد. یکی از قابلیتهای خوبی که در سال 2012 بهش اضافه شد قابلیت کامپایلر ابری[13] بود؛ به این معنی که شما برای گرفتن خروجی iOS نیازی به داشتن مک ندارید و عملیات کامپایل رو میتونید به صورت آنلاین انجام بدید.
سوالی که شاید تا الان براتون پیش اومده باشه اینه که چجوری میشه با یه کد خروجی برای سیستم عاملهای مختلف گرفت؟ در جوابش باید بگم که شما کدهای وب که ترکیبی از HTML و CSS و جاوا اسکریپت[14] هستن رو مینویسید؛ کوردوا میاد و به کمک وبویو، صفحه طراحی شده شما رو توی سیستم عاملهای مختلف نشون میده. وبویو یه ویجته که وظیفش نشون دادن صفحههای وب توی اپلیکیشنه و یه ویجت کاملا نیتیو محسوب میشه. البته توسعه دهندههای هیبریدی خیلی سریع نیاز پیدا کردن که به امکانات خود گوشی مثل دوربین و سنسورها و ... هم دسترسی پیدا کنن که این مشکل رو هم کوردوا با یه پل محلی[15] حل کرد؛ همونطور که از اسمش پیداست، پل محلی یه پله که واسط بین برنامه هیبریدی ما و قابلیتهای محلی دستگاه قرار میگیره و به ما اجازه استفاده از اونها رو میده.
با گذشت زمان و پیشرفت تکنولوژی وب، فریمورکهای دیگهای هم مثل آیونیک[16] معرفی شدن و سعی کردن با معرفی ابزارهای جدید نقاط ضعف قبلیها رو پوشش بدن. بررسی اینکه چقد تونستن موفق بشن رو به مقالههای دیگه میسپاریم!
مزایای توسعه هیبریدی چیه؟
شما اگه توسعه دهنده وب باشید و بخواید خیلی سریع به دنیای تلفنهای هوشمند وارد بشید بدون نیاز به دانش برنامه نویسی اضافه میتونید این کار رو انجام بدید. کار کردن با این فریمورکها معمولا آسونه و مهمترین مزیتش اینه که شما وقت اضافی برای توسعه نمیذارید؛ بلکه فقط یک کد و چندین خروجی که کاملا شبیه هم هستن رو خواهید داشت (میتونیم بگیم دلیلی که فونگپ بخاطرش معرفی شد همین بود).
معایب توسعه هیبریدی چیه؟
یه درسی که همیشه باید توی زندگی بدونید اینه که هیچی بدون هزینه بدست نمیاد! اینکه شما یک کد مینویسید و توی سیستم عاملهای مختلف اجراش میکنید خیلی خوبه اما به چه قیمتی تموم میشه براتون؟ به قیمت کارکرد و سرعت برنامهها! خیلی طبیعیه برنامههای نیتیوی که توسط ابزارهای معرفی شده خود کمپانی سازنده معرفی میشن به مراتب سریعتر باشن و عملکرد بهتری داشته باشن؛ از اون طرف توسعه هیبریدی چون یه واسط سر راه برنامهها قرار داره عملکردش به خوبی نیتیو نیست. عیب دیگه این روش کامل نبودن دسترسی به قابلیتهای دستگاهه. اشاره کردم که با پل محلی میتونیم به بعضی امکانات دستگاه دسترسی داشته باشیم اما این دسترسی کامل نیست و بعضی قابلیتها حتی توسط پل هم قابل دسترسی نیستن!
۳.توسعه محلی چند پلتفرمی
انتخاب اسم این بخش خیلی کار سخت و طاقت فرسایی بود! همونطور که از اسمش پیداست(شایدم نیست!) این روش بین توسعه محلی و توسعه هیبریدی یه تعادلی رو برقرار کرده و با معرفی ابزارهای جدید سعی کرده مزیتهای جفتش رو داشته باشه در عین حال معایبشون رو هم پوشش بده.
اولین بار مایکروسافت این ایده رو مطرح کرد که بیایم و با یه کد چند خروجی داشته باشیم در عین حال بجای اجرای اون کد توی وبویو های آبکی، واقعا تبدیلش کنیم به کدها و کامپوننتهای نیتیو هر دستگاه! پس توی سال 2011 از فریمورکی به اسم زامارین[17] پرده برداشت. زامارین که با زبان برنامه نویسی سی شارپ کار میکنه به شما اجازه میده برنامه هاتون رو بصورت همزمان برای اندروید و iOS توسعه بدید.
در سال 2015 غول دیگه تکنولوژی یعنی فیسبوک اومد و از فریمورک خودش به اسم ریاکت نیتیو[18] پرده برداشت. ریاکت نیتیو بر پایه جاوا اسکریپت هستش و دقیقا مثل زامارین(شاید یکم بهتر!) سعی میکنه امکان توسعه اپ برای سیستم عاملهای اندروید وiOS به صورت محلی در عین حال همزمان رو به شما بده.
و در نهایت در اواخر سال 2017 شرکت گوگل با شعار «واسه من فریمورک کراسپلتفرم میزنید جوجهها؟؟! » از فلاتر رونمایی کرد. فلاتر با زبان برنامه نویسی دارت انقلابی رو در توسعه کراس پلتفرم ایجاد کرد. این فریمورک قدرتمند خیلی سریع تونست بین توسعه دهندهها جا خوش کنه و خودش رو به لیست 3 فریمورک محبوب توسعه کراسپلتفرم برسونه.
سه تا از معروفترین و مهمترین فریمورکهای توسعه کراس پلتفرم نیتیو رو براتون نام بردم حالا وقتشه بریم مزایا و معایب این روش رو به صورت کلی بررسی کنیم.
مزایای توسعه محلی چند پلتفرمی چیه؟
تمام مزایایی که برای توسعه هیبریدی گفتم رو میتونیم برای این روش نام ببریم. البته برای توسعه هیبریدی اشاره کردم که یه توسعه دهنده وب میتونه بدون دانش اضافه شروع به توسعه اپ برای موبایل کنه اما اینجا یکم قضیه فرق داره؛ برای پلتفرمهایی مثل زامارین یه توسعه دهنده سیشارپ میتونه اینکار رو انجام بده و الی آخر! از مزیت های توسعه نیتیو هم یه مقداریش رو به ارث برده البته؛ مثلا همین که کامپوننتها[19] به صورت محلی رندر میشن و خیلی سریعتر و بهتر از وب ویو میتونه عمل کنه. البته چون داریم به صورت کلی حرف میزنیم نمی تونیم بعضی از مزیتها رو بگیم مثلا فلاتر یهسری قابلیت برای دیباگ کردن برنامهها داره که روند توسعه رو به شکل چشم گیری سریع میکنه ولی این بحثها خیلی تخصصی و ریز میشه که جاش توی این مقاله نیست!
معایب توسعه محلی چند پلتفرمی چیه؟
درسته که گفتیم سرعت این روش از هیبریدی و وبویو بهتره ولی همچنان اپهایی که با روش نیتیو توسعه داده شدن یه سر و گردن از لحاظ کارکرد و سرعت بهترن. یکی دیگه از معایبش اینه که اکثر فریمورکهایی که موجوده فریمورکهای نسبتا جدید هستن و هنوز خیلی جای کار دارن و کتابخونهها و ابزارهایی هستن که هنوز پیاده سازی نشدن برای این فریمورکها. همچنین اگه قابلیت جدیدی به دستگاهها اضافه بشه بلافاصله قابل دسترسی نیستن بلکه توسعهدهندهها باید منتظر بمونن که شرکت سازنده فریمورک آپدیت مربوطه رو اعمال کنه و بعد ازش استفاده کنن.
تهش که چی؟
مثل تقریبا همه مقالههای مقایسهای که توی این زمینه وجود داره ما هم یه نسخه کلی نمیپیچیم! هر روش در جای خودش میتونه کاربرد خاص خودش رو داشته باشه بسته به مقیاس پروژه، هزینهای که میخواید صرف کنید و جامعه هدفتون میتونید روش خودتون رو انتخاب کنید.
من سعی کردم مقایسه جامعی بین همه گزینههای موجود براتون داشته باشم هرچند خیلی تکنولوژی بود که ازشون نام نبردم توی این مقاله مثل بیفورایکس[20]، برنامههای پیش رونده وب[21] و ... که میتونن توی دسته بندیهای بالا قرار بگیرن و هر کدوم معایب و مزایای خودشون رو داشته باشن.
]1 [Native
]2 [XCode
]3 [Objective-C
]4 [Swift
]5 [Android SDK
]6 [Eclipse
]7 [Kotlin
]8 [Hybrid
]9 [Nitobi
]10 [PhoneGap
]11 [Adobe
]12 [Cordova
]13 [Cloud Compiler
]14 [JavaScript
]15 [Native Bridge
]16 [Ionic
]17 [Xamarin
]18 [React Native
]19 [Components
]20 [B4X
]21 [Progressive Web Apps
مطلبی دیگر از این انتشارات
دستیاران صوتی و NLP
مطلبی دیگر از این انتشارات
حشرات صفر و یکی
مطلبی دیگر از این انتشارات
اتوبوس خط ۸ (نظریه بازیها و رفتارهای ما)