关于“程序使用或引用非公开api”问题

审核 二进制文件被拒绝

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容