首页 > 解决方案 > 符号进入最终二进制文件,但我在任何中间文件中都找不到它

问题描述

我有一个 iOS 应用程序。最近我开始收到来自应用商店连接的拒绝:

Non-public API usage:

The app references non-public symbols in CDDA: _locale_charset

当我尝试搜索我的中间体时:

grep -Rnisl '_locale_charset' /Volumes/XCode/DerivedData/CDDA-bgaxuifnbdpkrgfkjomdlvclkyjw/Build/Intermediates.noindex

我得到:

/Volumes/XCode/DerivedData/CDDA-bgaxuifnbdpkrgfkjomdlvclkyjw/Build/Intermediates.noindex/CDDA.build/Release-iphoneos/CDDA.build/Objects-normal/arm64/Binary/CDDA
/Volumes/XCode/DerivedData/CDDA-bgaxuifnbdpkrgfkjomdlvclkyjw/Build/Intermediates.noindex/CDDA.build/Release-iphoneos/CDDA.build/Objects-normal/armv7/Binary/CDDA

所以看起来这个符号在目标文件中没有出现。它仍然呈现。一件有趣的事情是它没有出现在调试版本中。

对我来说更奇怪的是,当我刚刚构建最后一次可以连接应用商店的 Release 配置时,该符号将在二进制文件中。但是,如果我使用相同的提交执行存档操作,那么提交将顺利进行,并且该符号将仅出现在 DSYM 文件中。

它在这次提交之后开始发生——这是最后一次成功交付到应用商店连接。下一个交付的是这个,由于使用了私有 API,它未能通过。

应用程序代码在这里

我能做些什么来找出这个符号是如何进入二进制文件的?

升级版:

好的,看起来我有一些提示:

$ nm ./Binaries/glib/lib/libintl.a | grep _locale_charset
no symbols
no symbols
no symbols
no symbols
                 U _locale_charset
0000000000000000 T _locale_charset

所以我在回购中有一个二进制文件,看起来它有那个符号。但由于它一直存在,我仍然不明白为什么它会出现在最终版本中,并且该应用程序被 Apple 拒绝。那东西会出什么问题?

我发现的另一件事是,如果我SSZipArchive从构建中删除 pod,一切都会很好。所以我找到了原因,但仍然无法理解为什么会发生这种情况。SSZipArchive 不使用或不提供该符号,这怎么可能?

UPD2:好的,我已经设法用 Zip 快速存档器替换了 SSZipArchive,所以问题就解决了。但是,我仍然对它首先发生的原因有 0 个想法。如果有人可以帮助我找到真相,那可以帮助我(可能还有其他在同样问题上苦苦挣扎的人)。

标签: iosapp-store-connect

解决方案


推荐阅读