apotocki / icu4c-iosx

Builds ICU static libraries and packages them as XCFrameworks for iOS (simulator and device), visionOS (simulator and device), macOS, and Mac Catalyst (Intel & Apple Silicon M1).
Other
37 stars 16 forks source link

ITMS-90338: Non-public API usage #4

Open hxicoder opened 2 years ago

hxicoder commented 2 years ago

When I integrated the ICU library and submitted the IPA package, it was rejected by apple

ITMS-90338: Non-public API usage - The app references non-public symbols in xxxx: _ubrk_current, _ubrk_first, _ubrk_getRuleStatus, _ubrk_isBoundary, _ubrk_next, _unorm_normalize. If method names in your source code match the private Apple APIs listed above, altering your method names will help prevent this app from being flagged in future submissions. In addition, note that one or more of the above APIs may be located in a static library that was included with your app. If so, they must be removed. For further information, visit the Technical Support Information athttp://developer.apple.com/support/technical/

Best regards,

The App Store Team

apotocki commented 2 years ago

Thank you for your report! But the goal of this project is only to build ICU for Apple platforms. The method naming is the responsibility of the ICU project (https://github.com/unicode-org/icu). And I see that it's a real problem: ubrk_* methods are a part of public ICU API and have nothing to do with private Apple APIs. So there is no "Non-public API usage". It is not the right decision to change ICU API only because Apple uses the same names in its private API (perhaps their private API uses internally ICU and this is the root of the problem). Have you tried to strip binaries in your IPA package before submitting? Maybe those names are just debugging symbols and their removal will resolve the problem.

apotocki commented 2 years ago

Recently my own application PotoHEX (https://apps.apple.com/us/app/potohex/id1620963302) was successfully approved by Apple. It also contains ICU4C binaries built by this project and I haven't taken any additional actions. So perhaps the problems you faced caused some other reasons.

hxicoder commented 2 years ago

Thank you for your reply, My guess is that I called methods such as ubrk_current in the ICU4 library in the project, and these methods happened to be the same as Apple's internal private api names, which caused this problem. I tried many times and failed to pass the review. In the end, I tried to change the names of these apis to verify my guess. As a result, the ipa package submitted after changing the api names passed Apple's review.