Slide 1

Slide 1 text

KMP ͷ Swift export 2025/10/2 extension DC 2025 Day2 @Sansan Koki Hirokawa

Slide 2

Slide 2 text

@pihero13 KokiHirokawa Sony Honda Mobility Inc. 1

Slide 3

Slide 3 text

Swift export ͱ͸ Experimental Objective-C Λհͣ͞ʹ Swift ͔Β Kotlin Ͱॻ͔ΕͨॲཧΛݺͼग़ͨ͢Ίͷٕज़ 2

Slide 4

Slide 4 text

ΞδΣϯμ KMP ͱ͸ Objective-C export ͱ͸ Swift export ͱ͸ Objective-C export ͱ Swift export ͷҧ͍ ·ͱΊ 3

Slide 5

Slide 5 text

KMP ͱ͸

Slide 6

Slide 6 text

KMP - ֓ཁ Kotlin Multiplatform KMP Λ࢖༻͢ΔͱҟͳΔϓϥοτϑΥʔϜؒͰ Kotlin ίʔυΛڞ༗Ͱ͖Δ 5

Slide 7

Slide 7 text

KMP - ରԠϓϥοτϑΥʔϜ Android JVM iOS macOS Linux ... 6

Slide 8

Slide 8 text

Objective-C export ͱ͸

Slide 9

Slide 9 text

KMP - Apple platform 8

Slide 10

Slide 10 text

KMP - Apple platform 9

Slide 11

Slide 11 text

KMP - Apple platform 10

Slide 12

Slide 12 text

KMP - Apple platform 11

Slide 13

Slide 13 text

Objective-C header 12

Slide 14

Slide 14 text

Objective-C header 13

Slide 15

Slide 15 text

Objective-C export 14

Slide 16

Slide 16 text

Objective-C export Objective-C ͷϔομʔΛಡΉඞཁ͕͋Δ ͢΂ͯͷ I/F ͕1ͭͷϔομʔʹ·ͱ·Δ Swift Β͘͠ͳ͍ API ͕ఏڙ͞ΕΔ͜ͱ͕͋Δ γʔϜϨεʹ౷߹Ͱ͖ͳ͍ 15

Slide 17

Slide 17 text

Swift export ͱ͸

Slide 18

Slide 18 text

Swift export Experimental 17

Slide 19

Slide 19 text

Swift export Experimental Kotlin Multiplatform Development Roadmap for 2024 ϩʔυϚοϓʹొ৔ 18

Slide 20

Slide 20 text

Swift export Experimental Kotlin Multiplatform Development Roadmap for 2024 ϩʔυϚοϓʹొ৔ Kotlin Multiplatform Development Roadmap for 2025 ٸϐονͰ։ൃத 2025೥ͷ໨ඪ͸࠷ॳͷެ։൛ϦϦʔε 19

Slide 21

Slide 21 text

Swift export Experimental Kotlin Multiplatform Development Roadmap for 2024 ϩʔυϚοϓʹొ৔ Kotlin Multiplatform Development Roadmap for 2025 ٸϐονͰ։ൃத 2025೥ͷ໨ඪ͸࠷ॳͷެ։൛ϦϦʔε Kotlin 2.1.0 ॳظஈ֊ͷެ։ 20

Slide 22

Slide 22 text

Swift export Experimental What’s Next for Kotlin Multiplatform and Compose Multiplatform – August 2025 Update suspend function ΍ Flow ͱ͍ͬͨඇಉظॲཧͷαϙʔτ 2026೥ʹ҆ఆ൛ͷϦϦʔεΛ໨ࢦ͢ 21

Slide 23

Slide 23 text

Swift export Experimental What’s Next for Kotlin Multiplatform and Compose Multiplatform – August 2025 Update suspend function ΍ Flow ͱ͍ͬͨඇಉظॲཧͷαϙʔτ 2026೥ʹ҆ఆ൛ͷϦϦʔεΛ໨ࢦ͢ Kotlin 2.2.20 Experimental support 22

Slide 24

Slide 24 text

Swift export ͷ։ൃঢ়گ Experimental https://docs.google.com/spreadsheets/d/ 157wQt05ZyaJAP_P1wigXDs6nW9q7clqbpIDAfMrFhOg/ 23

Slide 25

Slide 25 text

Objective-C export ͱ Swift export ͷҧ͍

Slide 26

Slide 26 text

Top-level function Experimental Kotlin // Common.kt fun sharedFunction(): Int = 5 Objective-C export import Shared CommonKt.sharedFunction() Swift export import Shared sharedFunction() 25

Slide 27

Slide 27 text

Multi-module support Experimental Kotlin // Common.kt (Shared) fun sharedFunction(): Int = 5 // Common.kt (module-a) fun sharedFunction(): Int = 10 Objective-C export import Shared CommonKt.sharedFunction() CommonKt_.sharedFunction() Swift export import Shared import ModuleA Shared.sharedFunction() ModuleA.sharedFunction() 26

Slide 28

Slide 28 text

Multi-module support Experimental Objective-C export // Shared.h __attribute__((objc_subclassing_restricted)) __attribute__((swift_name("CommonKt"))) @interface SharedCommonKt : SharedBase + (int32_t)sharedFunction __attribute__((swift_name("sharedFunction()" ))); @end __attribute__((objc_subclassing_restricted)) __attribute__((swift_name("CommonKt_"))) @interface SharedCommonKt_ : SharedBase + (int32_t)sharedFunction __attribute__((swift_name("sharedFunction()" ))); @end Swift export // Shared.swift public func sharedFunction() -> Swift.Int32 { ExportedKotlinPackages.com.github.jetbrains. swiftexport.sharedFunction() } // ModuleA.swift public func sharedFunction() -> Swift.Int32 { ExportedKotlinPackages.com.github.jetbrains. modulea.sharedFunction() } 27

Slide 29

Slide 29 text

Package support Experimental Kotlin // MODULE: shared // FILE: Common.kt package com.github.jetbrains.swiftexport fun sharedFunction(): Int = 5 // MODULE: shared // FILE: Common.kt package com.github.jetbrains.swiftexport.packagea fun sharedFunction(): Int = 10 28

Slide 30

Slide 30 text

Package support Experimental Objective-C export import Shared CommonKt.sharedFunction() CommonKt.sharedFunction_() Swift export import Shared sharedFunction() packagea.sharedFunction() 29

Slide 31

Slide 31 text

Package support Experimental // ExportedKotlinPackages.swift public enum com { public enum github { public enum jetbrains { public enum swiftexport { public enum packagea { } } } } } 30

Slide 32

Slide 32 text

Swift export ͷࢼ͠ํ Experimental // build.gradle.kts @OptIn(ExperimentalSwiftExportDsl::class) swiftExport { // Root module name moduleName = "Shared" // Collapse rule flattenPackage = "com.github.jetbrains.swiftexport" } // Run Script Phase ./gradlew :shared:embedSwiftExportForXcode 31

Slide 33

Slide 33 text

Swift export ͷࢼ͠ํ Experimental https://github.com/Kotlin/swift-export-sample kotlin version Λ 2.2.20 ʹมߋ 32

Slide 34

Slide 34 text

·ͱΊ

Slide 35

Slide 35 text

·ͱΊ Swift ͔Β Kotlin Ͱॻ͔ΕͨॲཧΛݺͼग़͢ʹ͸ Objective-C Λհ͢Δඞཁ͕͋Δ Objective-C export Objective-C Λհ͞ͳ͍ Swift export ͕։ൃத Experimental Apple platform Ͱͷ KMP Λ࢖ͬͨ։ൃऀମݧ͕޲্͢ΔݟࠐΈ 34