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
- Try to upload the app to the App Store
- 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
- Use dynamic frameworks in CocoaPods sample. It helps to workaround issue https://github.com/JetBrains/compose-multiplatform/issues/3840 — committed to JetBrains/compose-multiplatform by dima-avdeev-jb 7 months ago
- Use new skiko 0.7.96 (#1157) ## Issue https://github.com/JetBrains/compose-multiplatform/issues/3840 - AppStore/TestFlight verification failed due to usage of "non-public ICU symbols" ## Soluti... — committed to JetBrains/compose-multiplatform-core by eymar 4 months ago
- Use new skiko 0.7.96 (#1157) ## Issue https://github.com/JetBrains/compose-multiplatform/issues/3840 - AppStore/TestFlight verification failed due to usage of "non-public ICU symbols" ## Solution So... — committed to JetBrains/compose-multiplatform-core by eymar 4 months ago
@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:Please let us know if this works for you
hello, sorry, didn’t find a time yet( I’ll try to do it approximately 23-24 December
@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.