こんにちは、Habr!私はプロ会社のチームリーダー、ミシャ・イグナトフです。私のチームは、AndroidおよびiOS用のクライアント側モバイルアプリを担当しています。2019年から本番環境でKotlinMultiplatformを使用しています。この特定のテクノロジーを選択した理由、導入方法、通過した主要な段階、および結論を説明します。
Kotlinマルチプラットフォームについて簡単に説明します
Kotlin Multiplatform , Kotlin, . 2020 JetBrains Kotlin Multiplatform Mobile () — SDK, Android iOS. — -. UI- , .
Kotlin Multiplatform
- . , React Native Flutter , . Kotlin Multiplatform .
, Kotlin, . . Android jar aar-, iOS — Universal Framework. .
Kotlin Swift
iOS-. — . , , .
- . 70% , . , , . , , — Android Kotlin iOS Swift. — - UX ( : , , , ..).
. , . — , . , .
1.
— API-, .
GraphQL. — multiline . , . , . , - . «» . .
«» . . , «» .
. Android- shared. - object
, . — iOS-.
package ru.profi.shared.queries.client.city
/**
* [Params.term]
*/
object GeoSelectorWarpQuery : WarpQuery<Params> {
override val hash: String? = "\$GQLID{c9d4adbb7b9ef49fc044064b9a3e662b}"
override val dirtyQuery = listOf("\$term").let { (term) ->
"""
query geoSelector($term: String) {
suggestions: simpleGeoSelector(term: $term, first: 100) {
edges {
node {
name
geoCityId
regionName
hostname
countryId
}
}
}
}
"""
}.trimIndent()
}
Android
override fun getQuery() = GeoSelectorWarpQuery.getQuery()
iOS
import KotlinComponents
struct GraphQLWarpRequests {
static let GeoSelectorWarpQuery = GeoSelectorWarpQuery()
...
}
let model = GraphQLRequestModel(query: GraphQLWarpRequests.GeoSelectorWarpQuery.getQuery(), variables: variables)
. , . iOS 0,8 . «» .
, Kotlin. , pull request backend. , .
Kotlin ultiplatform. .
2. SDK
in-house Clickhouse. backend API . . , , , , .
. network client — ktor. .
, . SQLDelight — .
kotlinx.coroutines. kotlinx.serialization.
Android , iOS «» . XCode Firebase Crashlytics . , .
, CrashKiOS Touchlab. CoroutineExceptionHandler, .
, . «». — CoroutineScope
.
Kotlin Multiplatform . SDK .
3. - Android
, , . , , .
iOS - . . — Objective-C . , .
Android - Kotlin. iOS.
Kotlin Multiplatform gradle-.
, , sourceSets .
- commonMain.
, JVM Android,commonMain
. , .
JVM/Android .
org.json kotlinx.serialization JodaTime klock.expect/actual
.
commonMain JVM- , .
, JVMIOException
kotlin.Exception
,ConcurrentHashMap
Stately.
commonMain Android- , .
Android SDKService
,WebSocket
. Kotlin .
SocketService
.
SocketService
interface SocketService { /** * [chatUrl]. [callback] */ fun connect(chatUrl: String, callback: (SocketEvent) -> Unit) /** * . */ fun disconnect() /** * [msg] */ fun send(msg: String) }
API .
iOS runtime- Kotlin, SDK callbackonError
. .
- . .
IceRock.dev . .
Kotlin Multiplatform - . UI UX . , - , .
. Kotlin Multiplatform — iOS . Android- iOS. , .
. Android- build- . . iOS- , Gradle. .
— iOS. , , iOS . . Kotlin , .
. , KMM , . Kotlin Multiplatform . . Slack Telegram, Kotlin Multiplatform.
, . , . , . . , .
現在、さまざまな複雑さの10の共通モジュールがすでにあり、ビジネスロジックを共通コードに移行し続けています。Kotlin Multiplatform Mobileは、モバイルアプリケーション開発の世界を征服する準備ができていると確信しています。