طراحی اپلیکیشن

نیتیو یا کراس پلتفرم

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

  • درس ۲ از ۸
  • مقدماتی
  • رایگان، بدون ثبت نام

دو ستون، بدون برنده

نیتیو

  • کاتلین برای اندروید و سوئیفت برای iOS
  • دو کد پایه، پس هر قابلیت دو بار
  • سقف کارایی و دسترسی کامل به سکو
  • هزینه نگهداری بالاتر، مخصوصا از سال دوم
  • وقتی گرافیک پیوسته یا کار مداوم با سخت افزار دارید

کراس پلتفرم

  • یک کد پایه مشترک بین اندروید و iOS
  • یک بار ساختن، یک بار تست، یک بار نگهداری
  • برای فهرست و فرم و محتوا به قدر کافی سریع
  • وابسته به لایه ای که قابلیت های سکو را بسته بندی می کند
  • وقتی تیم کوچک است و بودجه نگهداری محدود

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

آخرین بررسی: فکت ها و نام ابزارهای این درس در همین تاریخ با منابعشان بازبینی شده اند.

نیتیو و کراس پلتفرم دقیقا چه فرقی دارند؟

نیتیو یعنی برنامه را با ابزار و زبان خود همان سیستم عامل بنویسید. سند خود گوگل صریح است: از سال ۲۰۱۹ توسعه اندروید به شکل فزاینده ای کاتلین محور اعلام شده و همان صفحه توصیه می کند اگر می خواهید اپلیکیشن اندروید بسازید با کاتلین شروع کنید. طرف اپل هم سوئیفت است. نتیجه اش این است که یک اپلیکیشن روی دو سیستم عامل، دو برنامه جداست.

کراس پلتفرم یعنی یک کد پایه بنویسید و همان کد روی هر دو اجرا شود. دو خانواده رایج، دو راه متفاوت را می روند و همین تفاوت را باید فهمید. مستند React Native می گوید هنگام اجرا همان ویوهای متناظر اندروید و iOS را می سازد و چون کامپوننت هایش پشتشان همان ویوهای بومی است، ظاهر و حس و کارایی اپلیکیشن مثل هر اپلیکیشن دیگری است. فلاتر راه دیگری دارد و صفحه سکوهای پشتیبانی شده اش نشان می دهد دامنه اش از اندروید و iOS فراتر می رود و ویندوز و مک و لینوکس را هم شامل می شود.

پس دعوا سر «سرعت» نیست، سر این است که چند بار همان کار را انجام می دهید. تیمی که نیتیو کار می کند هر قابلیت را دو بار می سازد، دو بار تست می کند و دو بار نگه می دارد. تیمی که کراس پلتفرم کار می کند یک بار می سازد و هر جا سکو رفتار متفاوتی داشته باشد یک استثنا می نویسد. هزینه واقعی هر دو مسیر در همان جمله است.

دو مسیر قرمز و سبز که به یک مسیر آبی می رسند و یک تبلت شیشه ای در محل دوراهی

چهار چیزی که واقعا تصمیم را عوض می کند

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

اندازه و دانش تیم. این مهم ترین عامل است و کمتر از همه درباره اش حرف زده می شود. یک نفر که کاتلین بلد است، با کاتلین سریع تر و سالم تر جلو می رود تا با فریمورکی که تازه یاد می گیرد. دو نفر که باید هم اندروید و هم iOS را نگه دارند، با یک کد پایه مشترک نفس می کشند. سوال درست این نیست که کدام فناوری بهتر است، این است که فردا چه کسی این کد را باز می کند.

بودجه، مخصوصا بودجه سال دوم. هزینه اول ساخت است و هزینه ای که پروژه ها را می کشد نگهداری است. دو کد پایه یعنی هر تغییر کوچک دو بار، هر باگ دو بار و هر انتشار دو بار. اگر بودجه نگهداری برای یکی از این دو کافی نیست، تصمیم عملا گرفته شده.

رسیدن به هر دو فروشگاه. این همان چیزی است که در تبلیغ کراس پلتفرم بیشتر از همه تکرار می شود، و برای بازار ایران دقیقا همان چیزی است که باید از نو بررسی شود. بخش بعد به همین می پردازد.

سوالی که بیشتر از هر مقایسه فریمورکی تصمیم را می سازد

برنامه بیشتر وقتش را با گرافیک پیوسته یا سخت افزار می گذراند

بله

نیتیو ارزشش را دارد

  • بازی، ویرایشگر تصویر، رابط پرحرکت
  • استفاده زنده از دوربین یا سنسورها
  • ویجت و سرویس پس زمینه و یکپارچگی عمیق
خیر

کراس پلتفرم را انتخاب کنید

  • فهرست، فرم، جستجو، صفحه محتوا
  • ورود کاربر، سفارش، پیام، اعلان
  • تیم کوچک و بودجه نگهداری محدود

این سوال درباره کار برنامه است و نه درباره کیفیت فناوری ها. کراس پلتفرم کارهای سمت چپ را هم انجام می دهد، فقط با سقف پایین تر و با کد نیتیوی که باید کنارش بنویسید.

برای بازار ایران، «هر دو فروشگاه» یعنی چه؟

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

پس وقتی کسی «انتشار در هر دو فروشگاه» را به عنوان مزیت اصلی کراس پلتفرم می فروشد، برای بازار ایران باید سوال را عوض کرد. اپلیکیشن اندرویدی اینجا از کافه بازار و مایکت نصب می شود و گاهی هم مستقیم از یک فایل روی خود سایت، و نسخه iOS داستان جداگانه ای دارد. جزئیاتش کار درس انتشار همین مسیر است.

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

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

کجا کراس پلتفرم جواب نمی دهد

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

حالت چهارم فنی تر است و بیشتر از سه تای دیگر پروژه ها را غافلگیر می کند. کراس پلتفرم به لایه ای وابسته است که قابلیت های سکو را برایش بسته بندی می کند. تا وقتی آن بسته بندی وجود دارد همه چیز خوب است. لحظه ای که قابلیتی تازه یا کم استفاده لازم شود و بسته بندی اش نباشد، باید همان تکه را نیتیو بنویسید، یک بار برای اندروید و یک بار برای iOS. آن وقت به جای یک کد پایه، سه تا دارید. این هزینه در برآورد اولیه هیچ وقت نوشته نمی شود.

و یک حالت پنجم که فنی نیست: تیمی که فقط نیتیو بلد است و قرار نیست عوض شود. یادگیری یک استک تازه وسط یک پروژه واقعی هزینه ای است که معمولا از صرفه جویی همان استک بیشتر می شود.

قبل از انتخاب استک، این پنج سوال را جواب بدهید

کاربر شما اپلیکیشن را از کجا نصب می کند؟ اپلیکیشن بیشتر وقتش را با چه چیزی می گذراند، محتوا و فرم یا دوربین و گرافیک؟ سال دوم چه کسی نگهش می دارد؟ اگر فردا نسخه iOS لازم شود بودجه اش هست؟ و تیم امروز واقعا چه بلد است؟

پنج جواب را که کنار هم بگذارید تصمیم معمولا خودش را نشان می دهد و لازم نیست کسی برایتان بگیردش. چیزی که نباید بکنید این است که از فهرست مقایسه فریمورک ها شروع کنید؛ آن فهرست ها همه درست اند و هیچ کدام درباره پروژه شما نیستند.

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

کدام سوال جواب را عوض می کند و کدام فقط وقت می گیرد

ستون دوم مهم تر است. بیشتر جلسه هایی که بی نتیجه تمام می شوند، تمام وقتشان را روی همان ستون گذاشته اند.

برگه تصمیم استکقبل از جلسه فنی

این سوال ها تصمیم را عوض می کنند

  • کاربر اپلیکیشن را از کجا نصب می کند
  • برنامه بیشتر وقتش را با چه چیزی می گذراند
  • سال دوم چه کسی این کد را باز می کند
  • نسخه iOS یک برنامه واقعی است یا یک جمله

این سوال ها فقط وقت می گیرند

  • کدام فریمورک محبوب تر است
  • کدام در بنچمارک های اینترنت سریع تر بود
  • شرکت های بزرگ از کدام استفاده می کنند
  • کدام آینده بهتری دارد

سوال های ستون دوم غلط نیستند، فقط جوابشان تصمیم شما را جا به جا نمی کند. اگر پروژه ای دارید که یکی از آنها واقعا تعیین کننده است، همان یکی به ستون اول منتقل می شود.

مسیر سریع با هوش مصنوعی

مدل ها در جواب دادن به «نیتیو یا کراس پلتفرم» بد نیستند، افتضاح اند: هر کدام یک توصیه مطمئن می دهند که از حجم نوشته های اینترنت درباره آن فناوری می آید و نه از پروژه شما. کاری که واقعا جواب می دهد این است که سوال را عوض کنید. به جای خواستن یک توصیه، از مدل بخواهید تصمیم را قابل ابطال کند.

  1. به جای «کدام بهتر است»، محدودیت های واقعی پروژه را بنویسید: تعداد نفرات تیم و آنچه بلدند، بودجه نگهداری سال دوم، اینکه کاربر از کجا نصب می کند، و کاری که برنامه بیشتر وقتش را با آن می گذراند.
  2. یک مدل کلاس قضاوت بردارید و نسخه پایین را بدهید. مدل سریع و ارزان برای کارهای مکانیکی و انبوه است و این کار هیچ کدام نیست.
  3. مهم ترین بخش خروجی، توصیه نیست؛ فهرست سه واقعیتی است که اگر عوض شوند جواب برعکس می شود. آن فهرست را بردارید و ببینید کدامشان درباره پروژه شما اصلا معلوم نیست. همان ها کار امروزتان اند.
  4. همان نسخه را یک بار دیگر با ترتیب برعکس گزینه ها اجرا کنید. اگر توصیه عوض شد، جواب مدل به ترتیب نوشتن شما وابسته بوده و نه به پروژه، و باید دورش انداخت.

نسخه آماده کپی

نقش: مشاور فنی که قرار است تصمیم را قابل ابطال کند، نه اینکه نظر بدهد.

پروژه:
کاری که برنامه انجام می دهد: {توضیح در دو جمله}
جایی که کاربر از آن نصب می کند: {فروشگاه یا فایل مستقیم}
تیم: {تعداد نفر} نفر، بلدند: {فناوری ها}
بودجه نگهداری سال دوم: {کم / متوسط / زیاد}
نسخه iOS: {برنامه قطعی است / فقط یک احتمال است / لازم نیست}

خروجی را دقیقا در چهار بخش بده:
۱. توصیه: نیتیو یا کراس پلتفرم، در یک جمله، بدون توضیح.
۲. سه واقعیتی که اگر عوض شوند این توصیه برعکس می شود. هر کدام یک جمله.
۳. چیزهایی که درباره این پروژه نمی دانی و برای تصمیم لازم اند.
۴. سوالی که باید از تیم بپرسم و هنوز نپرسیده ام.

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

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

هوش مصنوعی در این کار

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

ابزارهایی که واقعا کمک می کنند

  • Claude برای همان صورت جلسه چهار بخشی نسخه بالا مناسب است، مخصوصا برای بخش سوم که باید بگوید چه چیزی را نمی داند. ایران در هیچ کدام از دو فهرست کشورهای پشتیبانی شده انتروپیک نیست؛ این را از صفحه خودشان خوانده ایم و نه از تست شبکه.
  • NotebookLM وقتی سوال این است که سند رسمی یک فریمورک دقیقا چه گفته، این ابزار بهتر از یک گفتگوی معمولی است چون فقط از منبعی که خودتان داده اید جواب می دهد. صفحه سکوهای پشتیبانی شده فلاتر و سند کامپوننت های React Native را همین طور می شود کنار هم گذاشت. راهنمای خود گوگل می گوید در همان مناطقی کار می کند که اپ جمنای کار می کند و ایران در آن فهرست نیست.
  • Gemini برای دنبال کردن سندهای بلند اندروید و اپل که مدام عوض می شوند مناسب است. همین درس هم جمله کاتلین محور بودن را از سند رسمی اندروید گرفته و نه از خلاصه کسی. صفحه خود گوگل می گوید اپ وب جمنای در بیش از دویست و سی کشور و منطقه کار می کند و ایران در آن فهرست نیست.

کجا نتیجه معکوس می دهد

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

منبع ها: Anthropic: reduce hallucinations Anthropic: supported countries Google: where the Gemini web app is available

حد این توصیه

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

از تجربه خود ما

درس اول همین مسیر روی همین سرور اندازه گرفت که API خودمان برای یک صفحه فهرست ده ردیفی به شکل پیش فرض ۴۰۳٬۱۵۲ بایت برمی گرداند و با نام بردن چهار فیلد لازم ۳٬۷۸۰ بایت، و اولین بایتش با هدرهای x-flying-press-cache: MISS و cf-cache-status: DYNAMIC یعنی بدون هیچ کشی می آید. هیچ کدام از این عددها با انتخاب فریمورک روی گوشی تکان نمی خورد. برای بیشتر اپلیکیشن های کسب و کارهای کوچک، همین است که سرعت را تعیین می کند و نه چیزی که این صفحه درباره اش است. نکته دوم درباره خود ماست و قابل بررسی: صفحه خدمات ما از قبل نوشتن این درس همین موضع را در ملا عام گرفته، که برای اپلیکیشن محتوا و فرم کراس پلتفرم انتخاب منطقی تری است و گران ترین گزینه را پیش فرض پیشنهاد نمی کنیم. اینجا نوشتنش تبلیغ نیست؛ برای این است که بشود دید وقتی می فروشیم و وقتی درس می دهیم یک حرف می زنیم یا دو حرف.

سوال هایی که واقعا پرسیده می شوند

کراس پلتفرم یعنی اپلیکیشن کند می شود؟

برای فهرست و فرم و صفحه محتوا نه، و کاربر تفاوتی نمی بیند. مستند React Native می گوید کامپوننت هایش پشتشان همان ویوهای بومی اندروید و iOS است و برای همین ظاهر و حس و کارایی مثل هر اپلیکیشن دیگری است. سقف آنجا خودش را نشان می دهد که کار پیوسته و سنگین باشد، مثل بازی یا پردازش زنده تصویر.

اگر بعدا پشیمان شدم، می شود از کراس پلتفرم به نیتیو رفت؟

می شود، ولی رابط را دوباره باید نوشت و همان بخش گران ترین قسمت کار است. چیزی که منتقل می شود برنامه پشتی و قرارداد API است، به شرط اینکه از اول درست از هم جدا شده باشند. به همین دلیل ارزش دارد که منطق را داخل کد رابط پنهان نکنید، هر استکی که انتخاب کنید.

برای انتشار در فروشگاه های ایرانی این تصمیم فرقی می کند؟

خروجی هر دو مسیر یک بسته اندروید است، پس از این نظر فرقی نمی کند. چیزی که فرق می کند این است که اگر عملا فقط اندروید منتشر می کنید، صرفه اصلی کراس پلتفرم که یک کد پایه برای دو سکوست از بین می رود. جزئیات خود انتشار کار درس انتشار همین مسیر است.