iOS App Store使用私有API被拒接收录

一、被拒接邮件

准则2.5.1 -性能-软件需求

您的应用程序使用或引用以下非公共api:

[UIApplication statusBar], [UIApplication statusBarWindow], [UITextField _clearButton], [WKWebView browsingContextController], __NSArrayI, __NSArrayM, __NSCFConstantString, __NSCFString, __nsnsdictionarym, __NSPlaceholderArray, __NSSingleObjectArrayI, _UIStatusBarStringView, _UIStatusBarWifiSignalView, LSApplicationWorkspace, ns具结属性tedstring, ns具结属性tedstring, UIScrollViewPanGestureRecognizer, UIStatusBarDataNetworkItemView

应用程序商店不允许使用非公共api,因为如果这些api发生变化,可能会导致糟糕的用户体验。

在未来提交本应用时,继续使用或隐藏非公开api可能会导致您的苹果开发者账号被终止,并从app Store中删除所有相关应用。

下一个步骤

如果您正在使用第三方库,请更新到这些库的最新版本。如果无法访问库的源代码,则可以使用“string”或“otool”命令行工具搜索编译后的二进制文件。“strings”工具可以输出库调用的方法列表,“otool -ov”将输出Objective-C类结构及其定义的方法。这些工具可以帮助您缩小问题代码所在的范围。您还可以使用“nm”工具来验证是否有第三方库调用这些api。

资源

如果无法提供应用程序所需的功能,可以提交增强请求。

二、私有库被拒接解决方案

iOS私有API检测

苹果推荐用邮件中提及,可以通过strings、otool、nm等命令行工具来定位调用私有API的第三方类,下面来简单总结一下几种工具的用法。

1、preg检测

在终端:
(1)cd 项目目录下

//比如苹果检测出来的私有库是:UIStatusBarStringView,那就用下面方法检查,会列出私有库所在类下面。
(2)grep UIStatusBarStringView -r .

上面(2)命令会查找根目录以及多级目录以下的所有文件,包括.framework和.a库,找到匹配结果的话,会打印出来。
-r参数表示会遍历多级目录下的文件。
注意:-r和.之间有个空格

2、otool Xcode自带工具

(1)工程中获取Unix执行文件
a、在Xcode文件树中搜索“.app”
b、找到对应文件,右键“Show in Finder”
c、选中.app文件,右键“显示包内容”
d、下拉可找到一个跟app名字一致的Unix执行文件,【这个文件是黑的的,名字就是APP的中文名字】

(2)在终端命令执行

otool -L (Unix可执行文件的路径,直接拖入文件到终端)

12、libGDTMobSDK广点通私有库(已删除)
Binary file ./YueZhuan/Resource/3rd/DKAdSetSDK_1.4.3_171114/DKADSetLibs/GDT_iOS_SDK_4.6.4_171031/lib/libGDTMobSDK.a matches

3、全局搜索(建议使用)

这个方法是我认为最直接最有效的方法!
1、 cd 到你的工程目录

比如要检测私有库:AmazonFling.framework
2、使用全局搜索命令(注意最后要加一个点):

grep -r lockcomplete .

这个方法直接定位到这个私有api出现在 AmazonFling.framework 中。

到这里,解决上述第三方库的私有API的问题,就是直接替换掉新的SDK,当然如果新的第三方库也有私有API的话,那就只能舍弃了,否则基本无解。

4、strings检测

(1)首先你有个可以提交审核的ipa,就是需要提交到苹果审核的包,不是测试的release
(2)将ipa重命名为zip格式,也可以直接使用解压工具解压, 如果有两个文件夹Payload、Symbols,就OK
(3)cd到Payload里面的app

(4)命令如下:canOpenUrl为你要搜索的私有API.

strings - -a -arch armv7 "全民头条" | grep canOpenUrl


三、苹果私有API收录--持续更新中

1、LSApplicationWorkspace

2、UIScrollViewPanGestureRecognizer

3、[WKWebView browsingContextController]

4、__NSArrayI, __NSArrayM, 
__NSCFConstantString,__NSCFString,
 __NSDictionaryM, __NSPlaceholderArray, 
__NSSingleObjectArrayI  __NSCFBoolean (AvoidCrash防崩溃三方库不能再使用)

5、_UIStatusBarStringView

6、_UIStatusBarWifiSignalView

7、UIStatusBarDataNetworkItemView

8、[UIApplication statusBar]

9、 [UIApplication statusBarWindow]

10、 [UITextField _clearButton] (已完成)

11、NSConcreteAttributedString

12、

目前还没有通过审核,后续更新-----

你可能感兴趣的:(iOS App Store使用私有API被拒接收录)