【友盟+】开发者社区

三步走起 提升 iOS 审核通过率

香布拉啦 发表于 2017-8-23 16:51:00 |

香布拉啦
香布拉啦 发表于 2016-1-21 16:55:42 | 显示全部楼层 |阅读模式
160245kmnso0g1nqgh07gd.jpg

2016年的第一天,各位小伙伴儿们,新年快乐~~~在过去一年里,负责 iOS 应用开发的同学们,想必已被 APP Store 的审核机制折磨心累不止。新的一年,又一轮审核即将来袭,你们做好准备了么?
为了帮助各位 iOS 应用开发的同学免受折磨,腾讯 Bugly 特邀互娱 iOS 预审组的同学通过大量的数据分析,对苹果的审核机制进行了一番总结,连夜赶稿写出提升 iOS 审核的通关秘籍(因为内容较多,因此分为上下两篇),来与大家分享。
经过互娱 iOS 预审组近一年的数据监控,分析过往提审被拒的案例,我们对 iOS 的审核进行了缜密分析,统计出最常见的被拒原因:

Ex2JFb3.jpg

通过以上案例,并结合《苹果应用商店审核指南》,大体可以将审核工作分为三块:客户端资源检查、应用内容检查、提审资源检查,我们将通过这三步来为您揭秘iOS审核的真相。

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

1.存储系统检查
苹果官方对用户数据存储有严格的规范,因此如果要通过审核,首先要了解一下苹果官方数据存储指引的相关内容:
kRverdT.jpg
被拒条款:2.23
Apps must follow the iOS Data Storage Guidelines or they will be rejected.( 应用启用iCloud存储功能后,必须遵守iOS数据存储指南,否则将被拒。)
被拒案例
被拒原因描述如下:
We found that your app does not follow the iOS Data Storage Guidelines, which is required per theApp Store Review Guidelines.
In particular, we found that on launch and/or content download, your app stores 5.6 MB. To check how much data your app is storing:
  • Install and launch your app
  • Go to Settings > iCloud > Storage & Backup > Manage Storage
  • If necessary, tap “Show all apps”
  • Check your app’s storage


The iOS Data Storage Guidelines indicate that only content that the user creates using your app, e.g., documents, new files, edits, etc., should be backed up by iCloud.
Temporary files used by your app should only be stored in the /tmp directory; please remember to delete the files stored in this location when the user exits the app.
Data that can be recreated but must persist for proper functioning of your app - or because customers expect it to be available for offline use - should be marked with the “do not back up” attribute. For NSURL objects, add the NSURLIsExcludedFromBackupKey attribute to prevent the corresponding file from being backed up. For CFURLRef objects, use the corresponding kCFURLIsExcludedFromBackupKey attribute.
简评:
应用在启动时就在Documents下产生了5.6 M的数据,说明不是用户自行创建并用于备份的,通过修改应用,在document目录加一个不备份的属性(NSURLIsExcludedFromBackupKey)后审核通过。再来总结一下iOS5以后的存储规范:
ü  只有那些用户生成的文档和其他数据或者是那些不能被你的应用所重建的数据应当保存在/Documents 目录内。这些数据文件将会自动的通过iCloud备份。
ü  那些可以重新下载或者重新创建的数据应当保存在/Library/Caches 目录内。你可以把数据库缓存文件或者可下载的内容如杂志、报纸、地图应用的数据等放入缓存目录里(Caches directory)
ü  临时需要的数据应该保存在/tmp 目录内。尽管这些文件不会备份到iCloud里,但记住不再需要它们时立即删除掉这些文件,这样它们就不会继续浪费用户设备的储存空间了。
ü  使用“do not back up”属性指定不需要iCloud备份的文件(比如需要离线环境使用的文件;该属性能在任何目录下生效)。由于这些文件占用设备空间,所以应用需要有一套定期监控与清理这些文件的机制。
应对措施
本例中该应用未启用iCloud备份,如果启用了iCloud备份,则可以通过把较大的数据(模板类、联网下载的数据等)存到/Library/Caches目录,则同样可以解决问题。

2.配置文件(Info.plist)检查
每个 APP 都使用Info.plist文件来存储以上的元信息,就是通常所说的 “属性列表”。IOS用Info.plist来决定bundle所显示的icon,当前app支持打开的文档类型,等等其它的信息。正如以上所提到的,Info.plist本身是一种结构化的文本文件,它包含了一些重要的配置信息。关于此部分的检查,我们通常关注如下方面的内容:
Qam4pg1.jpg
被拒条款
Multitasking Apps may only use background services for their intended purposes: VoIP, audio playback, location, task completion, local notifications, etc.(多任务应用只允许在后台运行如下相应的服务:VoIP,音频播放,地理位置,任务记录,本地提醒等。)
被拒案例
被拒原因描述:
We found that your app uses a background mode but does not include functionality that requires that mode to run persistently. This behavior is not in compliance with the App Store Review Guidelines.
We noticed your app declares support for VoIP in the UIBackgroundModes key in your Info.plist but does not provide any Voice over IP services.
We recognize that VoIP can provide “keep alive” functionality that many app features would like to use. However, using VoIP in this manner is not the intended purpose of VoIP, which, as indicated in the iOS Application Programming Guide, is that: “A Voice over Internet Protocol (VoIP) application allows the user to make phone calls using an Internet connection instead of the device’s cellular service.”
It would be appropriate to add VoIP features or remove the “VoIP” setting from the UIBackgroundModes key.
简评:
应用为了实现后台保持在线的功能,在 Info.plist 中定义的 UIBackgroundModes,间接声明了支持 VoiP 功能,实际应用被苹果认为并未按照 Voip 的定义去实现,导致被拒;从 Info.plist 移除了 UIBackgroundModes(VoIP)和相关代码后审核通过。总结,应用首次提交审核时,有争议的功能尽量先砍掉,先保证尽快上架。

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

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

5.私有API检查
私有API是指放在PrivateFrameworks框架中的API,未公开的API是指虽然放在Frameworks框架中,但是却没有在苹果的官方文档中有使用说明、代码介绍等记录的API。
之前 APP Store 便下架了包括《爸爸去哪儿2》、《找你妹》在内的256款APP,原因是调用私有API,很明显,苹果明确不允许App使用这类API。
被拒条款:2.5
Apps that use non-public APIs will be rejected.(使用非公开API的应用会被拒。)
被拒案例
被拒原因描述如下:
We found that your app uses one or more non-public APIs, which is not in compliance with the App Store Review Guidelines. The use of non-public APIs is not permissible because it can lead to a poor user experience should these APIs change.
We found the following non-public API/s in your app:
descriptionWithCalendarFormat:
If you have defined methods in your source code with the same names as the above-mentioned APIs, we suggest altering your method names so that they no longer collide with Apple’s private APIs to avoid your application being flagged in future submissions.
Additionally, one or more of the above-mentioned APIs may reside in a static library included with your application. If you do not have access to the library’s source, you may be able to search the compiled binary using “strings” or “otool” command line tools. The “strings” tool can output a list of the methods that the library calls and “otool -ov” will output the Objective-C class structures and their defined methods. These techniques can help you narrow down where the problematic code resides.
We appreciate that you may have made the precautions in your code for using non-public APIs, however, there is no way to accurately or completely predict how an API may be modified and what effects those modifications may have. For this reason, we do not permit the use of non-public APIs in App Store apps.
简评:
这个条款被拒的描述文字比较多。先来看看苹果API的分类:
1) Published API(公开的API):又称 Documented API(文档中记录的API)。是苹果通过 Cocoa Touch 向全世界第三方开发者公开的所有 API 。
2) UnPublished API(未公开API):又称 Undocumented API(文档中未记录的API),是指虽然放在Frameworks框架中,但是却没有在苹果的官方文档中有使用说明、代码介绍等记录的API。按苹果的说法,未公开的API是还不够成熟,可能还会变动的API,等完全成型了后会变成公开的API,但是目前不对其提供承诺,就是系统版本升级后可能会失效。
3) Private API(私有API):指的是SDK下的 PrivateFrameWorks框架下的API,真实存在于 Cocoa Touch 中。私有API是苹果明确规定不能使用的API,当然在越狱渠道没这个限制,比如91渠道。
被拒文字中的non-public APIs,后两种分类都算。源码中如果恰好定义了方法与非公开的API重名,也会导致被拒;比较常见的是,使用的第三方静态库中,包含了非公开的API,那么可以通过strings或otool命令来查找相关的API:
strings LibName.a | descriptionWithCalendarFormat
strings AppName.app | descriptionWithCalendarFormat
其中.app是编译结束后Build目录下的文件。
使用otool –ov LibName.a 输出Object-C类结构以及定义的方法。
应对措施
采用自动化工具扫描来实现,实现原理如下:
1、获取未公开库:基于iOS的SDK,dump出全库,全库减去私有库和公开库后,得到未公开库(non-public API);
2、获取头文件方法和成员的列表:使用Otool等工具,对ipa的可执行文件进行反编译解析,获取头文件中方法和成员的列表;
3、与未公开库、私有库进行匹配:将列表中的方法和成员,分别与私有库和未公开库进行匹配,如未有匹配成功项,则扫描通过,如有匹配成功项,则扫描不通过(给出告警和API名称)。

6.硬件与版本差异
iOS 2007年作为手机系统发布至今,已经陆续套用到iPod touch、iPad以及Apple TV等产品上,并更新了多个版本。而苹果的硬件也在不停地推陈出新,外部市场上也已经有比较多的产品硬件版本,面对如此之多的硬件及系统版本,怎么去保证提审版本的质量,是一直困惑测试和产品团队的大难题。
被拒案例
N7yOaEj.jpg
对应措施
1、与苹果关注同样的验收版本:推测苹果审核团队设备验收选型也会遵循原则:验收最新发布的两个系统版本,两个硬件版本。保证游戏可以在市场占有率最高的两个系统版本及硬件配置上可以流畅运行。
2、关注beta版本:苹果在新版本上线前会发布beta版本做少量测试,此时需要跟进beta版本,可以提前发现问题,避免突然版本发布造成措手不及。

总结:

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


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


3、通过自动化工具扫描是否调用了私有API, 苹果除了对提审版本扫描还会不定期对线上的版本进行扫描,所以别想着通过云控开关或者代码下发来绕开私有API。同样需要注意的是,不调用私有API,但跟私有API函数重名也会被apple认为违反了私有API规定。


根据2015年的数据统计情况,并结合《苹果应用商店审核指南》,互娱 iOS 预审组通过细分将预审工作划为3大模块:客户端资源检查、应用内容检查和提审资源检查。
在上一篇文章中,Bugly 重点为大家介绍了客户端资源检查的内容,今天我们要为大家介绍的是关于应用内容检查和提审资源检查的部分。


第二步:应用内容篇

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


1. 文字内容检查

此部分的审核,根据苹果商店审核指南的准则,主要的检查项有以下几方面:
MgvGDE9.jpg


被拒条款
Apps that are “beta”, “demo”, “trial”, or “test” versions will be rejected.(任何“beta”,“演示”,“试用”或“测试” 版本的应用会被拒。)
被拒案例
被拒原因描述:
We found that your app appears to be a pre-release, test, or trial version with a very limited feature set. Apps that are in beta form, or that are for demonstration or trial purposes only, are not appropriate for the App Store and are not in compliance with the App Store Review Guidelines.
Specifically, your app indicated test version.
简评:
提交AppStore审核的应用名称、安装包等所有地方都不能包含有测试、demo等字样,否则都会被拒。
应对措施
苹果不允许测试版本上架销售,内测、测试、公测、体验、demo版、beta版、demo版、test版等字样出现时,苹果会统一认为是测试版本。因此,在正式提审期间,必须屏蔽含有如上字样的公告、邮件、活动等界面。


被拒条款
Apps or metadata that mentions the name of any other mobile platform will be rejected.(应用或者元数据中提到其他任意移动平台会被拒。)
被拒案例
被拒原因描述:
We found that your app and/or its metadata contains inappropriate or irrelevant platform information, which is not in compliance with the App Store Review Guidelines.
Specifically, your app mentioned other platforms, such as Android.
Providing future platform compatibility plans, or other general platform references, is not appropriate in the context of the App Store. It would be appropriate to remove this information.
4Q65woc.jpg
简评:
该条款明确规定iOS应用在任何地方(应用界面、图片、文字)都不允许提及其他平台字眼。
应对措施
1、Android、winphone、安卓等第三方平台字样是不能出现的,避免在苹果平台宣传其竞争对手,可采用”其它平台“来替代“Android “等。
2、应用内的文字描述,如有涉及苹果产品的英文拼写,必须采用正确的拼写格式,详情需参考苹果官方文档。


2. 应用内容检查

此部分的审核,重点覆盖应用中的动画、登录、注销、支付等功能界面,主要的检查项有以下几方面:
yPHI2mn.jpg


被拒条款
16.1 Apps that present excessively objectionable or crude content will be rejected.(应用中出现过于令人反感或者低俗的内容将会被拒绝。)
被拒案例
被拒原因描述:
We found that your app contains content that many audiences would find objectionable, which is not in compliance with the App Store Review Guidelines.
Specifically, it would be appropriate to remove “美女” section from your app. Screenshots have been provided for your reference.
We encourage you to review your app content and evaluate whether you can modify the content to bring it into compliance with the Guidelines.
简评:
应用中美女频道的内容稍微有些低俗/反感导致被拒。通过后台控制,审核前去掉美女频道,审核通过后再放开的方式解决,这种操作切记要在上线前checklist认真检查、并在审核前配置好。


总结:

1、文字描述的检查,除了应用内的公告、声明、活动、邮件等界面之外,应用中链接的官网、论坛等网页,同样需要覆盖的;


2、应用内容部分的检查,必须包含如下几方面的内容:低俗/成人等内容、非IAP支付方式、会员专属福利或加成、版本更新功能、拉起或提示下载其它App等。




第三步:提审资源

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


1. 应用截图检查

对于图片的审核,我们重点覆盖图片的内容、文字和规格属性,确保图片满足苹果要求,详情如下:
8mg07Wh.jpg


被拒条款
Apps with names, descriptions, screenshots, or previews not relevant to the content and functionality of the App will be rejected .(应用的名称、描述、屏幕截图、视频预览,如果与应用的功能或内容无关,审核会被拒。)
被拒案例
被拒原因描述:
We found that the screenshots for your app do not reflect the app in use. This does not give the user an accurate understanding of what the app does or how it behaves, which is not in compliance with theApp Store Review Guidelines.
It would be appropriate to revise your screenshots to demonstrate the app functionality in use.
YPxx5zA.jpg
简评:
屏幕截图与应用无关或未能反映应用的主要功能(或游戏的亮点玩法)。苹果在屏幕截图审核越来越严格,后续提交屏幕截图时一定要提交最能表达应用主要功能或游戏的亮点玩法的图片。


2. 预览视频检查

此部分的审核,我们重点覆盖视频的内容、文字、大小、压缩格式、数据速率、帧率等规格属性,详细的检查项如下:
9l1wheH.jpg


被拒条款
Developers are responsible for assigning appropriate ratings to their Apps. Inappropriate ratings may be changed/deleted by Apple.(应用开发者有责任对应用设置恰当的分级(Rating)。不恰当的评级可能会被Apple修改,甚至删除。)
被拒案例
被拒原因描述:
We found that the rating you’ve selected is not consistent with the content of your app, as required by the App Store Review Guidelines.
  Since your application contains frequent mature content, this should be reflected in the frequency choice in the Ratings section. 17+ would be appropriate for your app rating.
  NOTE: Please be sure to make any metadata changes to all App Localizations by clicking the Edit button next to each localization.
x6wYAnN.jpg
简评:
应用包含有成人内容,年龄应定级为17+;年龄定级这个被拒的频率还比较高,各个定级的描述如下:
fl02rx3.jpg
应对措施
应用首次上架审核前,应明确界定用户群的年龄限制。提交审核时,应根据应用实际的功能、游戏素材、玩法等来选择各个评级。


3. 提审帐号检查

提审帐号主要是便于苹果审核人员快速体验和审核App,关于提审帐号,我们主要检查帐号的等级和正确性:
MAAT0cU.jpg


被拒案例
《项目C》1.9.x版本,提供的测试帐号等级不够高,苹果审核人员无法体验App的所有内容,因此被拒。
kEgjsO2.jpg
应对措施
提供高等级的帐号,确保该帐号可以体验App的全部功能。


4. 安装包检查

Ipa安装包的审核,我们主要检查ipa包的大小、可执行文件的正文段大小和包中每个文件的大小三个方面:
RiE8LpD.jpg


5. 第三方许可证检查

苹果对商标、版权以及专利等第三方材料的审查非常严格,如App涉及第三方的内容,提审时必须提供使用这些内容的授权许可。


被拒条款
Apps that include the ability to download music or video content from third party sources (e.g. YouTube, SoundCloud, Vimeo, etc) without explicit authorization from those sources will be rejected .(如果没有第三方(YouYube、SoundCloud、Vimeo等媒体类机构)的授权,应用不能提供音乐、视频等资源的下载能力,否则审核会被拒。)
被拒案例
被拒原因描述:
We found that your app allows users to download music or video content without authorization from the relevant third-party sources. Screenshots have been provided for your reference.
Next Steps
Please provide documentary evidence of your rights to allow music or video content download from third-party sources. If you do not have the requested permissions, please remove the music or video download functionality from your app.
82ZJ3CA.jpg
应对措施
应用必须提供授权,否则不能提供音频、视频等资源的下载能力。


总结:

准备提审资源时,如果能注意到以下几方面的问题,将大大降低提审资源被拒的风险:


1、图片、视频的内容,务必从应用程序中去捕获,避免提供太过于注重宣传的内容;


2、提审帐号务必是可用的、高等级的帐号;


3、安装包须确保可以正常安装,并且包和文件的大小合规;


4、关于授权证书,如App含第三方内容,则必须提交第三方许可证明给苹果。


友盟统计常见问题索引贴【点我】
请大家善用搜索,一个帖子只解答一个问题,多个问题请再开新帖咨询,在论坛上解决一个问题请同时帮助别人解答两个力所能及的问题,谢谢大家!

您需要登录后才可以发帖 登录 | 立即注册

本版积分规则

发表主题

精彩推荐

集成友盟推送安卓SDK收不到消息的进!
“你好,我是一名安卓工程师,今天集成好了友盟推送,可怎么就收不到推送消息了呢?” 每天,我
CNZZ如何查看站内搜索的关键字和30天流量分析?
问题1:CNZZ如何查看站内搜索的关键字? 我知道通过受访的页面网址,可以在看到站内搜索关键字,如图 但是
聚网盟全网整合营销网络推广金融业【聚网盟—小赵】
聚网盟全网整合营销网络推广金融业【聚网盟—小赵】 金融推网推广:网络推广定位精细新兴产业不断涌出在互

关注我们

新浪微博
微信

欢迎关注友盟官方微博微信!

在线客服
返回顶部 返回列表