Skip to content

Fix iOS marker linkage with Compose Multiplatform 1.12 - #178

Open
Dwite wants to merge 1 commit into
software-mansion:mainfrom
Dwite:fix/compose-1.12-compatibility
Open

Dwite wants to merge 1 commit into
software-mansion:mainfrom
Dwite:fix/compose-1.12-compatibility

Conversation

@Dwite

@Dwite Dwite commented Sep 16, 2026 •

Copy link
Copy Markdown

Problem

Custom markers can crash on iOS when an application consumes the published core 0.9.1 library with Compose Multiplatform 1.12.0:

kotlin.internal.IrLinkageError: Function 'encodeToData' can not be called:
No function found for symbol 'org.jetbrains.skia/Image.encodeToData|
encodeToData(org.jetbrains.skia.EncodedImageFormat;kotlin.Int){}[0]'

The failing path is ImageBitmap.toUIImage() in Extensions.kt. The older precompiled Kotlin/Native library references the previous Skia signature. Recompiling the existing source against Compose 1.12 resolves that call without changing marker behavior.

Changes

  • Upgrade Compose to 1.12.0 and Kotlin to 2.4.0.
  • Upgrade Coroutines to 1.11.0 and declare it in core. Strict linking with 1.10.2 exposes references to the old SubclassOptInRequired constructor.
  • Fail framework linking on partial-linkage errors.
  • Remove the unsupported iosX64 target and obsolete native-cache properties.
  • Add an iOS test that executes the custom-marker bitmap conversion, and run it in CI.

Validation

  • Reproduced the exact encodeToData error with a separate iOS simulator test consuming the published 0.9.1 binary and Compose 1.12.0.
  • The same test passes with this source build (1 test, 0 failures).
  • Passed :kmp-maps:core:linkDebugFrameworkIosSimulatorArm64 with strict partial linkage.
  • Passed :kmp-maps:core:compileDebugKotlinAndroid.
  • Passed :kmp-maps:core:linkReleaseFrameworkIosArm64 with strict partial linkage.
  • Passed :kmp-maps:core:compileKotlinJvm, :kmp-maps:google-maps:compileDebugKotlinAndroid, and :kmp-maps:google-maps:compileKotlinJvm.
  • Google Maps iOS integration has not been validated locally.

This requires a new library publication before downstream applications can consume the rebuilt binaries.

Update the Kotlin and Coroutines toolchain and test native marker encoding. Drop iosX64, which is unsupported by the new toolchain, and fail framework builds on partial linkage.
@Dwite Dwite closed this Sep 16, 2026
@Dwite Dwite reopened this Sep 17, 2026
@BrandonSmith

Copy link
Copy Markdown

We would love for this PR to land soon. For now, we have to fork and publish locally in our CI flow to get kmp-maps working.

This is currently a blocker for us as well, so getting this merged and released would save us from maintaining our own fork. Thanks for the work on this!

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants