Kotlin Multiplatform Mobile یک کد برای اندروید و iOS!

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

با توجه به تجربه‌ای طولانی در عرصه برنامه‌نویسی و مواجهه با چالش‌های گوناگون، به این نکته پی بردیم که نبود منابع آموزشی کاربردی و عمیق در سطح حرفه‌ای، یکی از موانع اصلی رشد برنامه‌نویسان در کشورمان است. از این رو، ما در باگتو تصمیم گرفتیم تا با ارائه دوره‌های آموزشی جامع و متنوع در زمینه‌های مختلف .NET، گامی مؤثر در جهت افزایش کیفیت مهارت‌های فنی برنامه‌نویسان و بهبود استانداردهای نرم‌افزاری ایرانی برداریم. اندروید از قبل ابزارهایی دارد که از طریق کامپوننت‌های Architecture ساخته شده‌اند، لذا از آن‌ها استفاده می‌کنیم. برای این که BaseViewModel بتوانید تغییرات داده‌ها را به view انتشار دهید، می‌توانید از Flow کوروتین استفاده کنید. این لایه می‌تواند شامل هر چیزی باشد که با داده‌ها کار می‌کند. لایه Data جایی است که داده‌ها را برای اپلیکیشن خود دریافت و یا ذخیره می‌کنیم.

بنابراین اگر این زبان را هنوز یاد نگرفته‌اید، می‌توانید از دوره‌های استک لرن استفاده نمایید. Kotlin Multiplatform Mobile به شما امکان می دهد از یک codebase برای businesslogic برنامه های iOS و Android استفاده کنید. اشتراک کد بین سیستم عامل های تلفن همراه یکی از موارد مهم استفاده از Multiplatform کاتلین است. با استفاده از Kotlin Multiplatform Mobile (KMM) می توانید کدهای مشترک برنامه های multiplatform مانند businesslogic، connectivity و موارد دیگر را بین Android و iOS ایجاد کنید. برای بیشینه‌سازی اشتراک کد بین اندروید و iOS، همه چیزهایی را که امکان اشتراک دارند به اشتراک می‌گذاریم. این موارد شامل لایه داده برای شبکه‌بندی و کَش کردن (Cashing)، لایه دامنه (Domain) برای منطق تجاری و بخشی از لایه ارائه است که می‌تواند شامل منطق اپلیکیشن باشد.

برای یادگیری کاتلین مولتی پلتفرم موبایل، باید برنامه‌نویسی اندروید را یاد بگیرید. بنابراین اگر یک توسعه دهنده اندروید نیستید، پیشنهاد می‌کنیم از دوره‌های استک لرن برای آموزش برنامه‌نویسی اندروید استفاده کنید. پس از الهام گرفتن از KotlinConf، تصمیم گرفتم برای اولین بار Kotlin Multiplatform (KMP) را امتحان کنم و یک اپلیکیشن با این فناوری بسازم. KMP یک فناوری توسعه یافته توسط JetBrains است که به توسعه دهندگان اجازه می دهد با استفاده از زبان برنامه نویسی Kotlin برای پلتفرم های مختلف کد بنویسند. هدف اصلی کاهش تکرار کد و افزایش بهره‌وری با به اشتراک گذاشتن منطق تجاری در چندین پلتفرم است، در حالی که همچنان انعطاف‌پذیری برای پیاده‌سازی‌های پلتفرم خاص در صورت نیاز فراهم می‌کند.

در کد فوق صرفاً مدل داده‌ها برای موجودیت را به اشتراک می‌گذاریم. بدین ترتیب کلاس می‌تواند از JSON و به آن serialize و deserialize شود. با توجه به این که کاتلین به این هدف‌ها کامپایل می‌شود، می‌توانیم کد کاتلین را یک بار بنویسیم و آن کد را برای هدف خاصی که نیاز داریم کامپایل کنیم و خروجی صحیحی برای استفاده روی پلتفرم مقصد به دست آوریم. برای خواندن اطلاعات بیشتر در این رابطه می‌توانید پست "کاتلین چند پلتفرمی برای موبایل (KMM) چیست؟" را بررسی کنید. طی 4 سال اخیر کاتلین کاملا زبان جاوا را کنار زده و زبان اول برنامه نویسی اندروید محسوب میشود.

در پروژه‌های KMM یک ماژول به نام Shared Code وجود دارد که کد‌های مشترک (مانند مدل‌ها، کلاس‌ها و دیتا کلاس‌ها) هر دو سیستم عامل در این قسمت قرار می‌گیرند. سپس برای هر کدام از اپلیکیشن‌های اندروید و iOS یک ماژول به همین نام‌ها وجود دارد که باید کد‌های نیتیو را در آنجا نوشت. در این مقاله تنها قصد من این بود که شما را با کاتلین مولتی پلتفرم آشنا کرده باشم و اطلاعات کافی در مورد آن را در اختیار شما گذاشته باشم، از این که تا به این جای مقاله با من همراه بودید سپاسگزارم❤. توضیحاتی که در بالا داشتیم می تواند پاسخ مناسبی هم برای سوال kmm چیست؟ باشند، چرا که kmm همان مخفف عبارت انگلیسی کاتلین مولتی پلتفرم است. در این مقاله از کاتلین چند پلتفرمی استفاده کردیم تا کد را بین اندروید و iOS به اشتراک بگذاریم. همچنین از کتابخانه‌های چند پلتفرمی مانند Ktor fvhd networking Serialization برای تجزیه JSON و از کوروتین‌ها برای وظایف ناهمگام بهره گرفتیم.

تفاوت کلیدی آن با دیگر ابزارهای چند پلتفرمی ‌این است که همه کدها را به صورت کد خاص پلتفرم کامپایل نمی‌کند. به جای آن کنترل کاملی روی آن چه که به اشتراک گذاشته خواهد شد و آن چه که native خواهد بود به دست می‌آوریم. به طور کلی عموماً منطق تجاری به اشتراک درمی‌آید و UI به صورت native پلتفرم عرضه می‌شود تا تجربه کاربری طبیعی‌تری به دست آید. بدین ترتیب می‌توانیم از مزیت نوشتن اپلیکیشن‌های چند پلتفرمی بهره‌مند شویم و همزمان از محدودیت‌هایی که معمولاً در این مسیر وجود دارد، مانند فقدان انعطاف‌پذیری در نوشتن کد خاص پلتفرم نیز اجتناب کنیم. با این ساختار، می‌توانید از همان کلاس داده «Product» و رابط «ProductApi» در برنامه‌های اندروید و iOS خود استفاده کنید.

به طور کلی، Kotlin Multiplatform ابزاری قدرتمند برای توسعه دهندگانی است که می خواهند یک بار کد بنویسند. و آن را بر روی چندین پلتفرم اجرا کنند، در حالی که همچنان می توانند از ویژگی ها و بهینه سازی های خاص پلتفرم استفاده کنند. همانطور که در مقاله قبل توضیح دادیم، Kotlin Multiplatform Mobile یک SDK بر اساس KMP برای توسعه همزمان اپلیکیشن Android و iOS است و می‌توان با آن منطق را بین هر دو پلتفرم به اشتراک گذاشت. به کمک KMM می‌توانید کد‌های مشترک را در یک ماژول Shared قرار دهید و از آن برای اشتراک کد بین هر دو اپلیکیشن استفاده کنید. قسمت اندروید پروژه از کامپایلر Kotlin/JVM برای ساخت خروجی استفاده می‌کند و بخش iOS پروژه از کامپایلر Kotlin/Native استفاده می‌کند.

دسترسی به API پلتفرم با استفاده از مکانیسم expect/actual (+) انجام می‌شود. در این مقاله اقدام به ماژول‌بندی پروژه چند پلتفرمی کاتلین به صورت یک مبدل ارزی برای iOS و اندروید می‌کنیم که دارای چند ماژول مشترک است. توجه کنید که پروژه‌های چند پلتفرمی کاتلین در کاتلین 1.2 و 1.3 هنوز در مرحله آزمایشی قرار دارند و خالی از اشکال نیستند. در این مقاله ، شما می خواهید یک برنامه ساده  hello world بسازید که در Android و IOS با یک کد و با استفاده از زبان برنامه نویسی کاتلین اجرا می شود. CommonMain جایی است که کد اشتراکی را قرار می‌دهیم و androidMain و iosMain جایی است که کد پلتفرم در صورت نیاز در آن جای می‌گیرد. فریمورک‌های موجود که برشمردیم همگی خوب هستند، شکی نیست که کارشان را به خوبی انجام می‌دهند اما با این حل شما را ملزم می‌سازند که همه کدهای موجود را بازنویسی کرده و به دنیای آن‌ها ببرید.

این برنامه خود یک برنامه ارز ساده است که داده ای را از یک API شخص ثالث واکشی می کند و آن داده ها را به صورت محلی ذخیره می کند. این برنامه حتی بدون اتصال به اینترنت نیز قادر به کار خواهد بود. ماژول iOS به صورت یک فریمورک پکیج شده است و در حال حاضر نمی‌توان بیش از یک فریمورک Kotlin Multiplatform در پروژه iOS ایمپورت کرد. این وضعیت با رویکرد چند ماژول که در این مقاله مطرح کردیم چندان سازگار نیست. به عنوان راه‌حل می‌توان یک ماژول ios-configuration module جدید اضافه کرد تا وابستگی‌های iOS در آن قرار گیرند.

بنابراین به کمک قابلیت‌های این زبان مدرن، می‌توانید با سرعت بیشتر و در زمان کمتری اپلیکیشن‌های نیتیو (بومی) بسازید. در سال‌های اخیر بحث تکنولوژی‌های توسعه کراس پلتفرم اپلیکیشن‌های موبایل بسیار داغ شده است. همانطور که احتمالا هم می‌دانید، فلاتر (Flutter) از گوگل و React Native از متا، توانسته‌اند موفقیت چشمگیری در توسعه اپلیکیشن‌های موبایل بدست آورند. اگر شما هم به توسعه اپلیکیشن‌های موبایل علاقه داشته باشید، حتما به یادگیری فلاتر یا یادگیری React Native فکر کرده‌اید و یا در حال یادگیری یکی از این تکنولوژی‌ها هستید. Kotlin Multiplatform امکان اشتراک کد را بین پلتفرم‌های مختلف فراهم می‌سازد.

بدین ترتیب می‌توانیم به سادگی پیاده‌سازی آن‌ها را بدون تغییر دادن منطق مرکزی تغییر دهیم. Kotlin Multiplatform (KMP) یکی از قابلیت‌های زبان Kotlin است که به برنامه‌نویسان اجازه می‌دهد کدهای مشترکی را برای چند پلتفرم بنویسند. بخش‌های خاص هر پلتفرم مانند رابط کاربری یا سخت‌افزار همچنان باید به‌طور جداگانه نوشته شوند، اما منطق برنامه می‌تواند یکسان باشد و در هر پلتفرم اجرا شود. در این مقاله قصد داریم در خصوص اشتراک کد بین اندروید و iOS با استفاده از امکانات چند پلتفرمی کاتلین صحبت کنیم. برای مطالعه این راهنما لزومی ندارد حتماً دانش توسعه اندروید داشته یا آموزش برنامه نویسی iOS دیده باشید، اما اگر چنین دانشی داشته باشید، سریع‌تر موضوع را درک خواهید کرد.

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

هم اکنون می‌توانیم از این کد در هر دو پلتفرم اندروید و iOS بهره بگیریم. اپلیکیشن‌های اندروید و iOS به طور معمول زمانی که آن‌ها را به کارکردهایشان تجزیه کنیم، ماهیت یکسانی می‌یابند، اما در هر حال مجبور هستیم آن‌ها را در زبان‌ها و با ابزارهای مختلفی بنویسیم تا بتوانیم روی پلتفرم مربوطه اجرا کنیم. برای حل این مشکل فناوری‌های چند پلتفرمی مختلفی مانند React Native و Flutter معرفی شده‌اند که دو مورد از مهم‌ترین فریمورک‌های چند پلتفرمی مهم محسوب می‌شوند. اگر به دنبال آموزش اصولی و کامل برای زبان برنامه نویسی کاتلین هستید به هیچ عنوان دوره ی نخبگان معماری اندروید آکادمی نوری را از دست ندهید. هنوز هیچ IDE منفردی ارائه نشده است که در آن بتوان یک اپلیکیشن چند پلتفرمی مورد پشتیبانی Kotlin Multiplatform نوشت.

در اغلب موارد صرفاً کدی می‌نویسیم و به کاتلین اجازه می‌دهیم که آن را به هدف مورد نظر کامپایل کند، اما اگر چیزی باشد که کاتلین نشناسد چطور؟ فرض کنید می‌خواهید مقداری را روی اپلیکیشنتان ذخیره کنید. در اندروید می‌توانید این کار را با استفاده از SharedPreferences انجام دهید. کاتلین تنها می‌داند که کد کاتلین به پلتفرم‌های مختلفی کامپایل می‌شود، اما می‌توانید با استفاده از مکانیسم expect/actual کاتلین را از این موضوع آگاه سازید. در نوری آکادمی هدف ما اینه که برنامه نویسی اندروید با زبان کاتلین رو کاملا اصولی و حرفه ای بهت آموزش بدیم، به طوری که کاملا برای بازار کار آماده بشی و از این دنیا حرفه ای لذت ببری. برای اندروید با روش ها و زبان های مختلفی میتوان برنامه نویسی کرد که زبان های جاوا و کاتلین جز زبان های بومی (یا Native) برای این سیستم عامل محسوب میشوند.

علاوه بر این، Kotlin Multiplatform به شما اجازه می‌دهد منطق تجاری را در سراسر اندروید، iOS، دسکتاپ و وب به اشتراک بگذارید که می‌تواند یک مزیت بزرگ باشد اگر شما از قبل از Kotlin استفاده می‌کنید. از آنجایی که به پلتفرم بومی نزدیک‌تر است، ادغام با ویژگی‌های خاص پلتفرم (مانند کتابخانه‌های Jetpack اندروید یا APIهای خاص iOS) ساده‌تر است. شما می‌توانید مستقیماً APIهای پلتفرم را از کد Compose خود فراخوانی کنید. بلوک plugins اعلام می‌کند که این یک کتابخانه اندروید و یک پروژه چند پلتفرمی است. بدین ترتیب می‌توانیم هم Multiplatform و هم Android را پیکربندی کنیم.

Kotlin Multiplatform Mobile از قابلیت‌های چند پلتفرمی Kotlin استفاده می‌کند و ابزارهایی را برای توسعه تلفن همراه بین پلتفرمی در Android Studio IDE، با یک افزونه در دسترس برای IDE. دستورالعمل‌های شروع کار با Kotlin Multiplatform Mobile را می‌توانید در kotlinlang.org پیدا کنید. در طول مرحله آزمایشی فناوری، تیم Kotlin رویکردهای مختلفی را برای کتابخانه‌ها، پیکربندی پروژه و مدیریت حافظه در تلاش برای ارائه بهترین تجربه توسعه انجام داد. پذیرندگان اولیه شامل شرکت هایی مانند VMware، Netflix، و Philips بودند. معماری خاصی که در این مثال دنبال می‌کنیم، «معماری شش‌گوشه» (Hexagonal architecture) نام دارد که گاهی به صورت «پورت و آداپتر» نیز نامیده می‌شود. معماری شش‌گوشه با قرار دادن ورودی‌ها و خروجی در لبه طراحی، منطق اصلی اپلیکیشن را از دغدغه‌های بیرونی جدا می‌کند.

مسئله‌ای که در مقایسه با فلاتر وجود دارد این است که سرعت توسعه اپلیکیشن در روش KMM به Flutter نمی‌رسد و فلاتر برای توسعه اپلیکیشن‌های کوچک کاربرد بیشتری دارد. JetBrains گفت که در مسیر پایدار شدن، SDK تلفن همراه Kotlin مزایای توسعه بین پلتفرمی و بومی را ترکیب می کند. توسعه دهندگان می توانند یک پایگاه کد مشترک برای شبکه، ذخیره سازی داده ها، و تجزیه و تحلیل، همراه با منطق دیگر برای برنامه های Android و iOS داشته باشند. APIهای بومی را می‌توان برای دستگاه‌های iOS و Android پیاده‌سازی کرد و کدهای مخصوص پلتفرم را در صورت نیاز نوشت. فارغ التحصیلی به مرحله بتا، که JetBrains در ۹ اکتبر اعلام کرد، به این معنی است که این فناوری تقریباً به پایان رسیده است و استفاده از آن در پروژه‌ها ایمن است. اما ممکن است یک مورد را همچنان بررسی نکرده باشید و آن را نشناخته باشید!

Kotlin Multiplatform بسیار نویدبخش است و با ارائه نسخه 1.4 کاتلین انتظار می‌رود شاهد عرضه موارد جدیدی از این فناوری باشیم. بدین ترتیب پیکربندی‌ها قلاب می‌شوند و می‌توانید از کد اشترکی در iOS نیز استفاده کنید. همچنین فریمورک و ارجاعی ایجاد می‌شود، اما همه کار از طریق cocoapods انجام می‌یابد. پس از انجام این کارها اینک می‌توانیم آن را در یک ViewController ایمپورت کنیم. بدین ترتیب آن چه ارائه خواهد شد و همچنین ورودی‌ها و تعامل‌های کاربر مدیریت می‌شوند. فریم ورک های مختلفی در زمینه ی برنامه نویسی بصورت مولتی پلتفرم تا به حال داشته ایم، چندین نمونه از آن ها را در ادامه خواهیم داشت.

Kotlin Multiplatform یک ابزار قدرتمند برای توسعه‌دهندگانی است که می‌خواهند همزمان برای اندروید و iOS کدنویسی کنند. این قابلیت، با وجود چالش‌های موجود، می‌تواند به صرفه‌جویی در زمان و هزینه‌ها کمک کند و توسعه اپلیکیشن‌های مقیاس‌پذیر و کارآمد را تسهیل کند. متغیر client به مقداردهی HttpClient بر مبنای موتور مورد استفاده (اندروید/iOS) می‌پردازد. همچنین از آن استفاده می‌کنیم تا بتوانیم JSON را با استفاده از KotlinxSerializer تجزیه کنیم و سریالایزر را برای آیتم خود ثبت نماییم. بدین ترتیب Ktor شیوه تجزیه یک آیتم را از یک رشته JSON می‌داند. پس از این که این موارد را راه‌اندازی کردیم، اینک صرفاً می‌توانیم از کلاینت استفاده و درخواست‌هایی مانند client.get، client.post و غیره از طریق آن اجرا کنیم.

بدین ترتیب می‌بایست مهندسان مجدداً آموزش ببینند و سپس با فریمورک جدید مأنوس شوند. آن‌ها صرفاً کار را به جای شما انجام می‌دهند، اگر بخواهید کاری را در سطح نیتیو انجام دهید، قادر نخواهید بود، زیرا در اغلب موارد محدود به آن چیزی هستید که فریمورک در اختیارتان قرار می‌دهد. همانطور که احتمالا می‌دانید، Xcode محیط توسعه اپلیکیشن برای iOS است. در اندروید استودیو نسخه ویندوزی می‌توان پروژه KMM ساخت اما فقط می‌توان قسمت اندروید را برنامه‌نویسی کرد و برای iOS نمی‌توان از ویندوز استفاده کرد. همین محدودیت در فلاتر و ری‌اکت نیتیو نیز وجود دارد و این به دلیل نصب نشدن Xcode بر روی ویندوز است و ارتباطی با KMM ندارد.

در واقع این دو کامپایلر بخش‌هایی از KMP هستند که این SDK از هر کدام برای ساخت خروجی متناسب با پلتفرم هدف استفاده می‌کند. بزرگترین مشکل فلاتر این است که ممکن است برخی پلاگین‌هایی که بیشتر با محیط Native آن پلتفرم در ارتباط هستند، وجود نداشته باشند و نیاز است که پلاگین‌ها توسط جامعه برنامه‌نویسان فلاتر نوشته شود. این یک ضعف بزرگ است زیرا به جامعه (Community) برنامه‌نویسان خود متکی است و باید پلاگین‌ها در محیط نیتیو (Native) برای فلاتر توسط افرادی توسعه داده شود وگرنه به مشکل خواهید خورد. همچنین مسئله دومی که آزار دهنده است، استفاده از زبان برنامه‌نویسی دارت (Dart) برای توسعه اپلیکیشن است. متاسفانه این زبان نسبت به زبان مدرنی مانند کاتلین امکانات بسیار کمتری را در اختیار توسعه دهنده قرار می‌دهد. بنابراین در مقایسه دو زبان کاتلین (Kotlin) یا دارت (Dart) قطعا کاتلین بهتر است.

من متوجه شدم که حتی اگر یک دوره دانش جامعی در مورد شبکه با Ktor ارائه می‌دهد، اما آن را با معماری تمیز، تزریق وابستگی یا یک DB محلی با SQL Delight ترکیب نمی‌کند. و چون دوره دیگری در مورد SQL Delight گسترده بود، بقیه بهترین روش ها موجود نیست. پس از خرید دوره‌ها، خواندن مقالات و انجمن‌ها ، بهترین روش‌های KMP را در یک دوره واحد ترکیب کردم تا یک برنامه تولید واقعی را با هم بسازم. رویکرد من این است که یک برنامه کاربردی با هم بسازم که بتوان آن را کپی کرد و در کار واقعی خود استفاده کرد. Kotlin Multiplatform اکنون پایدار و آماده برای استفاده در برنامه های سطح تولید اندروید در نظر گرفته شده است. برخلاف سایر برنامه‌های کاربردی چند پلتفرمی با KMP، می‌توانید مزایای راه‌حل‌های بومی و چند پلتفرمی را حذف کنید.

یکی از مزیت‌های KMM طراحی رابط کاربری (UI) به صورت کاملا بومی است. در اندروید برای طراحی رابط کاربری می‌توانید از لایه‌های XML کمک بگیرید و یا از Jetpack Compose استفاده کنید. برای iOS باید از SwiftUI برای طراحی رابط کاربری استفاده نمایید. بنابراین یادگیری SwiftUI که به زبان Swift است، الزامی خواهد بود. قبل از شروع آموزش KMM، باید با زبان برنامه‌نویسی کاتلین آشنا باشید.

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

بنابراین در این مسیر باید به صورت مداوم از IDEA به اندروید استودیو، به Xcode و غیره جابجا شوید. پیکربندی gradle برای ماژول‌های مشترک چندان سرراست نیست و برخی بخش‌ها باید به صورت دستی انجام شود. عیب بزرگ‌تر این است که Kotlin Multiplatform هنوز یک محصول تمام نشده محسوب نمی‌شود و تا آن زمان می‌توان تصور کرد که issue-های build دیگری در نسخه‌های بعدی ظاهر شوند. با این حال بررسی آن جهت آماده شدن برای آینده در حالت آزمایشی ارزشش را دارد. این قابلیت به وسیله کتابخانه استاندارد کاتلین (+) برای نوشتن ماژول و سپس کامپایل کردن کد به پلتفرم‌های مقصد مختلف مانند JVM ،JS و Native فراهم شده است. این بدان معنی است که Kotlin/JVM یا هر کد جاوا یا جاوا اسکریپت دیگر نمی‌تواند برای نوشتن کد مشترک مورد استفاده قرار گیرد.

خوشبختانه استفاده از کد اشتراکی در اندروید کاملاً آسان است، زیرا یک پروژه Gradle نیز محسوب می‌شود. کافی است آن را به عنوان یک وابستگی در پیکربندی Gradle پروژه اندروید اضافه کنید. «تابع‌های تعلیقی» (Suspending functions) به ObjC کامپایل نمی‌شوند و از این رو نمی‌توانیم از آن‌ها روی iOS بهره بگیریم، اما به لطف CFlow از KotlinConf می‌توانیم این کار را انجام دهیم. در پاسخ به سوال کاتلین یا فلاتر باید نیاز‌های خود را بررسی کنیم. هر دو تکنولوژی کاتلین و فلاتر در بحث کارایی و پرفورمنس بسیار خوب عمل می‌کنند اما باید با توجه به نیاز‌های خود انتخاب درست را انجام دهید.

اندروید نیز به یک factory برای ViewModel-های خود نیاز دارد تا بخش کش کردن کار کند. این یک دوره آموزشی 2 ساعته، به خوبی سازماندهی شده و مختصر است که با دقت طراحی شده است تا دقیقاً آنچه را که باید بدانید تا بتوانید در سریع ترین زمان ممکن به این هدف برسید. من یک ثانیه از وقت شما را تلف نمی‌کنم، مانند دوره‌های 20 ساعته دیگری که قبلاً با آنها تجربه کرده‌اید. این اولین فصل از سفر من برای یادگیری Multiplatform Kotlin است. در مقاله بعدی، در مورد چگونگی راه اندازی محیط توسعه خود با KMP، از جمله مراحل عملی استفاده از Gradle برای اتوماسیون ساخت و مدیریت وابستگی و ساخت اپلیکیشن با KMP صحبت خواهم کرد.

اندروید یکی از سیستم عامل مبتنی به موبایل هست هستش که بیشترین درصد استفاده در بین کاربران را دارد و به طوری که طبق آمار رسمی ارائه شده توسط گوگل بیش از 70درصد از کاربران موبایل رو سیستم عامل اندروید تشکیل میده. قصد دارم قبل از این که به سراغ توضیحات اصلی و مربوط به این مقاله برویم، توضیح مختصر و مفیدی درباره ی این که اصلا کراس پلتفرم یعنی چی یا مولتی پلتفرم یعنی چی داشته باشیم. در حال حاضر gradle هیچ پشتیبانی برای ساخت پروژه‌های iOS ندارد و از این رو راه‌اندازی یک فریمورک خودکار برای پیوند دادن به پروژه iOS به خصوص در مورد ماژول‌های چندگانه مشترک نیاز به اندکی تلاش دارد. این مانعی است که باید از سر راه برداریم و این کار نیز بی‌فایده نیست، زیرا امکان تغییر ماژول‌های مشترک برای ایمپورت خودکار در پروژه‌های iOS را فراهم می‌سازد. به جای آن می‌توانیم شروع به ایجاد کامپوننت‌های مختلف، مستقل از همدیگر بکنیم و مجموعه کارکردهای کاملاً متمرکزی ارائه کنیم. در این حالت، اپلیکیشن‌های کلاینت کنترل کاملی روی مواردی که به آن وابسته هستند و استفاده می‌کنند خواهند داشت.


برنامه نویسی پی ال سی