Upgrade to Pro — share decks privately, control downloads, hide ads and more …

KMP の Swift export

KMP の Swift export

extension DC 2025 Day2 @Sansan

※ 2025/10/2 現在、Swift export のステータスは experimental です

Avatar for Koki Hirokawa

Koki Hirokawa

October 02, 2025
Tweet

More Decks by Koki Hirokawa

Other Decks in Technology

Transcript

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

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

    Kotlin Multiplatform Development Roadmap for 2025 ٸϐονͰ։ൃத 2025೥ͷ໨ඪ͸࠷ॳͷެ։൛ϦϦʔε Kotlin 2.1.0 ॳظஈ֊ͷެ։ 20
  3. Swift export Experimental What’s Next for Kotlin Multiplatform and Compose

    Multiplatform – August 2025 Update suspend function ΍ Flow ͱ͍ͬͨඇಉظॲཧͷαϙʔτ 2026೥ʹ҆ఆ൛ͷϦϦʔεΛ໨ࢦ͢ 21
  4. 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
  5. Top-level function Experimental Kotlin // Common.kt fun sharedFunction(): Int =

    5 Objective-C export import Shared CommonKt.sharedFunction() Swift export import Shared sharedFunction() 25
  6. 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
  7. 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
  8. 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
  9. Package support Experimental // ExportedKotlinPackages.swift public enum com { public

    enum github { public enum jetbrains { public enum swiftexport { public enum packagea { } } } } } 30
  10. 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
  11. ·ͱΊ Swift ͔Β Kotlin Ͱॻ͔ΕͨॲཧΛݺͼग़͢ʹ͸ Objective-C Λհ͢Δඞཁ͕͋Δ Objective-C export Objective-C

    Λհ͞ͳ͍ Swift export ͕։ൃத Experimental Apple platform Ͱͷ KMP Λ࢖ͬͨ։ൃऀମݧ͕޲্͢ΔݟࠐΈ 34