审核 二进制文件被拒绝
Your app uses or references the following non-public APIs: xxx,xxx
年前上线的版本因为使用系统非公开api导致了二进制文件被拒绝没审核过,总结下如何解决问题通过审核
如何在项目上线前检查是否引用了系统非公开api,防止审核被拒
如果在万不得已的情况下使用系统非公开api,如何规避Apple的审查、通过审核
1、在项目上线前检查是否引用了系统非公开api
如果您正在使用第三方库,请更新到这些库的最新版本。
如果您没有访问库的源代码,您可以使用“字符串”或“otool”命令行工具搜索已编译的二进制文件。“strings”工具可以输出库调用的方法的列表,“otool -ov”将输出Objective-C类结构及其定义的方法。
2、使用了系统非公开api 也可以通过审核
比如项目代码[target isKindOfClass:NSClassFromString(@"CAMViewfinderView")],其中的CAMViewfinderView就是系统非公开的api,Apple审核的时候检查到了这个字符就会直接把你的项目打回来并告诉你“二进制文件被拒绝”,但是我的项目里不写这个方法就会出现各种bug,怎么办?
其实只要不让项目里直接出现“CAMViewfinderView”这个字符串就不会被Apple检测到了,既不用动太多代码影响功能,也能通过审核的两种方法:
1. 动态拼接字符串
比如把“CAMViewfinderView”拆分成好几个字符串,这样调用这个方法[target isKindOfClass:NSClassFromString(str1,str2,str3,str4)](str1,str2,str3,str4拼起来就是CAMViewfinderView)
2. 加密处理系统非公开api
统一加密工具,在程序外先加密好你调用的api字符串
比如先把“CAMViewfinderView”加密成"Q0FNVmlld2ZpbmRlclZpZXdDb250cm9sbGVy"
然后在app方法里先解密"Q0FNVmlld2ZpbmRlclZpZXdDb250cm9sbGVy"为decodeStr,
再调用[target isKindOfClass:NSClassFromString(decodeStr)]
加密的方法是亲测成功通过审核的所以总结分享下。
整个方法都没直接出现系统的非公开api,但实现的方法是没有任何变化,再提交就能审核通过
注意:还是尽量不要调用系统非公开api;如果你使用上述方法避开审核一定要写好修改注释或者文档,否则后面时间一久维护起来就相当麻烦了。
作者:wxkkkkk
链接:https://www.jianshu.com/p/f21745df8baa
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
交流qq群:234733313