compose-multiplatform: App Store verification fails with "The app references non-public symbols"

Describe the bug I implemented a library which uses Compose Multiplatform to display logs and added it to the iOS project. It builds fine, but when I upload the app to the App Store, lane fails with the following error:

ERROR: [ContentDelivery.Uploader] Asset validation failed (11) The app references non-public symbols in Payload/AppName.app/AppName: _ubidi_close, _ubidi_getDirection, _ubidi_getLength, _ubidi_getLevelAt, _ubidi_openSized, _ubidi_reorderVisual, _ubidi_setPara, _ubrk_clone, _ubrk_current, _ubrk_first, _ubrk_getRuleStatus, _ubrk_next, _uloc_getDefault, _uloc_toLanguageTag, _uscript_getScript (ID: b685f704-5d49-42c6-b138-5d9237029ac2)

I googled this problem and it seems that there’s some problem with SKIA library (https://groups.google.com/g/skia-discuss/c/eY229SYmHbA)

So there’s a question - how can I fix this issue? Thanks in advance for the answer!

Affected platforms

  • iOS

Versions

  • Kotlin version*: 1.9.10
  • Compose Multiplatform version*: 1.5.3
  • OS version(s)* (required for Desktop and iOS issues): any
  • OS architecture (x86 or arm64): arm64

To Reproduce

  1. Try to upload the app to the App Store
  2. See result

Expected behavior Successfull upload of the IPA to the App Store

Additional context XCode version - 15.0 Here are libs I used

val commonMain by getting {
            dependencies {
                implementation(compose.runtime)
                implementation(compose.material3)
                implementation(compose.materialIconsExtended)
                implementation("io.realm.kotlin:library-base:1.11.0")
                implementation("com.arkivanov.decompose:extensions-compose-jetbrains:2.1.2-compose-experimental")
                implementation("com.arkivanov.decompose:decompose:2.1.2")
                implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.1")
            }
        }
        val androidMain by getting {
            dependencies {
                implementation("androidx.activity:activity-compose:1.8.0")
            }
        }
        val iosSimulatorArm64Main by getting
        val iosMain by getting {
            dependsOn(commonMain)
            iosSimulatorArm64Main.dependsOn(this)
        }

About this issue

  • Original URL
  • State: closed
  • Created 8 months ago
  • Comments: 44 (17 by maintainers)

Commits related to this issue

Most upvoted comments

@dima-avdeev-jb sorry for the delay, here’s the sample https://github.com/SergeiMikhailovskii/log-view-app

and here’s the library which uses compose-multiplatform https://github.com/sergei-mikhailovskii-idf/kmm-debug-view

Hi there!

We’ve renamed these symbols in an underlying library to avoid name-conflicts and false-positive “non-public symbols” detection. This fix will be available in 1.6.1. But if you want to try it out now, you can manually replace a skiko library by adding this at the end of build.gradle.kts file:

configurations.all {
    resolutionStrategy.eachDependency {
        if (requested.group.startsWith("org.jetbrains.skiko")) {
            useVersion("0.7.96")
        }
    }
}

Please let us know if this works for you

@sergei-mikhailovskii-idf Can you please try some of solutions what I mentioned before?

hello, sorry, didn’t find a time yet( I’ll try to do it approximately 23-24 December

@sergei-mikhailovskii-idf Can you please check validation in Xcode when building archive?

To do so you need folow these steps:

  • Go to Product -> Archive
image * Don't use Xcode Cloud and start proccess of Archive again. * Wait some time while archiving * Choose Validate App image

@dima-avdeev-jb I select “Validate App” in the third step and it also fine, but when I select “Distribute App” I get an email from Apple telling me the same error message! I hope this helps.