Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Appstore上架被拒绝 #723

Open
jkluolin3000 opened this issue Dec 12, 2022 · 3 comments
Open

Appstore上架被拒绝 #723

jkluolin3000 opened this issue Dec 12, 2022 · 3 comments

Comments

@jkluolin3000
Copy link

依赖的libcurl库中函数使用过不了苹果审核,求方案。
ITMS-90338: Non-public API usage - The app references non-public symbols in Frameworks/CicadaPlayerSDK.framework/CicadaPlayerSDK: _curl_multi_poll, _curl_multi_wakeup. 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 at http://developer.apple.com/support/technical/

@jkluolin3000
Copy link
Author

找到问题原因了,alivcffmpeg.framework使用的旧版本,旧版本的libcurl缺少上面那两个函数curl_multi_poll, curl_multi_wakeup,这是libcurl组件近期新增的函数,appstore扫描时没找到就当做去使用系统的函数了。

@futan-yj
Copy link
Collaborator

根本原因是libcurl的这2个符号 苹果也有一份,在ffmpeg.framework里这2个符号也被导出了,导致苹果认为non-public的符号被导出,解决方法是将它改名 或者 彻底隐藏:

  1. 快速改名:将用到的这2个方法改名,而依赖的curl库也单独拉个分支,修改里面方法的定义,重新打包;
  2. 彻底隐藏:当前libcurl/openssl/nghttp2等库被打在alivcffmpeg.framework的,导致它的符号必须公开,用于player.framework使用,可以通过修改脚本,让它们链接到player.framework,并且将curl的符号隐藏(--enable-symbol-hiding),这样它就是个内部使用的符号,不被展示出来。

@pingkai
Copy link
Collaborator

pingkai commented Mar 5, 2023

找到问题原因了,alivcffmpeg.framework使用的旧版本,旧版本的libcurl缺少上面那两个函数curl_multi_poll, curl_multi_wakeup,这是libcurl组件近期新增的函数,appstore扫描时没找到就当做去使用系统的函数了。

Hi NDluolin, this problem happens sometimes, it's a common issue, and the root cause is the iOS system (and the macOS system) is using libcurl to support the HTTP implement(maybe not only HTTP), and on iOS, maybe for the security reason, the APIs of the shipped libcurl in iOS was made as private APIs, you can't call them in your iOS applications.

They will check your application to make sure you didn't call them, but unfortunately, the checking program is not smart enough, it should suppose your app calls the Non-public API of its libcurl, so you will receive the issue.

In fact, everyone can use libcurl as a part of his application, even if you can use the libcurl APIs on macOS, as they are public.

So what you need to do is replay to Apple that you didn't use the Non-public API, you have your own libcurl in your alivcffmpeg framework, and you are using your libcurl, then the issue will be gone.

And In your case, the _curl_multi_poll, _curl_multi_wakeup APIs can't be found in the alivcffmpeg framework, then this makes your application did call the private libcurl in the iOS system. And you must replace your alivcffmpeg with the new one, I think the old one will lead to other problems when running, dead block, crash, errors and so on.

@futan-yj I think you didn't get the root cause, and your solution 1 can't be recommended, it is not our bad. And solution 2 is useless in this case.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants