总结iOS审核问题【长期更新】

2,223 阅读15分钟

本文长期更新自己提交App Store审核时候遇到的坑,以及原因和相应的处理解决方案。也希望大家如果有相同困惑或者遇到自己不知道该如何解决的审核问题的时候,可以文章留言或者私信我,大家多交流,争取我们的App都能一发过审。

公司 App4.4 被拒 1 次【2019 年 4 月 22 日】

没想到这次中奖了 iOS2.3.1 审核大礼包。哎,难受,线上正好有个 bug 急需修复,然后还中奖苹果 2.3.1 大礼包,真是急死人。

### Guideline 2.3.1 - Performance

We discovered that your app contains obfuscated code, selector mangling, or features meant to subvert the App Review process by changing this app's concept after approval to the App Store.

The next submission of this app may require a longer review time, and this app will not be eligible for an expedited review until this issue is resolved.

**Next Steps**

- Review the Performance section of the [App Store Review Guidelines](https://developer.apple.com/app-store/review/guidelines/).
- Ensure your app is compliant with all sections of the [App Store Review Guidelines](https://developer.apple.com/app-store/review/guidelines/) and the [Terms & Conditions](https://developer.apple.com/terms/) of the Apple Developer Program. 
- Once your app is fully compliant, resubmit your app for review.

Submitting apps designed to mislead or harm customers or evade the review process may result in the termination of your Apple Developer Program account. Review the [Terms & Conditions](https://developer.apple.com/terms/) of the Apple Developer Program to learn more about our policies regarding termination.

If you believe your app is compliant with the [App Store Review Guidelines](https://developer.apple.com/app-store/review/guidelines/), you may submit an appeal. Alternatively, you may provide additional details about your app by replying directly to this message.



被拒原因:

这次被拒我们确实是有做混淆。我们混淆的目的并不是想做什么坏事,而且为了防止黑客的破解,我们之前碰到过黑客拿 iOS 端越狱机逆向工程,因为命名很规范,所以一些方法属性功能很容易被猜出来是干什么了,直播间被他们进行了针对性的破解。后来通过一系列的方式,这些漏洞全部都堵上了。但是考虑到关键的方法属性暴露在外着实是隐患,因为考虑用到了混淆。但是只混淆了直播间的一小部分最核心的代码,大概也就几十个属性,100 来个方法。并且我们混淆还是将有意义的单词随机抽出来组成的名字。而且从去年 10 月份开始一直到今年 4 月份,大概半年的时间上了十几个版本都没问题。没想到这次被苹果大礼包警告。

解决方案:

  1. 删除了所有 App 里的隐藏功能。不会再出现审核的时候是一套,过审了又是一套。
  2. 删除了所有的混淆
  3. 发英文邮件解释,重点如下:
    1)承认错误,承认代码混淆。因为这个我们确实是做了,那就一定要承认,不能死扛。
    2)着重突出我们混淆的原因是由于之前黑客在越狱的 iPhone 上破解 App,导致我们损失惨重,所以才做混淆,而不是出于欺骗或者隐瞒苹果的目的才做混淆。陈述下客观事实,隐性的甩一部分锅给苹果,勾起一下审核人员的同情心。
    3)阐述我们现在加上了服务器的一些校验,可以在不使用混淆的情况下也能保证用户的安全性。这个意思也得表达,不然苹果可能又要说我们没做过安全措施,又是麻烦的事情。
    4)最后在说明我们已经删除所有混淆代码,并且承诺永远不会再做这样的事情,恳求苹果爸爸再给一次重新做人的机会。
    这个邮件一定要写的很诚恳很诚恳,认错态度一定要非常非常端正。

后续:

等了 3 天,审核通过了。

公司 App3.6 被拒 2 次【2019 年 1 月 29 日】

在经历了难熬的 5 天等待时间外,又被拒了。此次被拒比较莫名其妙。被拒原因如下

4. 7 Design: HTML5 Games, Bots, etc.
Guideline 4.7 - Design - Third-Party Software


We noticed that your app includes code that is not embedded in the binary, but the software does not fulfill all of the requirements outlined in Guideline 4.7 of the App Store Review Guidelines or you have not provided us with an index of the software available in your app.

Next Steps

To resolve this issue, please ensure the software offered in your app:

– Is not offered in a store or store-like interface.
– Is free or purchased using in-app purchase.
– Only uses capabilities available in a standard WebKit view.
– Is offered by developers that have joined the Apple Developer Program and signed the Apple Developer Program License Agreement.
– Adheres to the terms of the App Store Review Guidelines.

Additionally, if you have not done so already, it would be appropriate to provide an up-to-date index of the software and metadata available in your app in the Review Notes section of App Store Connect. This index should include the app name, developer name, game URL, and App Store Connect Team ID for the software.



关于审核被拒 4.7 的网上一些信息
参考了一下网上的说法,结合我们自己的项目来看,感觉被苹果坑了,我们的三子棋和转盘游戏全部都是原生自己写的,根本就没用 h5。
解决方案:爸爸说你错了,你就是错了,别扯没用的犊子,写了一封春节特别版向爸爸认错的英文邮件。把直播间内的游戏全部去掉,用审核开关的那种方式隐藏掉,争取能过审把,求苹果爸爸审核通过,让我过个好年。

公司 App3.6 被拒 1 次【2019 年 1 月 24 日】

此次被拒是提交审核的时候只给苹果一个账号,没办法体验到直播间里面的游戏,一些游戏必须要多人才能进行,苹果要求录屏把游戏的内容发过去。

解决方案:如上

公司 App3.1 被拒 1 次【2018 年 11 月 25 日】

Guideline 1.2 - Safety - User Generated Content

Your app enables the display of user-generated content but does not have the proper precautions in place.

Next Steps

To resolve this issue, please revise your app to implement all of the following precautions:

- Require that users agree to terms (EULA) and these terms must make it clear that there is no tolerance for objectionable content or abusive users

- A method for filtering objectionable content

- A mechanism for users to flag objectionable content

- A mechanism for users to block abusive users

- The developer must act on objectionable content reports within 24 hours by removing the content and ejecting the user who provided the offending content


又被苹果这种蛋疼的举报机制拒了。

解决方案:这一类问题,只要你加上举报功能 - Report 拉黑功能 - Block 用户协议 - Eula 就可以了,如果 App 加了上述功能,你还遇到此问题,说明你们这些功能隐藏的太深,将入口修改的更明显即可或者通过视频 / 图片的方式向苹果解释说明

公司 App3.0 被拒 1 次【2018 年 11 月 15 日】

We noticed that your app incentivizes referrals in order to sign up new users. While rewarding the invitation sender with points or other digital content is acceptable, the person receiving the invitation should not receive any rewards for downloading or registering an account to use your app.

Incentivizing downloads has a direct influence on the App Store user reviews or chart ranking.

The next submission of this app may require a longer review time, and this app will not be eligible for an expedited review until this issue is resolved.



从 5 月底 1.0 上架后开始今天 6 个月了,我们迭代发布了 30 个版本了,都是当天晚上提交,第二天审核就过了。很舒服,但不幸的是今天被拒了,而且还比较严重。居然都警告我们下一次发布要延迟审核了。此次被拒主要是下面两个原因

  1. 我们 App 内部不是免费的,用户上麦聊天会扣除相应的金币 / 钻石,但是产品却把 App 的名字改成 XXX-Free Chat Room

  2. 我们 App 有分享用户注册激励,A 用户分享链接邀请 B 用户注册下载成功后,双方都会得到一定奖励。这是个再常见不过的功能了。结果苹果不允许。

解决方案:

  1. 去掉 App 名字里面的 Free

  2. 暂时先屏蔽掉用户分享注册得奖励的功能,一切先保证能上线。

  3. 写了一份言辞恳切的英文回复邮件,跪舔了一下苹果爸爸。

后续:并没有等很久,大概 2 天左右就审核通过了。这里要注意,再回复苹果审核人员的时候,英文最好地道一点,找你们公司英文最好的人去回复,言辞要注意,一定要恭敬。切记不要用有道百度翻译蹩脚的英语回复。实在公司里没有英文好的,哪怕用中文回复也比蹩脚英文好一点。

公司 App1.0 被拒 5 次【2018 年 5 月 27 日】

此次被拒是元数据被拒绝,让我们解释金币到底可以送什么礼物? 哎,真是醉了,苹果烦的一匹,很恶心。金币,钻石,会员这几个东西翻来覆去的问,翻来覆去的解释,翻来覆去的折腾,都过了大半个月了,真的是坑。

解决方案:将金币,钻石,会员的来源途径,消耗途径,包含的权限等完完整整清晰的解释了一下,并附录了相关截图。

后续:被拒 5 次后,耗时大半个月,App 1.0 版本终于上架成功。

感想:在 App 1.0 版本的时候,为了保证 App 能迅速上线,进行后续工作开展。所以 1.0 的版本尽可能功能单一,只完成 App 的核心功能。最好不要碰内购,1.0 的审核会比后续迭代严多了,加内购,很容易苹果就问各种各样的问题,耗费时间。

公司 App1.0 被拒 4 次【2018 年 5 月 25 日】

此次被拒是说:我们 App 的内购商品和实际物品有联系,所以不能用内购。苹果给的解决办法是让我们去掉内购商品。这次被拒的莫名其妙。

我们 App 内购商品只分两种,一种是虚拟币,用来购买礼物,虚拟东西等用,一种是 vip,主要是 UI 上会体现不同。唯一可能的地方是我们 Vip 功能介绍上有说,如果是 vip,客服会优先接待。按理说,这个应该不会成为被拒的理由吧。

解决方案:因为不确定到底是哪里和实际物品有联系,所以我们留下了联系方式,等待苹果客服人员与我们联系。

后续:苹果说是 3-5 个工作日内就会给我们回复,结果还真是要等 5 个工作日... 电话是从加州打过来的,一个美国妹子,态度十分不友好,翻来覆去的说些正确而又没用的话,我们同事反复解释,收效甚微,最后说是不是我们 VIP3 的内购价格 799 美元定的太贵了?那个妹子敷衍了两句说是的,太贵了。我们同事又追问说,那我们去掉 vip3 的内购可以吗?妹子又开始兜圈子说正确的废话了。。没办法,这次版本只好把 vip3 的内购去掉了。

公司 App1.0 被拒 3 次【2018 年 5 月 20 日】

我们已经把 vip 做成非续期订阅类型商品了,但此次还是被拒了。这次被拒是元数据被拒。苹果需要我们回答好几个问题。主要是解释金币,钻石这些虚拟币的功能和消耗。还有问我们是不是确定把 vip3 价格设置为 799.99 美元,言下之意,是怕我们坑用户。

解决方案:还是做相关性解释,关于定价问题,解释说我们是根据用户的反馈和意见来确定 vip 的购买价格,我们提供的服务是值这么多价钱的,不存在欺骗用户的行为。

公司 App1.0 被拒 2 次【2018 年 5 月 18 日】

上次的解决方案宣告失败,事实证明,在内购问题上,一切解释都是行不通的。虽然有 N 多 App 都是虚拟币去购买 vip。但我们这个就是不行。没办法,只能把 vip 做成非续期订阅类型。再上架试试。

解决方案:将 vip 由消耗性内购改成非续期订阅类型内购。

公司 App1.0 被拒 1 次【2018 年 5 月 15 日】

此次被拒有两个原因:

第一个原因:违反 Guideline 2.3.2

因为 1.0 版本有 iOS 内购。所以添加内购项目的时候没注意,把内购推广勾选上了,并且传了 App 的 icon 图作为推广图。如下:

image.png

被苹果拒绝。查了一下这个内购推广主要有两个用途。一个是 App Store 增加曝光度,并且产品介绍页面上会加上内购的介绍。另一个是可以让用户在没下载 App 时,也可以用内购购买你的产品。解决办法倒是很简单。要么是不勾选推广,要么是让 UI 对每个内购商品都提供不一样的 1024*1024 推广图。注意:不能重复 不能用 App Icon 图。App 内购推广详细介绍

第二个原因:违反 Guideline 3.1.1

我们 App 有提供 VIP。VIP 是由虚拟币购买的,虚拟币是内购而来。但苹果意思是让我们 VIP 直接也用内购。问题是苹果内购价格最高的一档才是 999 美元。我们 VIP(1-9)级,从 4 级开始就过千美元了。用内购根本不得行。所以暂时先尝试文字沟通的方法,看苹果是否能同意我们的说法。

解决方案:如上

上一个公司 App 更新迭代情况

公司 App 3.2 被拒 2 次

第一次:又说我们是带有直播性质,但是并未向苹果提供网络文化经营许可证,因此被拒。不知道苹果抽什么风,之前明明传过了,又让我们再传一遍。

第二次:因为找不到 IAP 入口被拒了,我们项目在 1.0 的时候用了内购,后来随着版本迭代,早就把内支付去掉了,不过 iTunes 上面还保留了内购项目,解决办法就是把 iTunes 上的内购项目去掉。

公司 App3.1 被拒第 4-8 次

被拒原因全部是因为 PLA1.2,相关解决方案如下

一次关于 PLA1.2 审核无限被拒的坑

公司 App3.1 被拒第 3 次

此次被拒是因为审核人员发现我们 App 带有直播性质,但是并未向苹果提供网络文化经营许可证,因此被拒。

解决方案:提交网络文化经营许可证

公司 App3.1 被拒第 2 次

此次被拒是因为审核人员发现注册页面没有 EULA(最终用户许可协议,指的是一家公司的软件与软件的使用者所达成的协议)

解决方案:加入注册协议,让用户勾选

公司 App3.1 被拒第 1 次

此次被拒有两个原因:

image

第一个原因是 UI 在做 App 展示页的时候,切了一张安卓电池栏的图片,被拒。

image

第二个原因是我们在 Info.plist 有设置在后台运行的功能,是因为我们 App 有语音直播的功能,需要主人或者主持人在后台模式下,依然可以将声音传播出去。这里没做更改,选择的是向苹果审核人员解释。

公司另一个 App1.0 被拒 1 次

  1. 此次被拒两个原因

第一个原因是用户可以在语音直播间里面发送弹幕,但是 App 本身未提供举报功能,违反了苹果审核政策。

第二个原因是这个 App 是类似比邻这种社交语音 App,审核人员难以演示。

解决办法:

  1. 加入举报功能。

  2. 让产品经理录制介绍产品的视频,在 iTunes 里面的附件中添加,以防万一,也上传视频到腾讯视频中并在备注中提供视频连接,保证审核人员一定可以看到视频介绍。

公司 App 版本号 2.0.1 被拒 1 次

  1. 此次被拒含两个原因

第一个原因是 App 副标题。苹果认为我们的标题不能算是一个标题,更像是关键词堆砌。

第二个原因是公司 App 评级在 17+, 但是用户选择生日时,是可以选择低于 18 周岁的生日。

解决办法:

  1. 让产品重新起一个完整的副标题。
  2. 修改代码,让用户无法选择 18 周岁以下的生日。

公司 App 版本号 1.1 被拒 1 次

  1. 因为 App 名字副标题中包含美女模特被拒

解决办法:去掉了 App 名字中的美女模特,审核通过。

公司 App 版本号 1.0 被拒 3 次

  1. 因为后台定位 NSLocationAlwaysUsageDescription 字段被拒

解决办法:去掉了该字段,然后只保留应用内定位权限,并且更详细的描述了应用内定位的目的。

  1. 因为内购被拒,苹果认为主播的时间服务等等也算是一种虚拟表现,需通过内购的方式购买。

解决方案:
利用后台开关,做两套逻辑,当审核时,关闭开关,苹果看到的是有关内购的逻辑,当审核通过后,在打开开关,还是走支付宝 / 微信支付的流程,这样用户就可以正常使用了。

备注:我们曾经试着用中英文与苹果进行沟通,详细的解释了主播的时间等等不应算是内购服务,但是一点用都没,后来我们项目中集成了内购,通过审核开关屏蔽这一块,就可以愉快的用支付宝 微信了。【注意:此法是 2016 年使用的,不适用于现在绕开内购的手段了

  1. 因为 iTunes 共享 UIFileSharingEabled 字段被拒

解决办法:该字段作用是启用 iTunes 共享功能,如果不需要此功能只要将其设置为 false 即可审核通过,为防止第三方配置将其在覆盖掉,可以在打包 iPA 后,通过解析 iPA,查看其 plist 文件,观察此字段的 key 值。