הוספת Kotlin Multiplatform לפרויקט קיים

כדי ליצור מודול Kotlin Multiplatform ‏ (KMP) בפרויקט ל-Android, משתמשים בתבנית Kotlin Multiplatform Shared Module, שזמינה ב-Android Studio Meerkat ובפלאגין של Android Gradle מגרסה 8.8.0 ואילך.

תבנית המודול מאפשרת ליצור באופן אוטומטי מודול חדש עם הגדרות מינימליות שמטרגטות פלטפורמות של Android ו-iOS. ‫KMP תומך גם ביעדים אחרים, כמו מחשב ואינטרנט, שאפשר להוסיף למודול מאוחר יותר. לרשימה המלאה של הפלטפורמות הנתמכות כדי להצהיר על יעד, עיינו בקטע יעדים בחומר העזר של Multiplatform Gradle DSL.

הגדרת המודול המשותף של KMP

כדי ליצור מודול משותף של KMP:

  1. לוחצים על קובץ > חדש > מודול חדש.
  2. בוחרים את התבנית Kotlin Multiplatform Shared Module בחלונית Templates:
יצירת מודול KMP חדש
תרשים 1. יצירת מודול KMP חדש

השדות בתבנית הם:

  • שם המודול – מגדיר את שם המודול של Gradle, וגם את שם ה-framework של iOS (אפשר לשנות אותו אחר כך)
  • ‫שם החבילה – מגדיר את שם החבילה של הקבצים במודול הזה
    1. לוחצים על Finish ומאפשרים ל-Gradle להסתנכרן עם הפרויקט. יכול להיות שתתבקשו גם להוסיף את קובצי המודול החדשים לניהול מקורות.

בסיום, המודול המשותף החדש יופיע ב-Project View ב-Android Studio, יחד עם קבוצת מקורות לכל פלטפורמה.

תצוגת פרויקט עם מודולים משותפים חדשים
איור 2. תצוגת פרויקט עם המודולים המשותפים החדשים

אשף המודולים לא מוסיף את המודול החדש שנוצר כתלות לאף מודול קיים. השלב הבא הוא לקשר את המודול המשותף לאחד מהמודולים הקיימים של Gradle, בדומה ליחסי תלות אחרים של Android:

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

אחרי שתפעילו את התכונה, תוכלו לגשת לקוד כרגיל. באפליקציה ל-Android, אתם יכולים לגשת לקוד שזמין ב-androidMain או ב-commonMain.

מידע נוסף על מבנה הפרויקט של Kotlin Multiplatform זמין במאמר היסודות של מבנה הפרויקט של Kotlin Multiplatform.

הגדרת המודול המשותף לאפליקציה ל-iOS

ב-Swift אי אפשר להשתמש ישירות במודולים של Kotlin, וצריך ליצור מסגרת בינארית שעברה הידור.

תבנית המודול החדשה ב-Android Studio מגדירה את המודול המשותף כך שייצור מסגרת לכל אחת מהארכיטקטורות של 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 Studio ובוחרים באפשרות Open In (פתיחה ב-) ואז באפשרות Open in Associated Application (פתיחה באפליקציה המשויכת). האפליקציה ל-iOS תיפתח ב-Xcode.
פתיחה באפליקציה המשויכת
תרשים 3. פתיחה באפליקציה המשויכת
  1. פותחים את הגדרות הפרויקט בלחיצה כפולה על שם הפרויקט בסרגל הניווט של הפרויקט.
תיבת הדו-שיח של הגדרות הפרויקט ב-Xcode
איור 4. תיבת הדו-שיח של הגדרות הפרויקט ב-Xcode
  1. משנים את שם ברירת המחדל של Run Script ל-Compile Kotlin Framework כדי לזהות טוב יותר מה השלב הזה עושה. לוחצים לחיצה כפולה על הכותרת Run Script כדי לערוך אותה.
  2. מרחיבים את שלב ה-build, ובשדה הטקסט Shell מזינים את קוד הסקריפט הבא:
הוספת שלב חדש של הרצת סקריפט בתהליך ה-build
איור 5. Run script build phase
  1. גוררים את השלב Run Script (הפעלת סקריפט) לפני השלב Compile Sources (הידור מקורות).

    הפעלת שלב ה-build של הסקריפט לפני הידור המקורות
    איור 6. מריצים את שלב ה-build של הסקריפט לפני הידור המקורות

  2. בונים את הפרויקט ב-Xcode על ידי לחיצה על ‎⌘B או מעבר לתפריט Product ובחירה באפשרות Build.

כשה-build יסתיים, יופיע הסמל הבא.

הודעה על בנייה מוצלחת שמוצגת ב-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

מקורות מידע נוספים