记录 App Store 上架审核二三事

2017-10-28  本文已影响0人  Seimda

工作至今,由我上架和更新的 App 大概有二十多个吧,有为客户做的项目,也有自己公司的产品。可以说,由我检查确认过的应用,上架一次性通过率还是相当高的。

这里把我遇到的一些特别的注意点和遭拒记录下来。

注意点

提交审核大大小小注意事项还是有不少,这里就记录几点

  1. 确定打包项目中有无广告标识符(IDFA)

在上架的每个版本提交时,都需要确认 App 有无使用,如果选择结果与 App Store 实际检测结构不符,此打包文件将遭拒绝。
检测方法是 CD 到项目根目录(或者打包文件所在目录),使用 grep 命令

grep -r advertisingIdentifier .

此命令可以搜索项目中有无 advertisingIdentifier 符号,advertisingIdentifierAdSupport 框架中的一个成员变量,它的值代表了投放广告时用于识别设备的唯一标志。如果存在,则说明很大可能是启用了广告标志符。虽然自己的项目中没有直接使用广告标识符,但很多第三方 SDK 中会使用,所以上架前进行检测一下也是必要的。

  1. 检查项目的 Push Notifications 开关是否处于 ON 的状态

Xcode 7 以前,不开启 Push Notifications 开关也没什么问题,从 Xcode 8 开始,启用推送的项目必须打开这个开关才能开启推送功能开关,否则无法接收到手机的 deviceToken,另外上传 App Store 后还会收到一封邮件,提示 “Missing Push Notification Entitlement”。
类似的,项目中用到其他的服务也必须开启相应的开关。开启后会在项目中生成一个 entitlements 文件,用于统计此项目启用的所有服务。

  1. 如果项目中有动态库,在上传之前必须把动态库中的 i386 或 x86_64 架构剔除,否则直接导致上传失败

以环信 SDK 为例
如果不剔除 x86_64 架构,上传时可看到如下界面。


剔除前

使用 lipo 命令

lipo Hyphenate.framework/Hyphenate -thin armv7 -output Hyphenate_armv7
lipo Hyphenate.framework/Hyphenate -thin arm64 -output Hyphenate_arm64
lipo -create Hyphenate_armv7 Hyphenate_arm64 -output Hyphenate
mv Hyphenate Hyphenate.framework/

这个操作其实是通过 Xcode 提供的 lipo 命令把环信动态库 Hyphenate 中的 armv7 和 arm64 架构取出合成一个新的文件。
如果要查看动态库的架构组成可以使用

lipo Hyphenate.framework/Hyphenate -info

或者

file Hyphenate.framework/Hyphenate

剔除 x86_64 架构后的界面


剔除后

另外扯一句题外话,使用使用环信动态库后会让应用安装后大小增加 20+M ,因为 Xcode 会把编译后的 动态库文件直接打包进 App 的 Frameworks 文件夹,而使用静态库则不然,静态库只会把用到的部分链接到 App 二进制文件中。

其他还有很多零碎的注意事项这里就不一一展开了。

被拒案例

常在河边走,哪能不湿鞋。上架过程中偶尔还是会遇到一些拒绝的情况,提2个印象比较深刻的

  1. PLA 1.2 & Guideline 5.2.1

这是我遇到最多的被拒理由。PLA 1.2 是去年收到的过,Guideline 5.2.1 是最近收到的。

PLA 1.2
The seller and company names associated with your app do not reflect the name “XXXX” in the app or its metadata, as required by section 1.2 of the Apple Developer Program License Agreement.
Your app must be published under a seller name and company name that reflects the institution. If you have developed this app on behalf of a client, please advise your client to add you to the development team of their Apple Developer account

Guideline 5.2.1 - Legal - Intellectual Property
The seller and company names associated with your app do not reflect the institution in the app or its metadata, as required by Guideline 5.2.1 of the App Store Review Guidelines.

虽然条款变了,但都指向了一个问题,应用与开发者账户没有对应关系,因为一部分应用是我司替客户开发并上架的,应用本身跟我司并无关联。申诉过几次,之前有一定概率通过,但最近越来越难,目前没有好的解决办法,实在不行只能让客户申请自己的开发者账户了。

  1. UIRequiredDeviceCapabilities 问题

这是我遇到的唯一一次也是最“坑”的拒绝,

iTunes Connect 提示信息

App 的 Info.plist 不得包含 UIRequiredDeviceCapabilities 键的值,该键会阻止此 App 在之前版本支持的任何 iOS 设备上打开。有关更多信息,请参阅了解 UIRequiredDeviceCapabilities 键。

事情是由于应用之前的版本都不包含 HealthKit ,而新版本需要添加步数记录功能,添加后在 Info.plist 中会出现 Required device capabilities 一栏,要求运行应用的手机必须支持 HealthKit,而支持 HealthKit 又会导致在之前版本支持的设备上无法打开,要消除这个错误必须删除 Info.plist 中的 Required device capabilities 一栏,而删除后 HealthKit 功能又没法使用了,于是陷入了死循环中...

咨询苹果客服并没有任何帮助,只是得到了一些官方的无实际帮助的解答,而问题最终是通过上架一个新应用解决的。

以上只是对审核中几个小点记录下,如果想要顺利通过 Apple Store 审核,有时间时应看看 Apple 官方文档,遇到解决不了的问题多搜索,不行还可以邮件咨询咨询 Apple 客服,一般不会遇太大问题。

上一篇下一篇

猜你喜欢

热点阅读