إضافة Kotlin Multiplatform إلى مشروع حالي

لإنشاء وحدة Kotlin Multiplatform (KMP) ضمن مشروع Android، استخدِم نموذج Kotlin Multiplatform Shared Module المتوفّر في إصدار Meerkat من "استوديو Android" والإصدار 8.8.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث.

يعمل نموذج الوحدة على إنشاء وحدة جديدة تلقائيًا بأقل قدر من الإعدادات التي تستهدف نظامَي التشغيل Android وiOS. تتيح KMP أيضًا استخدام أهداف أخرى، مثل أجهزة الكمبيوتر المكتبي والويب، والتي يمكنك إضافتها إلى الوحدة لاحقًا. للاطّلاع على القائمة الكاملة، يُرجى مراجعة ثبات المنصات المتوافقة. للإعلان عن هدف، يُرجى الاطّلاع على الأهداف في مرجع Multiplatform Gradle DSL.

إعداد وحدة KMP المشتركة

لإنشاء وحدة KMP مشتركة، اتّبِع الخطوات التالية:

  1. انقر على ملف (File) > جديد (New) > وحدة جديدة (New Module)
  2. اختَر نموذج Kotlin Multiplatform Shared Module في لوحة النماذج:
إنشاء وحدة KMP جديدة
الشكل 1. إنشاء وحدة KMP جديدة

في ما يلي الحقول في النموذج:

  • اسم الوحدة: يحدّد اسم وحدة Gradle، بالإضافة إلى اسم إطار عمل iOS (يمكن تغييره لاحقًا)
  • اسم الحزمة: يحدّد اسم الحزمة للملفات في هذه الوحدة
    1. انقر على إنهاء واسمح لـ Gradle بالمزامنة مع المشروع. قد يُطلب منك أيضًا إضافة ملفات الوحدة التي تم إنشاؤها حديثًا إلى التحكم في المصدر.

بعد اكتمال العملية، يعرض عرض المشروع في "استوديو Android" الوحدة المشتركة الجديدة مع مجموعة رموز المصدر لكل نظام أساسي.

عرض المشروع الذي يعرض الوحدات المشتركة الجديدة
الشكل 2. عرض المشروع الذي يعرض الوحدات المشتركة الجديدة

لا يضيف معالج الوحدة الوحدة التي تم إنشاؤها حديثًا كعنصر تابع إلى أي وحدة حالية. كخطوة تالية، عليك ربط الوحدة المشتركة بإحدى وحدات Gradle الحالية على غرار تبعيات Android الأخرى:

dependencies {
    ...
    implementation(project(":shared"))
}

بعد تفعيل الميزة، يمكنك الوصول إلى الرمز كالمعتاد. من تطبيق Android، يمكنك الوصول إلى الرمز البرمجي المتاح في androidMain أو في commonMain.

لمزيد من المعلومات حول بنية مشروع Kotlin Multiplatform، يُرجى الاطّلاع على أساسيات بنية مشروع Kotlin Multiplatform

إعداد الوحدة المشتركة في تطبيق iOS

لا يمكن لـ Swift استخدام وحدات Kotlin مباشرةً، بل يتطلب إنشاء إطار عمل ثنائي مجمّع.

يضبط نموذج الوحدة الجديد في "استوديو Android" الوحدة المشتركة لإنشاء إطار عمل لكل بنية من بنيات iOS. يمكنك العثور على الرمز التالي في ملف build.gradle.kts الخاص بالوحدة المشتركة:

val xcfName = "sharedKit"

iosX64 {
  binaries.framework {
    baseName = xcfName
  }
}

iosArm64 {
  binaries.framework {
    baseName = xcfName
  }
}

iosSimulatorArm64 {
  binaries.framework {
    baseName = xcfName
  }
}

راجِع بنية المشروع الهرمية للحصول على معلومات حول تحديد أنواع البُنى الأخرى.

لإتاحة الوصول إلى الرمز البرمجي المشترَك من مشروع iOS، أضِف مرحلة نص برمجي لإنشاء إطار عمل Kotlin قبل تجميع مصادر Swift:

  1. انقر بزر الماوس الأيمن على الملف في استوديو Android واختَر فتح في (Open In) وفتح في التطبيق المرتبط (Open in Associated Application). سيؤدي ذلك إلى فتح تطبيق iOS في Xcode.
فتح في التطبيق المرتبط
الشكل 3. الفتح في التطبيق المرتبط
  1. افتح إعدادات المشروع بالنقر مرّتين على اسم المشروع في أداة التنقّل في المشروع
مربّع حوار إعدادات مشروع Xcode
الشكل 4: مربّع حوار إعدادات مشروع Xcode
  1. غيِّر الاسم التلقائي Run Script إلى Compile Kotlin Framework لتحديد وظيفة هذه المرحلة بشكل أفضل. انقر مرّتين فوق عنوان Run Script لتحريره.
  2. وسِّع مرحلة الإنشاء، وفي حقل النص Shell، أدخِل رمز النص البرمجي التالي:
إضافة مرحلة إنشاء نص برمجي جديد للتشغيل
الشكل 5: تشغيل مرحلة إنشاء النص البرمجي
  1. اسحب مرحلة Run Script (تشغيل النص البرمجي) قبل مرحلة Compile Sources (تجميع المصادر).

    تشغيل مرحلة إنشاء النص البرمجي قبل تجميع المصادر
    الشكل 6 تشغيل مرحلة إنشاء النص البرمجي قبل تجميع المصادر

  2. أنشئ المشروع في Xcode بالنقر على ⌘B أو الانتقال إلى قائمة المنتج واختيار إنشاء.

عند نجاح عملية الإنشاء، سيظهر لك الرمز التالي.

رسالة "تم الإنشاء بنجاح" في Xcode
الشكل 7. تم إنشاء الإصدار بنجاح

الوصول إلى الرمز المشترَك في تطبيق iOS

للتأكّد من أنّ تطبيق iOS يمكنه الوصول بنجاح إلى الرمز من الوحدة المشتركة، اتّبِع الخطوات التالية:

  1. في مشروع iOS، افتح ملف ContentView.swift في: Sources/View/ContentView.swift
  2. أضِف عبارة الاستيراد sharedKit في أعلى الملف.
  3. عدِّل طريقة عرض النص لتضمين معلومات Platform_iosKt.platform() في السلسلة المعروضة على النحو التالي:

يتحقّق هذا التعديل مما إذا كان بإمكان التطبيق استدعاء الدالة platform() من الوحدة المشتركة، والتي من المفترض أن تعرض "iOS" عند تشغيلها على نظام iOS الأساسي.

محاكي Xcode يشغّل تطبيق iOS
الشكل 8 محاكي Xcode يشغّل تطبيق iOS

موارد إضافية