Kotlin 1.4 Online Event October 14, 2020 Kathrinpetrova

Kotlin 1.4 Online Event October 14, 2020 Kathrinpetrova

Kotlin 1.4 Online Event It's time for Kotlin Multiplatform Mobile! Ekaterina Petrova KathrinPetrova October 14, 2020 I love mobile development, but I can’t stand writing the Me neither! same code twice! UI Views Presentation Presenters, View Models, Controllers Business / Domain Entities, Use Cases, Interactors Data / Core Repositories, HTTP Clients, Cache UI centric UI Views Presentation Presenters, View Models, Controllers Business / Domain Entities, Use Cases, Interactors Data / Core Repositories, HTTP Clients, Cache ⚙ Core centric UI centric UI Views React Native Flutter Presentation Presenters, View Models, Controllers Xamarin Forms Business / Domain Entities, Use Cases, Interactors Data / Core Repositories, HTTP Clients, Cache ⚙ Core centric UI centric UI Views React Native Flutter How can I share Presentation business logic Presenters, View Models, Controllers Xamarin Forms and core code? Business / Domain Entities, Use Cases, Interactors Data / Core Repositories, HTTP Clients, Cache ⚙ Core centric UI centric UI for thin clients, Views React Native simple apps, MVP Flutter Presentation Presenters, View Models, Controllers Xamarin Forms Business / Domain Entities, Use Cases, Interactors Data / Core Repositories, HTTP Clients, Cache ⚙ Core centric UI centric UI for thin clients, Views React Native simple apps, MVP Flutter Presentation Presenters, View Models, Controllers Xamarin Forms Business / Domain Entities, Use Cases, Interactors for complex apps, Fat clients, Data / Core strict requirements Repositories, HTTP Clients, Cache for the UI quality ⚙ Core centric UI centric UI for thin clients, Views React Native simple apps, MVP Flutter Presentation Presenters, View Models, Controllers Xamarin Forms Business / Domain Xamarin Native Entities, Use Cases, Interactors for complex apps, JavaScript + JavaScriptCore Fat clients, Data / Core strict requirements Repositories, HTTP Clients, Cache C for the UI quality + wrappers ⚙ Core centric I already have a project I’m creating a new one UI centric UI for thin clients, Views simple apps, MVP Presentation Presenters, View Models, Controllers Business / Domain Entities, Use Cases, Interactors Kotlin Multiplatform for complex apps, Fat clients, Data / Core Mobile strict requirements Repositories, HTTP Clients, Cache for the UI quality ⚙ Core centric What is Kotlin Multiplatform Mobile? KMM ⚙ Kotlin Multiplatform + Mobile Features Kotlin/Native Kotlin/JVM KMM ⚙ Kotlin Multiplatform + Mobile Features Multiplatform Gradle DSL CocoaPods integration + Kotlin/Native + Android Studio Plugin + Kotlin/JVM ... Kotlin + Creating a mobile application with KMM Step by step Going cross-platform with KMM ✅ New project 樂 Existing project Going cross-platform with KMM ✅ New project 樂 Existing project Going cross-platform with KMM ✅ New project ✅ Existing project Kotlin/Native Kotlin/JVM Going cross-platform with KMM ✅ New project ✅ Existing project Connect .framework to iOS project and .jar to Android project Going cross-platform with KMM ✅ New project ✅ Existing project Write shared code in KMM Module Implement native UI in Android/iOS projects Connect .framework to iOS project and .jar to Android project Going cross-platform with KMM ✅ New project ✅ Existing project Write shared code in KMM Module Take code written in Kotlin for Android Implement native UI in Android/iOS projects Refactor it to be compatible with iOS Connect .framework to iOS project and .jar to Android project Going cross-platform with KMM ✅ New project ✅ Existing project Take a new feature Write shared code in KMM Module Take code written in Kotlin for Android Implement native UI in Android/iOS projects Refactor it to be compatible with iOS Connect .framework to iOS project and .jar to Android project ✅ Networking ✅ Cache ✅ Native UI What to share? KMM App Architecture What to share? UI Views Presentation Presenters, View Models, Controllers Business / Domain Entities, Use Cases, Interactors Data / Core Repositories, HTTP Clients, Cache Android Engine iOS Engine ThreadPool + NSURLSession HttpURLConnection Data / Core Repositories, HTTP Clients, Cache Android Engine iOS Engine kotlinx.serialization ThreadPool + NSURLSession HttpURLConnection Data / Core Repositories, HTTP Clients, Cache SQLDelight Android Engine iOS Engine kotlinx.serialization Android Driver ThreadPool + NSURLSession Native Driver HttpURLConnection Data / Core Repositories, HTTP Clients, Cache Entity.kt Entity.kt SQLDelight Android Engine iOS Engine kotlinx.serialization Android Driver ThreadPool + NSURLSession Native Driver HttpURLConnection Data / Core Business / Domain Repositories, HTTP Clients, Cache Entities, Use Cases, Interactors SpaceXAPI.kt Entity.kt Entity.kt Database.kt SQLDelight Android Engine iOS Engine kotlinx.serialization Android Driver ThreadPool + NSURLSession Native Driver HttpURLConnection Data / Core Business / Domain Repositories, HTTP Clients, Cache Entities, Use Cases, Interactors SpaceXSDK.kt SpaceXAPI.kt Entity.kt Entity.kt Database.kt SQLDelight Android Engine iOS Engine kotlinx.serialization Android Driver ThreadPool + NSURLSession Native Driver HttpURLConnection Data / Core Business / Domain Repositories, HTTP Clients, Cache Entities, Use Cases, Interactors Source-set commonMain Source-set Source-set AndroidMain iosMain Compilation Compilation main main .jar .framework Target Target Android iOS kotlin { android() Source-set ios() commonMain } Source-set Source-set AndroidMain iosMain Compilation Compilation main main .jar .framework Target Target Android iOS kotlin { android() Source-set ios() commonMain sourceSets { val commonMain by getting { dependencies { implementation("io.ktor:ktor-client-core:$kVrs") implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:$sVrs") implementation("io.ktor:ktor-client-serialization:$kVrs") implementation("com.squareup.sqldelight:runtime:$sqlVrs") } } } Source-set Source-set } AndroidMain iosMain Compilation Compilation main main .jar .framework ✅ stdlib by default Target Target Android iOS kotlin { android() Source-set ios() commonMain sourceSets { val commonMain by getting { dependencies { implementation("io.ktor:ktor-client-core:$kVrs") implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:$sVrs") implementation("io.ktor:ktor-client-serialization:$kVrs") implementation("com.squareup.sqldelight:runtime:$sqlVrs") } } val androidMain by getting { Source-set Source-set dependencies { AndroidMain iosMain implementation("io.ktor:ktor-client-android:$kVrs") implementation("com.squareup.sqldelight:android-driver:$sVrs") } } val iosMain by getting { dependencies { implementation("io.ktor:ktor-client-ios:$kVrs") Compilation Compilation implementation("com.squareup.sqldelight:native-driver:$sVrs") main main } } } } .jar .framework ✅ stdlib by default ✅ specifying dependencies only once Target Target Android iOS kotlin { android() Source-set ios() commonMain sourceSets { val commonMain by getting { dependencies { implementation("io.ktor:ktor-client-core:$kVrs") implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:$sVrs") Source-set implementation("io.ktor:ktor-client-serialization:$kVrs") iosMain implementation("com.squareup.sqldelight:runtime:$sqlVrs") } } val androidMain by getting { dependencies { implementation("io.ktor:ktor-client-android:$kVrs") Source-set Source-set Source-set AndroidMain iosArm64Main iosX64Main implementation("com.squareup.sqldelight:android-driver:$sVrs") } } val iosMain by getting { dependencies { implementation("io.ktor:ktor-client-ios:$kVrs") Compilation Compilation Compilation implementation("com.squareup.sqldelight:native-driver:$sVrs") main main main } } } } .jar .framework .framework ✅ stdlib by default ✅ specifying dependencies only once Target Target Target Android iosArm64 iosX64 ✅ hierarchical project structure support Diving into Kotlin Multiplatform Dmitry Savvinov Team Lead in Kotlin Multiplatform Mobile What to share? UI Views Presentation Presenters, View Models, Controllers Business / Domain Entities, Use Cases, Interactors Data / Core Repositories, HTTP Clients, Cache What to share? UI Views Presentation Presenters, View Models, Controllers Business / Domain Entities, Use Cases, Interactors Data / Core Repositories, HTTP Clients, Cache Working on shared code with KMM Tight integration with the iOS development process Tight integration with the iOS development process ● Call Kotlin code from Objective-C/Swift and use iOS libraries from Kotlin ● Integrate KMM module in iOS project through CocoaPods ● Write, run, test, debug shared code all in Android Studio Bidirectional interoperability with Objective-C/Swift fun getLaunches(): List<RocketLaunch> { return database.getAllLaunches() } .kt let launches = sdk.getLaunches() let launch: RocketLaunch? = launches.first .swift Bidirectional interoperability with Objective-C/Swift suspend fun getLaunches(): List<RocketLaunch> { val cachedLaunches = database.getAllLaunches() return if (cachedLaunches.isNotEmpty()) { cachedLaunches } else { api.getAllLaunches() } } .kt sdk.getLaunches() { launches, _ in let launch: RocketLaunch? = launches?.first } .swift Bidirectional interoperability with Objective-C/Swift @Throws(Exception::class) suspend fun getLaunches(): List<RocketLaunch> { val cachedLaunches = database.getAllLaunches() return if (cachedLaunches.isNotEmpty()) { cachedLaunches } else { api.getAllLaunches() } } .kt sdk.getLaunches() { launches, error in if let launches = launches { print(launches) } else { print(error?.localizedDescription) } } .swift

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    60 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us