深挖苹果审核规则,提高iOS审核经过率

本文首发于微信公众号【UC研发效能】 数据库

引言

AppStore审核最大痛点能够概括为三个:“误报率高” 、“描述模糊”和 “申诉慢”。
咱们深知,苹果的上架审核很是严格,对私有API的调用是绝对不能容忍的,不少开发者都对提审坐卧不安,明明我没用到这个方法,为何又被拒了?代码里翻了几遍都没找到相关的字符,怎么办啊…orz
api

认识苹果审核规则

知己知彼,百战百胜。想要跨越审核这座大山,得知道苹果审核到底是怎样的。那咱们就来研究下苹果是怎么对付咱们的。首先,咱们提交给苹果的,是一个ipa文件,里面的bin文件,都是编译好的二进制可执行文件,苹果生态中叫作machO格式,machO格式定义了各类分段,好比引用的库列表,定义的类列表,方法列表,协议列表,字符串列表,而后又在一个地址映射表中记载着这些类,方法的对应关系,和实际的机器码机址。苹果只要对这些特定的段进行扫描,就能扫出来有没有引用一些非公开的API,类,系统库。     根据UC多年的经验积累,苹果会特别关注如下几点xcode

  • 私有库的引用,这个是绝对不能出现的;
  • 有虚拟物品内购的产品引用了第三方支付,这个也是严令禁止的;
  • 只有声明,但没有实现的方法名,若是命中了,这个被拒的几率是很是很是高的;
  • 全部的类名,切记不能与系统的私有类同名,为了减小被拒的可能性,仍是换个名字吧;
  • 全部的字符串,能不与系统的私有类同名的,仍是尽可能不要同名,为了减小被拒的可能性,仍是换个名字吧;
  • 苹果扫描的私有API库,是会针对全部固件版本的;
  • 还有部分应用还会执行运行时扫描,无论你用什么方法混淆,加密,拼接,都会被苹果发现。

揭秘岩鼠iOS预审

为了解决iOS开发者的这个困扰,岩鼠深刻研究了如何去发现及应对以上问题,毕竟,提审流程太长了,被拒的滋味真的很差受。微信

  • 首先,咱们须要创建起一套可行的扫描方法;
  • 其次,咱们须要收集全部已知的私有API库;
  • 最后,须要持续不断的完善与更新这个私有API库

创建一套扫描方法

咱们知道,iOS都是自成体系的,不少东西脱离不了macOS系统,咱们须要平台化,通用化,首先须要解决macOS系统的依赖。因此要把machO格式的解析啃下来,咱们要把所加载的动态库,全部方法名,类名,有实现的方法名,全部ascii字符串都加载出来。这些都在ipa的bin文件里面,咱们按照machO格式去读取出来便可。怎么作呢?
首先咱们把ipa里的bin文件解压出来,而后依次读取主模块,各类插件的bin,关于machO格式,这里简单说明一下,machO文件会分红多个段,一个段又分红多个块,以下图:
app


而后找出咱们须要的段在哪里,而后再把里面的内容读出来,如__objc_methname块,__objc_classname块,就是咱们要找的oc的方法名和类名,固然,若是你在xcode中修改过默认的编译连接参数,生成的段名可能会有差别,须要在Load commands块读出来。这些信息读取出来后再作一个简单的加工,就能够跟咱们的数据库作对比了。
上面解决了静态扫描的问题,那么,运行时的扫描怎么办?这里咱们能够期待一下私有api扫描增强版,咱们计划在岩鼠上面运行被扫描的app,在执行深度智能遍历的时候,经过注入等手段,执行运行时扫描,而后再跟数据库的私有api作对比。

创建私有API库

利用RuntimeBrowser,在当前主流固件的真机运行,并导出的全部Frameworks和私有的PrivateFrameworks库,取出后进行对比,最终把私有API按固件版本入库。
学习

私有API库智能升级

完成初始化私有API库的工做后,是否是就一劳永逸了呢?其实不是的,一方面是私有API库的准确性须要持续提高,另外一方面是新的一些私有API也要持续加入,这样才能保证iOS预审的有效性和准确率。
岩鼠的私有API库创建了智能学习机制,会收集阿里内部应用审核被拒的记录,分析其中私有API被拒的状况,主动添加新的私有API,不断完善私有API库。与此同时也会创建白名单,提高准确率。
加密

免费试用岩鼠iOS预审

在岩鼠上进行iOS预审十分简单,只须要上传待提审的ipa包,稍等几分钟,便可查看扫描的结果。
插件


当前岩鼠iOS预审能够免费试用,欢迎你们来体验:
yanshu.effirst.com/product/pre…