一、被拒接邮件
准则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、
目前还没有通过审核,后续更新-----
网友评论