Slide 1

Slide 1 text

ͤΊͯɺωΠςΟϒΒ͘͠ ϚϧνϓϥοτϑΥʔϜͱఫୀઓུ 2025.11.01 Kotlin Fest 2025 RyuNen344

Slide 2

Slide 2 text

About Me • Bunjiro Miyoshi (id: RyuNen344) • Kodee͘Μͷ͵͍͙ΔΈ͸3ͭɺΩʔϗϧμʔ͸4ͭ • Kodee͘Μݟ͔͚ͨΒͥͻ #KodeeEverywhere ͷϋογϡλάΛ͚ͭͯᄁ͖Λʂ

Slide 3

Slide 3 text

About Me • KMPͱͷग़ձ͍͸DroidKaigi 2020ͷΞϓϦ • KMPΛ࢝Ίͱ͢ΔϚϧνϓϥοτϑΥʔϜΛ࢖ͬͨΞϓϦΛ2021೥ ͔ΒϓϩμΫγϣϯͰӡ༻ • डୗ ~ ࣗࣾαʔϏεͰͷ։ൃܦݧ͋Γ

Slide 4

Slide 4 text

⚠ Caution ⚠ • Kotlin/Native͸ϦεΫϔοδ͕ޮ͘બ୒ࢶͰ͍͍ͧɺͱ͍͏࿩Λ͠·͢ • ٕͨͩ͠ज़બఆʹۜͷ஄ؙ͸ͳ͍ • ࣄۀϑΣʔζɺνʔϜମ੍ɺशख़౓ͳͲ༷ʑͳม਺Λߟྀܾͯ͠ఆ͢΂͖ • Kotlin/NativeҎ֎ͷબ୒ࢶΛ൱ఆ͢Δҙਤ͸ͳ͍ • KMP΍CMPΛಋೖݕ౼͢ΔࡍʹɺͲΕ͙Β͍Kotlin/Native͕ϦεΫϔο δʹ໾ཱ͔ͭͱ͍͏؍఺ͰࢀߟʹͳΕ͹ϋοϐʔ

Slide 5

Slide 5 text

ʮωΠςΟϒΒ͠͞ʯͱʮఫୀઓʯ

Slide 6

Slide 6 text

ωΠςΟϒΒ͠͞ • Platform APIΛ௚઀ݺͼग़͍ͯ͠Δ͜ͱͰ͸ͳ͍ • ͲͷϚϧνϓϥοτϑΥʔϜٕज़΋࠷ऴతʹ͸OSͷAPIΛݺͿ

Slide 7

Slide 7 text

ωΠςΟϒΒ͠͞ Scrolling, Animation, FHD/60FPS

Slide 8

Slide 8 text

Text, Emoji, Shapes ωΠςΟϒΒ͠͞

Slide 9

Slide 9 text

Navigation, Drag, swipe, and fl ing Back button, Pinch in/out ωΠςΟϒΒ͠͞

Slide 10

Slide 10 text

ωΠςΟϒΒ͠͞΁ͷۙಓ Platform API ΛϒϦοδͳ͠Ͱ௚઀ར༻͢Δ Platform API͔Βԕ͔͟Ε͹ԕ͔͟Δ΄Ͳɺ ʮωΠςΟϒΒ͠͞ʯΛग़͢ϋʔυϧ্͕͕Δ

Slide 11

Slide 11 text

ఫୀઓ

Slide 12

Slide 12 text

ఫୀઓ͸೉͍͠ • αϯΫίετͷढറ • ࠷దղͷมԽ • ֶशίετɾ։ൃίετͷ৺ཧతϋʔυϧ • ݱঢ়ҡ࣋όΠΞε • අ༻ରޮՌͷ൑அ • ݱঢ়೺Ѳͷ࿪Έ ϑϧϦϓϨΠε͸ك ݱ࣮తʹ͸ஈ֊తͳఫୀઓͷ܁Γฦ͠ • ΰʔϧઃఆͷ೉͠͞ • ৽چٕज़ڞଘʹΑΔೝ஌ෛՙ • ϝϯςφϯείετ૿Ճ • Ϧιʔεͷ෼ࢄ

Slide 13

Slide 13 text

ϚϧνϓϥοτϑΥʔϜɺͳͥ

Slide 14

Slide 14 text

ϚϧνϓϥοτϑΥʔϜͷఫୀઓ • InterfaceΛҙࣝͨ͠ϙΠϯτΛ཈͑Δඞཁ͋Γ

Slide 15

Slide 15 text

Compose Multiplatform for iOS Is Stable🎉 2025.08 1.8.0 Kotlin Multiplatform/Compose Multiplatform

Slide 16

Slide 16 text

Compose Multiplatform for iOS

Slide 17

Slide 17 text

Kotlin Multiplatform Mobile -> KMP Plugin

Slide 18

Slide 18 text

Swift on Android Studio • SwiftपΓͷIDEαϙʔτ ͕ڧԽ • Swift Package Manager ͷೝࣝ • ίʔυδϟϯϓ/ิ׬ɺ OKʢ3rd partyෆՄʣ

Slide 19

Slide 19 text

KMP × Xcode Extensionͳ͠ͰKotlinଆͷϏϧυɺϥϯλΠϜΤϥʔΛXcodeͰදࣔͰ͖Δ

Slide 20

Slide 20 text

Skiko͸Ғେ͚ͩͲ... • Compose Multiplatform͸Platform APIΛ௚઀ݺͼग़͍ͯ͠ͳ͍...͕ • Kotlin/NativeͰ͋Ε͹ҎԼͷ͜ͱΛແ೉ʹ͜ͳͤΔʢ΋ͪΖΜϋʔυ ϧ΋͋Δʣ • Platform APIͷݺͼग़͠ • ہॴతͳద༻ • 3rd party libraryͷऔΓࠐΈ

Slide 21

Slide 21 text

Kotlin/Native Power💪 • Case1. Platform API - NSURLSession • Case2. UI - MapKit • Case3. Interop - Alamo fi re

Slide 22

Slide 22 text

Case.1 Platform API: NSURLSession

Slide 23

Slide 23 text

Case.1 Platform API: NSURLSession

Slide 24

Slide 24 text

Case.2 UI: MapKit

Slide 25

Slide 25 text

Case.2 UI: MapKit • SwiftʹΑΔ ViewControllerͷ࣮૷ • MKMapViewͷอ࣋ • viewDidLoadͰදࣔ

Slide 26

Slide 26 text

Case.2 UI: MapKit • KotlinʹΑΔViewController ͷ࣮૷ • ͳΜ͔ͩ༨ܭͳؔ਺͕ଟ͍

Slide 27

Slide 27 text

Case.2 UI: MapKit • MKMapViewͷอ࣋ • viewDidLoadͰදࣔ • SwiftͱॲཧͷྲྀΕ͸ಉ͡

Slide 28

Slide 28 text

Case.2 UI: MapKit K/NͰ࣮૷ͨ͠Obj-CͷαϒΫϥεΛExportͰ͖ͳ͍ https://kotlinlang.org/docs/native-objc-interop.html#unsupported

Slide 29

Slide 29 text

Case.2 UI: MapKit @OverrideInitΛ෇༩ͨ͠ݩͷΠχγϟϥΠβͱҰக͢ΔίϯετϥΫλʔ͕ඞཁ https://kotlinlang.org/docs/native-objc-interop.html#subclassing-swift-objective-c-classes-and-protocols-from-kotlin

Slide 30

Slide 30 text

Case.2 UI: MapKit

Slide 31

Slide 31 text

Case.2 UI: MapKit K/NͰ͸ϙΠϯλΛ࢖͏࣮૷͕Α͘ొ৔͢Δ

Slide 32

Slide 32 text

Case.3 Interop: Alamo fi re • Alamo fi re/Alamo fi re • NSURLSessionΛϥοϓ͢ΔSwift ޲͚ͷϥΠϒϥϦ • androidͰ͍͏ͱ͜ΖͷOkHttp

Slide 33

Slide 33 text

Case.3 Interop: Alamo fi re • >For example, you can use CocoaPods integration or set up a cinterops con fi guration. • https://kotlinlang.org/docs/native-c-interop-stability.html#third-party- libraries • CocoaPods͸Read-OnlyʹͳΔ͜ͱ͕Ξφ΢ϯε͞Ε͍ͯΔͨΊSPMΛ࢖༻͢Δ

Slide 34

Slide 34 text

Case.3 Interop: Alamo fi re

Slide 35

Slide 35 text

Case.3 Interop: Alamo fi re • Package.swift͸௨ৗͷ΋ͷͱ΄΅ มΘΒͳ͍ • XCFrameworkΛॻ͖ग़ͨ͢Ίʹ BlankͰ΋Α͍ͷͰproductͱ targetΛઃఆ͢Δඞཁ͋Γ

Slide 36

Slide 36 text

Case.3 Interop: Alamo fi re • `src/nativeInterop/cinteropʹ.def`Λ഑ஔ͢Δ • https://kotlinlang.org/docs/native-de fi nition- fi le.html • build.gradleͰcinteropઃఆΛߦ͍ɺcompiler opt, linker optΛઃఆ͢ Δ

Slide 37

Slide 37 text

Case.3 Interop: Alamo fi re • defϑΝΠϧʹ௚઀௚઀Obj-CͷίʔυΛهࡌ͢Δ͜ͱ΋Մೳ • @see touchlab/CrashKiOS

Slide 38

Slide 38 text

Case.3 Interop: Alamo fi re • XCFrameworkʹؚ·ΕΔϔομʔ ͷύε͸࣮ػ/γϛϡϨʔλʔ, CPU ͷΞʔΩςΫνϟʹΑͬͯҟͳΔͷ ͰKonanTargetʹΑͬͯ෼ذͤ͞Δ

Slide 39

Slide 39 text

Case.3 Interop: Alamo fi re • Alamo fi reͷAF͕ݟ͔ͭΒͳ͍ • Swift޲͚ϥΠϒϥϦͷଟ͘͸Obj-C༻ϔομʔΛఏڙ͍ͯ͠ͳ͍

Slide 40

Slide 40 text

Case.3 Interop: Alamo fi re

Slide 41

Slide 41 text

Case.3 Interop: Alamo fi re

Slide 42

Slide 42 text

Kotlin/NativeɺͲ͏ʁ

Slide 43

Slide 43 text

Kotlin/Native΋ۜͷ஄ؙͰ͸ͳ͍ 1. Swift FrameworkΛݺͼग़ͤͳ͍ • औΓࠐΉʹ͸ϥούʔ࣮૷Λߦ͍, ObjC HeaderΛੜ੒͢Δඞཁ͕͋Δ • ϥούʔ࣮૷ͷ೉౓͸େ෯ʹԼ͕͍ͬͯΔ͕खؒ͸͔͔Δ • ௚઀APIΛݺ΂Δͱ͍͏ڧΈ͕ബΕΔ 2. ObjCͷͳ͍/ඇਪ঑ͱ֦ͯ͠ு͞Εͳ͘ͳͬͨPlatform API/Framework͕͋Δ 3. Kotlin/Nativeͷػೳ੍ݶ • Obj-CͷαϒΫϥεΛExportͰ͖ͳ͍ͳͲݴޠػೳతͳ੍໿ • Τϥʔͷ఻೻͕൥ࡶ

Slide 44

Slide 44 text

Case.? KMP/CMPΛ΍ΊΔͱ͖ • ஔ͖׵͑࣌ͷ೉౓্͕͕Βͳ͍Α͏ʹద੾ʹinterfaceΛ۠੾͓ͬͯ͘ • androidଆͷ࣮૷͸ͦͷ··ࢿ࢈ʹͳΔͷͰOK • Swift͕௚઀৮͍ͬͯΔՕॴ͔Βஔ͖׵͑Δ • ࣮૷͕៉ྷʹ۠੾Εͳ͍ͱ͖΋যΒͳ͍ • K/NͰ͓஡Λ୙ͤΔ͔ݕ౼͢Δ

Slide 45

Slide 45 text

Key Takeaways • ྖҬΛҙٕࣝͨ͠ज़બఆɾઃܭɾ࣮૷ • ఫୀΛલఏͱ͢Δͱࣗͣͱݟ͑ͯ͘Δ • Kotlin/Native͸݁ߏແ஡͕Ͱ͖Δ • InterfaceͱImplementationΛ্खʹ۠੾Εͳ͍৔߹ͷϦεΫϔοδ ͱͰ͖Δ

Slide 46

Slide 46 text

EOF