苹果APP审核被拒绝-关于“程序使用或引用非公开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;如果你使用上述方法避开审核一定要写好修改注释或者文档,否则后面时间一久维护起来就相当麻烦了。

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,814评论 0 9
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • 一天很短、短的来不急拥抱清晨、就已经手握黄昏!一年很短、短的来不及细品初春、就要打点秋霜!一生很短、短的来不及享用...
    易简文阅读 88评论 0 0
  • 其实是用她爸爸的微博回应的: 郑爽 看这段语言是多么地犀利! 郑爽爆发了! 啧啧啧,小爽这是爆发了,谁说她不玩微博...
    彬彬说说阅读 618评论 0 0