iOS审核一直是每款移动产品上架苹果商店时面对的一座大山,每次提审都像是一次漫长而又悲壮的旅行,经常被苹果拒之门外,无比煎熬。那么问题来了,我们有没有什么办法准确把握苹果审核准则,从而提升审核的通过率呢?答案是肯定的,腾讯预审团队从以下两方面做了探索,经过近一年的推行和数据监控, iOS审核月通过率从过往的35%提升到85%+

1.分析过往提审被拒的案例,并结合《苹果应用商店审核指南》的条款,整理成可执行的审查条目;

2.抽离出可以自动化的方法,提升审核的效率;

接下来我们将带你一起走进苹果审核,揭秘iOS审核的真相。本篇作为引子,分三个层面给大家简单介绍iOS审核相关内容:

一、iOS审核探秘之审核设备篇

二、iOS审核被拒纬度剖析

三、腾讯预审团队的iOS预审验收维度


一、iOS审核探秘之审核设备篇

苹果的产品从07年推出后,逐步推陈出新,外部市场上也已经有比较多的产品硬件版本和系统版本。如此多的系统版本,我们怎么去保证提审版本的质量,是一直困惑测试和产品团队的点。

往往苹果突然发布了新的系统,我们怎么应对这些风险呢?

【经典案例】

14年底,由于iOS新版本8.1.1系统的发布,做了一些系统底层Bug的修复,导致了游戏产品支付不成功、webview登录失败。

【关键举措】

1、与苹果关注同样的验收版本:

推测苹果审核团队设备验收选型也会遵循原则:验收最新发布的两个系统版本,两个硬件版本。保证游戏可以在市场占有率最高的两个系统版本及硬件配置上可以流畅运行。

因此腾讯预审团队会根据当前版本发布的节奏采购设备,升级系统,保证能覆盖到以上的系统版本和硬件版本。目前验收的机器列表及型号:

 

2、关注beta版本:

苹果在新版本上线前会发布beta版本做少量测试,此时需要跟进beta版本,可以提前发现问题,避免突然版本发布造成措手不及。

二、iOS审核被拒纬度剖析

为了探究更深层次的被拒情况,我们做了细化的分析,通过往年的提审数据统计,看看都是因为哪些原因被拒吧!

三、预审业务验收的维度

根据2014年的数据统计情况,并结合《苹果应用商店审核指南》,预审组通过细分将预审工作划为3大模块:客户端资源检查、应用内容检查和提审资源检查:

客户端资源检查

确保客户端内Plist等配置符合苹果要求,不存在多余的Key值enable;

应用内容检查

对应用的内容进行审查,确认无涉及色情、庸俗、暴力、枪支等内容;并对公告文字等筛查,无苹果禁止的字眼等;应用内不包含cdkey兑换,好友邀请及炫耀等苹果最新禁止的内容;

提审资源检查

确保提交的游戏截图、视频符合苹果要求,且截图及视频中没有敏感信息;同时视频截图等均符合苹果的技术要求,帧率分辨率达标.

本文先简介下苹果审核的相关内容,后续会依据业务验收的维度,给大家逐一介绍验收的要点、曾经遇到的坑和那些让人不淡定的被拒案例。

我们先从客户端检查开始介绍

客户端检查的主要目的是通过客户端配置检查来保证客户端符合苹果的开发者规范以及其他更新的要求,包括存储系统、配置文件、网络连接(VPN)、icon检查、私有API检查,提审前的审核会覆盖这几个部分的各个测试点。

1、存储系统检查

苹果官方对用户数据存储有严格的规范,以往有很多被拒案例都是关于存储的。因此,我们需要掌握苹果官方数据存储指引的相关内容:

【经典案例】

【案例1】《项目A》x.x.0版本,因App启动后在用户的iCloud存储有22.17MB的数据(通常是不能超过1MB),不符合 iOS数据存储准则被拒。

解决办法:因增量更新累积文件过大,经过修复后通过审核。

【案例2】 《项目B》x.x.5版本,因没有遵循iOS的数据存储准则被拒,在应用的documents目录下存储了资源文件,苹果不允许非用户生成的文件放在这个目录下,因为此目录会被同步到iCloud。

解决办法:将需要存在的本地的资源文件修改到了library/cache下。

 2、配置文件(Info.plist)检查

Info.plist是一种结构化的文本文件,通常所说的 “属性列表”,iOS的app都使用Info.plist文件来存储元信息,用来实现决定bundle所显示的icon,当前app支持打开的文档类型,服务声明等等。关于此部分的检查,我们通常关注如下方面的内容:

【经典案例】

《项目C》x.x1版本,曾因Info.plist设置问题被拒,即应用程序不需要的文件共享功能,但在Info.plist中的UIFileSharingEnabled键被设置为true了。

解决方法:Info.plist UIFileSharingEnabled键设置为false。

3、网络连接(VPN)

大多数App的审核服务器是部署在中国,然而苹果的iOS审核团队却又是在美国,他们进行审核时,使用的是美国网络,这样跨洲际的网络连接,难免会出现时延大、抖动、丢包等网络问题,为了提前验证App后台服务器基于此场景下的反应,预审团队采用美国VPN方式来模拟苹果审核团队的访问网络环境(应用从美国VPN网络中访问后台服务器)。

【经典案例】

《项目D》曾因美国IP不能登录被拒。通过美国VPN连接,开发进行定位并修复后重新提审,并通过审核。

4、Icon检查

苹果官方对iPhone、iPad、iPod等应用程序的icon有明确的要求:要求ipa包中必须包含180x180,120x120,76x76,152x152尺寸的PNG格式的icon(详见下表),并且不同尺寸的icon内容要一致。

关于App icon的检查,腾讯预审团队采用自动化方法实现自动解压ipa包,并逐一核实icon图标是否存在并满足要求,对于不满足要求的ipa包,给出告警提示:

【经典案例】

《项目E》x.x.x版本预审,未提供相关icon图片资源,如果按此版本正式提审,等待苹果的审核结果,只会是被拒。

5、私有API检查

私有API(Private API)是指放在PrivateFrameworks框架中的API,因调用私有API而在审核中遭到拒绝的现象并不少见,近日,苹果便下架了包括《爸爸去哪儿2》、《找你妹》在内的256款APP,原因是调用私有API,很明显,苹果明确不允许App使用这类API。

未公开的API(Non-publicAPI)虽然放在Frameworks框架中,但是却没有在苹果的官方文档中有使用说明、代码介绍等。按苹果的说法,未公开的API是还不够成熟,可能还会变动的API,等完全成型了后会变成公开的API,但是目前不对其提供承诺,就是系统版本升级后可能会失效。对于non-public API,苹果iOS审核指南第2.5条款,同样明确,如APP使用时,将会被拒绝(2.5 Apps that use non-public APIs will be reject)。

关于私有API的检查,采用自动化工具扫描来实现,实现原理如下:

① 获取未公开库:基于iOS的SDK,dump出全库,全库减去私有库和公开库后,得到未公开库(non-public API);

② 获取头文件方法和成员的列表:使用Otool等工具,对ipa的可执行文件进行反编译解析,获取头文件中方法和成员的列表;

③ 与未公开库、私有库进行匹配:将列表中的方法和成员,分别与私有库和未公开库进行匹配,如未有匹配成功项,则扫描通过,如有匹配成功项,则扫描不通过(给出告警和API名称)。

四、总结

1、实际上存储系统的检查是一套规范,遵循同系列理念,比如用户本地存储空间与苹果iCloud服务器存储的合理使用,节约空间;

2、Info.plist文件检查实际上是xml文件的键值检查,并且值检查关系是并列的。通过存储文件、plist用例的检查,基本避免了因该类原因被拒的情况;

3、私有API检查则通过自动化工具扫描来实现。

本文已获作者授权,转载自 “腾讯大讲堂”微信公众号。下期将会介绍“应用内容、提审资源检查方法”,精彩内容,不容错过!

 


【腾讯WeTest iOS预审工具】

为了提高IEG苹果审核通过率,腾讯专门成立了苹果审核测试团队,打造出iOS预审工具这款产品。经过1年半的内部运营,腾讯内部应用的iOS审核通过率从平均35%提升到90%+。

现将腾讯内部产品的过审经验,以线上工具的形式共享给各位。在WeTest腾讯质量开放平台上可以在线使用。体验地址:http://wetest.qq.com/ios

iOS预审工具分四步进行预审服务

【一键扫描】只需提供ipa包、审核图片、审核视频、应用描述,即可在4小时内拿到一份完整的检测报告,定位问题的同时提供解决方案,助您成功通过审核。

【案例分享】集结iOS审核失败常见原因,丰富案例为您提供参考依据。

【专家服务】腾讯专家团队为您分析各种疑难杂症,提出最优解决方案。

【ASO优化】专业优化AppStore内关键字搜索结果,让产品离用户更近一步。希望App/手游在预审验收保证下,都可以快快乐乐过审,开开心心赚钱。

最新文章

  1. 对"QQGame-大家来找茬"的辅助工具的改进
  2. jquery-追加元素
  3. opsview
  4. MongoDB下载与安装
  5. ASSER、VERIFY、TRACE详解
  6. [ASP.NET] Session的了解
  7. HDU 1041 Computer Transformation
  8. MVC AuthorizeAttribute 动态授权
  9. [LeetCode] Number of Longest Increasing Subsequence 最长递增序列的个数
  10. [JavaScript] canvas 合成图片和文字
  11. nginx多server配置记录
  12. Anaconda安装python(idea兼容)
  13. 【原创】逆向练习(CrackMe)
  14. 【jquery】邮箱自动补全 + 上下翻动
  15. JAVA 调用gc机制强制删除文件
  16. codevs 1080 线段树练习 CDQ分治
  17. poj_3168 平面扫描
  18. Java实现的词频统计
  19. 很好的c++和Python混合编程文章
  20. Network Real Trace Analysis 2015年12月10日

热门文章

  1. ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入
  2. Xshell 连接CentOS服务器解密
  3. 在ASP.NET Core应用中如何设置和获取与执行环境相关的信息?
  4. 如何快速优化手游性能问题?从UGUI优化说起
  5. Win.ini和注册表的读取写入
  6. Mysql命令大全
  7. IT持续集成之质量管理
  8. JavaScript作用域
  9. 开源 iOS 项目分类索引大全 - 待整理
  10. js实现四大经典排序算法