Adding SkParagraph makes app validation on iTunes Connect fail

227 views
Skip to first unread message

Christian Falch

unread,
Nov 22, 2022, 9:59:42 AM11/22/22
to skia-discuss
Hi,

After we added SkParagraph and SkUnicode to React Native Skia we've received some reports about App validation failing when trying to distribute apps built with Skia.

This makes some sense since part of the SkParagraph code is probably used by the iOS SDK itself, like ICU, character shaping etc? 

The following report is what people are getting when they try invalidating apps:

The app references non-public symbols in Payload/X.app/X: _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, _uscript_getScript 

Anyone got any ideas on how we should attack this problem?

Thanks :)
Christian

jlav...@google.com

unread,
Nov 22, 2022, 10:28:39 AM11/22/22
to skia-discuss
My guess is that you are missing ICU somehow. Are you should you link it? You need ICU for SkParagraph to work in Apple. And in Linux. (On Android you can use the system ICU).

Christian Falch

unread,
Nov 22, 2022, 12:33:20 PM11/22/22
to skia-discuss
Hi,

Thanks for getting back!

We're including both libParagraph and libUnicode built by GN / Ninja, which links in ICU on iOS - on Android we're using the built-in system ICU. I can confirm that the output from nm shows the symbols above in the libUnicode.a file.

What's happening is that when we upload an iOS app to the AppStore it checks that your app does not use any private APIs in the iOS SDK. This is basically done by doing a name comparison for the symbols exported. 

These lists of symbols might change from SDK to SDK and is not know in any way - other than the fact that we shouldn't use private APIs.

The problem here seems to be the fact that iOS has a library somewhere that also uses ICU (which sounds possible) - which in turn causes the problem described above.

Christian

Heather Miller

unread,
Nov 25, 2022, 8:34:56 PM11/25/22
to skia-d...@googlegroups.com
As an additional piece of info here- Julia is working on SkUnicode for Android first, iOS next, so you are a little ahead of us getting a good handle on that support. Still, hopefully we can get you up and running on iOS with ICU near term...

--
You received this message because you are subscribed to the Google Groups "skia-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to skia-discuss...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/skia-discuss/5d8b8025-6c3f-48f5-9dc7-1e6c32314889n%40googlegroups.com.

Christian Falch

unread,
Nov 27, 2022, 7:47:00 AM11/27/22
to skia-discuss
Awesome - please let me know if you need more input from us - we'd be happy to provide insight in what's happening on iOS.

Christian

Christian Falch

unread,
Mar 8, 2023, 6:08:53 AM3/8/23
to skia-discuss
Hi Heather and Julia!

Just wanted to hear about the status on this issue since we're getting closer to including support for SkParagraph on iOS/Android in React Native and would like to see if we can include these Skia libraries soon.

Christian

Heather Miller

unread,
Mar 21, 2023, 2:45:23 PM3/21/23
to skia-d...@googlegroups.com
Sorry catching up after being out for a bit.. SkParagraph is supported on both Android and iOS. We'd love to have you using it (and open any issues you find so we can make it better)!

William Candillon

unread,
Mar 27, 2023, 2:11:37 PM3/27/23
to skia-discuss
We updated to chrome/m112 and built an iOS app with skparagraph and skunicode included.
These are the options we use:
"skia_enable_paragraph" => true,
"skia_use_icu" => true,
"skia_use_system_icu" => false,
"skia_use_harfbuzz" => true
"skia_use_system_harfbuzz" => false

When validating the ios archive, we get the same error:
The app references non-public symbols in Payload/RNSkia: _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, _uscript_getScript

We may not have the right option combination to get the build to be valid on iOS?

Kind regards,

William

jlav...@google.com

unread,
Mar 27, 2023, 2:36:03 PM3/27/23
to skia-discuss
Skia is using ICU but does not build it (for external usage) and expects clients to provide it.
So you can use the system ICU but you need to set skia_use_system_icu=true.

Christian Falch

unread,
Mar 27, 2023, 3:57:53 PM3/27/23
to skia-discuss
That sounds awesome - we managed to do that on android - does this mean that it is supported on iOS as well to use system icu?

Christian

jlav...@google.com

unread,
Mar 27, 2023, 4:04:18 PM3/27/23
to skia-discuss
Yes, it always was. The difference is that on Android we can use the built-in system ICU dynamically (and save memory).  On iOS there is no such a thing but the SkParagraph can use ICU you provide.
Reply all
Reply to author
Forward
0 new messages