توسعه iOS را با کتابخانه چند پلتفرمی Kotlin تقویت کنید

Summarize this content to 400 words in Persian Lang
Kotlin Multiplatform (KMP) یک رویکرد امیدوارکننده است که توسعه دهندگان را قادر می سازد تا منطق کسب و کار را در چندین پلتفرم از جمله iOS و Android به اشتراک بگذارند، در حالی که به پیاده سازی های خاص پلت فرم برای عملکردهای وابسته به پلت فرم اجازه می دهد. این مقاله نحوه ادغام KMP با iOS را نشان میدهد و نحوه نمایش رابطهای Kotlin در Swift، پیادهسازی این رابطها در Swift و استفاده از آنها در یک برنامه Swift UI را نشان میدهد.
تمرکز در اینجا بررسی یک رویکرد جایگزین است که از پیچیدگی اجتناب می کند expect/actual الگوها در عوض، این روش ادغام را با به حداقل رساندن تعامل با APIهای پلتفرمی که در KMP در معرض نمایش نیستند، ساده می کند.
ما یک نمونه برنامه Swift UI خواهیم ساخت که داده ها را رمزگذاری، ذخیره و رمزگشایی می کند. منطق کسب و کار در Kotlin قرار دارد، در حالی که عملکردهای پلتفرم خاص در Swift پیاده سازی شده است.
راه اندازی کتابخانه Mutlipform Kotlin در اندروید استودیو
برای شروع، باید با استفاده از Android Studio یک کتابخانه KMP ایجاد کنید. برای مرجع، می توانید از پروژه نمونه استفاده کنید. را build.gradle.kts فایل برای کتابخانه شامل تنظیمات مهم برای ایجاد یک کتابخانه چند پلتفرمی است.
مراحل کلیدی:
از ساختار اولیه پروژه KMP استفاده کنید. برای مرجع نمونه پروژه را ببینید
لیستی از اهداف iOS را تعریف کنید iosX64، iosArm64، iosSimulatorArm64 در شما build.gradle.kts.
تعریف کنید XCFramework با یک متغیر و اضافه کردن تمام اهداف به چارچوب
نکته کلیدی در اینجا این است که شما باید نام معناداری را به فریمورک خود بدهید و همچنین از همان نام برای فریم ورک باینری استفاده کنید..
حداقل build.gradle.kts فایل به شکل زیر است:
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework
plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidLibrary)
}
group = “io.github.arskov”
version = “1.0.0”
// Use some name for the framework. It will be used as main import in Swift
val iosXCFrameworkName = “KmpLib”
val binaryName = “kmp-lib”
kotlin {
androidTarget {
publishLibraryVariants(“release”)
@OptIn(ExperimentalKotlinGradlePluginApi::class)
compilerOptions {
jvmTarget.set(JvmTarget.JVM_1_8)
}
}
val xcf = XCFramework(iosXCFrameworkName)
val iosTargets = listOf(iosX64(), iosArm64(), iosSimulatorArm64())
iosTargets.forEach {
it.binaries.framework {
baseName = iosXCFrameworkName
xcf.add(this)
}
}
sourceSets {
commonMain {
dependencies {
// Put necessary KMP compatible dependencies here
}
}
commonTest {
dependencies {
implementation(libs.kotlin.test)
}
}
}
}
android {
namespace = “io.github.arskov”
compileSdk = libs.versions.android.compileSdk.get().toInt()
defaultConfig {
minSdk = libs.versions.android.minSdk.get().toInt()
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
وظیفه Gradle را برای ساخت کتابخانه اجرا کنید و یک XCFramework برای ادغام iOS تولید کنید.
معماری کاربردی و منطق تجاری
package io.github.arskov
class MultiplatformService(
private val cryptoProvider: CryptoProvider,
private val storeProvider: StoreProvider
) {
@Throws(StoreException::class, EncryptionException::class)
fun storeData(data: PlainData, encryptionKey: ByteArray?) {
if (!data.encrypted && encryptionKey != null) {
val encryptedData =
cryptoProvider.encrypt(op = EncryptOp.ENCRYPT, key = encryptionKey, data = data.content)
val encryptedPlainData =
PlainData(id = data.id, encrypted = true, updated = 0L, content = encryptedData)
storeProvider.store(encryptedPlainData)
} else {
storeProvider.store(data)
}
}
@Throws(StoreException::class, EncryptionException::class)
fun loadData(id: Long, encryptionKey: ByteArray?): PlainData {
val data = storeProvider.load(id)
if (data.encrypted && encryptionKey != null) {
val decryptedData = cryptoProvider.encrypt(op = EncryptOp.DECRYPT, key = encryptionKey, data = data.content)
return PlainData(id = data.id, encrypted = false, updated = 0L, content = decryptedData)
}
return data
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
ایده اصلی کتابخانه پذیرش داده ها، انجام یک عملیات رمزنگاری ارائه شده و ذخیره ارزش در فروشگاه ارائه شده است.
برای سادگی، ما همچنین یک پیاده سازی پیش فرض در حافظه داریم StoreProvider، اما این می تواند در سمت سوئیفت نیز اجرا شود. زیر را ببینید.
اکنون آنچه می خواهیم انجام دهیم این است که این را یکپارچه کنیم MultiplatformService به برنامه نمونه UI Swift. در سوئیفت زمانی که ما را می سازیم MultiplatformService ما پیاده سازی Swift را ارائه می دهیم CryptoProvider و StoreProvider.
ساخت XCFramework
XCFramework محفظهای است که از چندین معماری پشتیبانی میکند و به کتابخانه شما اجازه میدهد تا بهطور یکپارچه بر روی دستگاهها و شبیهسازهای مختلف iOS کار کند.
مراحل ساخت XCFramework:
نام چارچوب را تنظیم کنید: مطمئن شوید که فریم ورک دارای یک نام واضح و منحصر به فرد است، مانند KmpLib.
پلتفرم های هدف را مشخص کنید: تعریف معماری هایی مانند iosArm64 برای دستگاه های فیزیکی و iosSimulatorArm64 برای شبیه سازها
Build Task را اجرا کنید: استفاده کنید ./gradlew task برای دیدن کارهای احتمالی اسمبلی که دارید. از وظیفه Gradle استفاده کنید ./gradlew assembleKmpLibXCFramework برای ساخت XCFramework. خروجی در واقع خواهد شد kmp-lib/library/build/XCFrameworks/{debug|release}/ دایرکتوری اگر به فریم ورک خود نامی بدهید، Gradle وظیفه assembleXCFramework را ایجاد می کند.
نمونه برنامه Swift UI
برنامه Swift UI نحوه استفاده از کتابخانه KMP را برای مدیریت امن داده ها نشان می دهد. در اینجا یک نمای کلی از عملکرد آن در سطح بالا آورده شده است:
رمزگذاری: داده ها با استفاده از رمزگذاری می شوند CryptoProvider رابط پیاده سازی شده در سوئیفت
ذخیره سازی: داده های رمزگذاری شده با استفاده از InMemoryStoreProvider یا یک پیاده سازی سفارشی
رمزگشایی: برنامه داده ها را برای نمایش بازیابی و رمزگشایی می کند.
نمونه گردش کار:
داده های نمونه را در برنامه وارد کنید.
رمزگذاری و ذخیره داده ها با استفاده از منطق تجاری Kotlin.
داده ها را بازیابی و رمزگشایی کنید و تعامل یکپارچه بین Swift و KMP را به نمایش بگذارید.
معماری اپلیکیشن مینیمالیستی است اما نشان میدهد که چگونه کتابخانههای چند پلتفرمی Kotlin میتوانند توسعه iOS را بهبود بخشند.
وارد کردن XCFramework به Xcode
برای استفاده از XCFramework تولید شده در پروژه Xcode خود، این مراحل را دنبال کنید:
با استفاده از جادوگر Xcode یک پروژه جدید iOS Swift UI ایجاد کنید. برای این کار نیازی به مراحل خاصی ندارید، فقط دستورالعمل های Xcode را دنبال کنید.
روی یک پروژه کلیک کنید تا a باز شود تنظیمات پروژه.
زیر چارچوب ها، کتابخانه ها و محتوای جاسازی شده، کلیک کنید + دکمه
مسیر را به XCFramework اضافه کنید:
kmp-lib/library/build/XCFrameworks/debug/KmpLib.xcframework. چارچوب در بخش Frameworks ساختار پروژه در پانل درخت سمت چپ ظاهر می شود.
این ادغام به سوئیفت اجازه می دهد تا به منطق تجاری کاتلین دسترسی داشته باشد.
پیاده سازی رابط های KMP در سوئیفت
در مثال خود، ما آن را وارد کرده ایم KmpLib فریمورک و اکنون قصد داریم رابط های آشکار شده آن را در سوئیفت پیاده سازی کنیم. رابط های کلیدی عبارتند از:
import KmpLib
class IosCryptoProvider: CryptoProvider {
func encrypt(op: EncryptOp, key: KotlinByteArray, data: KotlinByteArray)
throws -> KotlinByteArray
{
// Ensure the key is not empty
guard key.size > 0 else {
throw NSError(
domain: “CryptoError”, code: 1,
userInfo: [NSLocalizedDescriptionKey: “Key must not be empty”])
}
// Create a result array of the same size as the data
let result = KotlinByteArray(size: data.size)
// Perform XOR encryption
for i in 0..<data.size {
let dataByte = data.get(index: i)
let keyByte = key.get(index: i % key.size)
result.set(index: i, value: dataByte ^ keyByte)
}
return result
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
ServiceLocator که حاوی کد اصلی است که یک Singleton را برای آن نمونه سازی می کند و جعبه می کند MultiplatformService:
import Foundation
import KmpLib
class ServiceLocator {
static let sharedInstance = ServiceLocator()
private let mutliplatformService: MultiplatformService!
private let storeProvider: StoreProvider!
private init() {
// Swift implementation of the CryptoProvider protocol exposed from KMP
let cryptoProvider = IosCryptoProvider()
// KMP implementation of Stor
storeProvider = InMemoryStoreProvider()
mutliplatformService = MultiplatformService(
cryptoProvider: cryptoProvider, storeProvider: storeProvider)
}
func getMultiplatformService() -> MultiplatformService {
return self.mutliplatformService
}
func getStoreProvider() -> StoreProvider {
return self.storeProvider
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
فایل ContentView.swift حاوی منطق اصلی رابط کاربری است:
رمز عبور را برای رمزگذاری محتوا تنظیم کنید
متن را تنظیم کنید
دکمه ای برای رمزگذاری و ذخیره محتوا
کنترل برای نمایش متن رمزگذاری شده در HEX
دکمه بارگیری و رمزگشایی محتوا
Button(action: {
let service = ServiceLocator.sharedInstance
.getMultiplatformService()
let store = ServiceLocator.sharedInstance.getStoreProvider()
let plainData = PlainData(
id: 1,
encrypted: false,
updated: 0,
content: self.plainDataText.toKotlinByteArray()
)
do {
try service.storeData(
data: plainData,
encryptionKey: encryptionKey.toKotlinByteArray())
let storedData = try store.load(id: 1)
self.encryptedDataText = storedData.content.toHexString()
} catch {
print(“error: \(error)”)
}
})
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
جزئیات مهم، که ما همچنین برخی از توابع افزونه را برای آن ایجاد کردیم KotlinByteArray و String تا بتوانید به راحتی بین آنها تبدیل کنید.
در تولید، این عملیات کپی ارزان نیست، و به خصوص با روش های پیش فرضی که KMP برای آنها در معرض نمایش قرار می دهد KotlinByteArray، مانند get(i)، set(i, value). در مقالات بعدی گزینه های جایگزین را در نظر خواهیم گرفت. با ما همراه باشید.
برنامه در حال اجرا به نظر می رسد:
نتیجه گیری
این مقاله یک راهنمای گام به گام در مورد استفاده از کتابخانههای چند پلتفرمی Kotlin برای توسعه iOS ارائه کرده است. با پیروی از این رویکرد جایگزین، میتوانید منطق کسبوکار را به طور مؤثر در بین پلتفرمها به اشتراک بگذارید، بدون اینکه در پیچیدگیهای آن تحقیق کنید expect/actual API ها نمونه برنامه Swift UI ادغام عملی رابطهای KMP در Swift را برجسته میکند و پتانسیل توسعه چند پلتفرمی ساده را نشان میدهد.
برای کاوش بیشتر، نمونه کامل را در GitHub بررسی کنید.
Kotlin Multiplatform (KMP) یک رویکرد امیدوارکننده است که توسعه دهندگان را قادر می سازد تا منطق کسب و کار را در چندین پلتفرم از جمله iOS و Android به اشتراک بگذارند، در حالی که به پیاده سازی های خاص پلت فرم برای عملکردهای وابسته به پلت فرم اجازه می دهد. این مقاله نحوه ادغام KMP با iOS را نشان میدهد و نحوه نمایش رابطهای Kotlin در Swift، پیادهسازی این رابطها در Swift و استفاده از آنها در یک برنامه Swift UI را نشان میدهد.
تمرکز در اینجا بررسی یک رویکرد جایگزین است که از پیچیدگی اجتناب می کند expect/actual
الگوها در عوض، این روش ادغام را با به حداقل رساندن تعامل با APIهای پلتفرمی که در KMP در معرض نمایش نیستند، ساده می کند.
ما یک نمونه برنامه Swift UI خواهیم ساخت که داده ها را رمزگذاری، ذخیره و رمزگشایی می کند. منطق کسب و کار در Kotlin قرار دارد، در حالی که عملکردهای پلتفرم خاص در Swift پیاده سازی شده است.
راه اندازی کتابخانه Mutlipform Kotlin در اندروید استودیو
برای شروع، باید با استفاده از Android Studio یک کتابخانه KMP ایجاد کنید. برای مرجع، می توانید از پروژه نمونه استفاده کنید. را build.gradle.kts
فایل برای کتابخانه شامل تنظیمات مهم برای ایجاد یک کتابخانه چند پلتفرمی است.
مراحل کلیدی:
- از ساختار اولیه پروژه KMP استفاده کنید. برای مرجع نمونه پروژه را ببینید
- لیستی از اهداف iOS را تعریف کنید
iosX64
،iosArm64
،iosSimulatorArm64
در شماbuild.gradle.kts
. - تعریف کنید
XCFramework
با یک متغیر و اضافه کردن تمام اهداف به چارچوب - نکته کلیدی در اینجا این است که شما باید نام معناداری را به فریمورک خود بدهید و همچنین از همان نام برای فریم ورک باینری استفاده کنید..
حداقل build.gradle.kts
فایل به شکل زیر است:
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework
plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidLibrary)
}
group = "io.github.arskov"
version = "1.0.0"
// Use some name for the framework. It will be used as main import in Swift
val iosXCFrameworkName = "KmpLib"
val binaryName = "kmp-lib"
kotlin {
androidTarget {
publishLibraryVariants("release")
@OptIn(ExperimentalKotlinGradlePluginApi::class)
compilerOptions {
jvmTarget.set(JvmTarget.JVM_1_8)
}
}
val xcf = XCFramework(iosXCFrameworkName)
val iosTargets = listOf(iosX64(), iosArm64(), iosSimulatorArm64())
iosTargets.forEach {
it.binaries.framework {
baseName = iosXCFrameworkName
xcf.add(this)
}
}
sourceSets {
commonMain {
dependencies {
// Put necessary KMP compatible dependencies here
}
}
commonTest {
dependencies {
implementation(libs.kotlin.test)
}
}
}
}
android {
namespace = "io.github.arskov"
compileSdk = libs.versions.android.compileSdk.get().toInt()
defaultConfig {
minSdk = libs.versions.android.minSdk.get().toInt()
}
}
وظیفه Gradle را برای ساخت کتابخانه اجرا کنید و یک XCFramework برای ادغام iOS تولید کنید.
معماری کاربردی و منطق تجاری
package io.github.arskov
class MultiplatformService(
private val cryptoProvider: CryptoProvider,
private val storeProvider: StoreProvider
) {
@Throws(StoreException::class, EncryptionException::class)
fun storeData(data: PlainData, encryptionKey: ByteArray?) {
if (!data.encrypted && encryptionKey != null) {
val encryptedData =
cryptoProvider.encrypt(op = EncryptOp.ENCRYPT, key = encryptionKey, data = data.content)
val encryptedPlainData =
PlainData(id = data.id, encrypted = true, updated = 0L, content = encryptedData)
storeProvider.store(encryptedPlainData)
} else {
storeProvider.store(data)
}
}
@Throws(StoreException::class, EncryptionException::class)
fun loadData(id: Long, encryptionKey: ByteArray?): PlainData {
val data = storeProvider.load(id)
if (data.encrypted && encryptionKey != null) {
val decryptedData = cryptoProvider.encrypt(op = EncryptOp.DECRYPT, key = encryptionKey, data = data.content)
return PlainData(id = data.id, encrypted = false, updated = 0L, content = decryptedData)
}
return data
}
}
ایده اصلی کتابخانه پذیرش داده ها، انجام یک عملیات رمزنگاری ارائه شده و ذخیره ارزش در فروشگاه ارائه شده است.
برای سادگی، ما همچنین یک پیاده سازی پیش فرض در حافظه داریم StoreProvider
، اما این می تواند در سمت سوئیفت نیز اجرا شود. زیر را ببینید.
اکنون آنچه می خواهیم انجام دهیم این است که این را یکپارچه کنیم MultiplatformService
به برنامه نمونه UI Swift. در سوئیفت زمانی که ما را می سازیم MultiplatformService
ما پیاده سازی Swift را ارائه می دهیم CryptoProvider
و StoreProvider
.
ساخت XCFramework
XCFramework محفظهای است که از چندین معماری پشتیبانی میکند و به کتابخانه شما اجازه میدهد تا بهطور یکپارچه بر روی دستگاهها و شبیهسازهای مختلف iOS کار کند.
مراحل ساخت XCFramework:
-
نام چارچوب را تنظیم کنید: مطمئن شوید که فریم ورک دارای یک نام واضح و منحصر به فرد است، مانند
KmpLib
. -
پلتفرم های هدف را مشخص کنید: تعریف معماری هایی مانند
iosArm64
برای دستگاه های فیزیکی وiosSimulatorArm64
برای شبیه سازها -
Build Task را اجرا کنید: استفاده کنید
./gradlew task
برای دیدن کارهای احتمالی اسمبلی که دارید. از وظیفه Gradle استفاده کنید./gradlew assembleKmpLibXCFramework
برای ساخت XCFramework. خروجی در واقع خواهد شدkmp-lib/library/build/XCFrameworks/{debug|release}/
دایرکتوری اگر به فریم ورک خود نامی بدهید، Gradle وظیفه assembleXCFramework را ایجاد می کند.
نمونه برنامه Swift UI
برنامه Swift UI نحوه استفاده از کتابخانه KMP را برای مدیریت امن داده ها نشان می دهد. در اینجا یک نمای کلی از عملکرد آن در سطح بالا آورده شده است:
-
رمزگذاری: داده ها با استفاده از رمزگذاری می شوند
CryptoProvider
رابط پیاده سازی شده در سوئیفت -
ذخیره سازی: داده های رمزگذاری شده با استفاده از
InMemoryStoreProvider
یا یک پیاده سازی سفارشی - رمزگشایی: برنامه داده ها را برای نمایش بازیابی و رمزگشایی می کند.
نمونه گردش کار:
- داده های نمونه را در برنامه وارد کنید.
- رمزگذاری و ذخیره داده ها با استفاده از منطق تجاری Kotlin.
- داده ها را بازیابی و رمزگشایی کنید و تعامل یکپارچه بین Swift و KMP را به نمایش بگذارید.
معماری اپلیکیشن مینیمالیستی است اما نشان میدهد که چگونه کتابخانههای چند پلتفرمی Kotlin میتوانند توسعه iOS را بهبود بخشند.
وارد کردن XCFramework به Xcode
برای استفاده از XCFramework تولید شده در پروژه Xcode خود، این مراحل را دنبال کنید:
- با استفاده از جادوگر Xcode یک پروژه جدید iOS Swift UI ایجاد کنید. برای این کار نیازی به مراحل خاصی ندارید، فقط دستورالعمل های Xcode را دنبال کنید.
- روی یک پروژه کلیک کنید تا a باز شود تنظیمات پروژه.
- زیر چارچوب ها، کتابخانه ها و محتوای جاسازی شده، کلیک کنید + دکمه
- مسیر را به XCFramework اضافه کنید:
kmp-lib/library/build/XCFrameworks/debug/KmpLib.xcframework
. چارچوب در بخش Frameworks ساختار پروژه در پانل درخت سمت چپ ظاهر می شود.
این ادغام به سوئیفت اجازه می دهد تا به منطق تجاری کاتلین دسترسی داشته باشد.
پیاده سازی رابط های KMP در سوئیفت
در مثال خود، ما آن را وارد کرده ایم KmpLib
فریمورک و اکنون قصد داریم رابط های آشکار شده آن را در سوئیفت پیاده سازی کنیم. رابط های کلیدی عبارتند از:
import KmpLib
class IosCryptoProvider: CryptoProvider {
func encrypt(op: EncryptOp, key: KotlinByteArray, data: KotlinByteArray)
throws -> KotlinByteArray
{
// Ensure the key is not empty
guard key.size > 0 else {
throw NSError(
domain: "CryptoError", code: 1,
userInfo: [NSLocalizedDescriptionKey: "Key must not be empty"])
}
// Create a result array of the same size as the data
let result = KotlinByteArray(size: data.size)
// Perform XOR encryption
for i in 0..<data.size {
let dataByte = data.get(index: i)
let keyByte = key.get(index: i % key.size)
result.set(index: i, value: dataByte ^ keyByte)
}
return result
}
}
ServiceLocator که حاوی کد اصلی است که یک Singleton را برای آن نمونه سازی می کند و جعبه می کند MultiplatformService
:
import Foundation
import KmpLib
class ServiceLocator {
static let sharedInstance = ServiceLocator()
private let mutliplatformService: MultiplatformService!
private let storeProvider: StoreProvider!
private init() {
// Swift implementation of the CryptoProvider protocol exposed from KMP
let cryptoProvider = IosCryptoProvider()
// KMP implementation of Stor
storeProvider = InMemoryStoreProvider()
mutliplatformService = MultiplatformService(
cryptoProvider: cryptoProvider, storeProvider: storeProvider)
}
func getMultiplatformService() -> MultiplatformService {
return self.mutliplatformService
}
func getStoreProvider() -> StoreProvider {
return self.storeProvider
}
}
فایل ContentView.swift حاوی منطق اصلی رابط کاربری است:
- رمز عبور را برای رمزگذاری محتوا تنظیم کنید
- متن را تنظیم کنید
- دکمه ای برای رمزگذاری و ذخیره محتوا
- کنترل برای نمایش متن رمزگذاری شده در HEX
- دکمه بارگیری و رمزگشایی محتوا
Button(action: {
let service = ServiceLocator.sharedInstance
.getMultiplatformService()
let store = ServiceLocator.sharedInstance.getStoreProvider()
let plainData = PlainData(
id: 1,
encrypted: false,
updated: 0,
content: self.plainDataText.toKotlinByteArray()
)
do {
try service.storeData(
data: plainData,
encryptionKey: encryptionKey.toKotlinByteArray())
let storedData = try store.load(id: 1)
self.encryptedDataText = storedData.content.toHexString()
} catch {
print("error: \(error)")
}
})
جزئیات مهم، که ما همچنین برخی از توابع افزونه را برای آن ایجاد کردیم KotlinByteArray
و String
تا بتوانید به راحتی بین آنها تبدیل کنید.
در تولید، این عملیات کپی ارزان نیست، و به خصوص با روش های پیش فرضی که KMP برای آنها در معرض نمایش قرار می دهد KotlinByteArray
، مانند get(i)
، set(i, value)
. در مقالات بعدی گزینه های جایگزین را در نظر خواهیم گرفت. با ما همراه باشید.
برنامه در حال اجرا به نظر می رسد:
نتیجه گیری
این مقاله یک راهنمای گام به گام در مورد استفاده از کتابخانههای چند پلتفرمی Kotlin برای توسعه iOS ارائه کرده است. با پیروی از این رویکرد جایگزین، میتوانید منطق کسبوکار را به طور مؤثر در بین پلتفرمها به اشتراک بگذارید، بدون اینکه در پیچیدگیهای آن تحقیق کنید expect/actual
API ها نمونه برنامه Swift UI ادغام عملی رابطهای KMP در Swift را برجسته میکند و پتانسیل توسعه چند پلتفرمی ساده را نشان میدهد.
برای کاوش بیشتر، نمونه کامل را در GitHub بررسی کنید.