苹果应用主体迁移记录

关于 App 转移可以先看下苹果的这个官方文档,对总体的迁移流程有个底 Overview of app transfer (opens new window)

# 前期准备

# 确认App符合转让资格

在商店对应应用后台,查看「App 信息 → 转让 App」,出现如下界面,来查看转让 App 需要的前置条件。官方文档在这里 App transfer criteria (opens new window)

Untitled

大部分 App 基本上都是卡在了 TestFlight Beta 这步了,常见的问题

  1. TestFlight 构建版本移除只需要将构建版本置为已过期就好了。

  2. 将测试员和测试群组移除,在已删除的测试员里能看到人,不影响 Transfer App。

    Untitled

  3. 沙盒测试员的移除,不确定这个有没有影响,如果别的地方都没有问题,可以考虑删除这里的沙盒测试员。

  4. 清理测试信息的时候,要注意如果你有多个本地化版本的话,需要将所有本地化版本都删掉。可以参考这里:Can't transfer app due to TestFlight (opens new window)

  5. 迁移 App 这里可能是由于缓存的问题,我把所有清空完成之后再次进入是否支持转让页面时,依然提示“TestFlight Beta 版测试”选项没有通过。我退出登录,然后清除了一下缓存,再次进入发现一切都已经ok了。

  6. 我自己遇到的 CASE 比较诡异,上面这些我都做了,但是还是卡在 TestFlight,很奇怪,我尝试在后台新建了一个待提交的版本如图(只新建不提交任何构建版本),然后刷新了下转移界面发现 TestFlight 那一栏不卡了… 很神奇,误打误撞找到了方案

    Untitled

等所有条件都满足好之后,转移方就准备好开始进行转移了。

必须使用转让方的账户持有者进行转让操作。

# 确认接收方资格

必须使用接收方的苹果账户持有者(Account Holder)来进行接收。

# 迁移流程

初始化迁移流程的官方文档在这里 Initiate an app transfer (opens new window)

# 备份信息

备份最基本的信息。

参考这里,Note: Because an app is removed from your account after an app transfer, you should back up all information about the app for your records. It’s a good idea to keep a record of your appʼs metadata and pricing, note dates the app was available on the App Store, and save sales and download information.

# 开始转让

之前的前置条件都满足之后,可以开始发起转让流程,需要填写接收方帐户持有人的 Apple ID 以及团队 ID。

Untitled

接收方的团队 ID 在苹果开发者后台的会员资格详细信息区里查看

填写无误之后,点击继续进入,协议同意页面,确认转让方和接收方的主体是否正确,是否是待转让的应用,没问题的话,在页面底部勾选同意协议条款,并点击「请求转让」按钮。

Untitled

之后被转让的应用就停留在等待接收方处理的状态,你可以在后台里取消此转让。此时应用还可以正常下载,但是已经不能再后台更改应用的元数据了,比如应用信息,内购条目信息,价格信息等。

同时此时不能再上传新的包了,邮件会提示「ITMS-90748: App is Pending Transfer - Apps can't be submitted while their status is Pending App Transfer.」

Untitled

至此转让方的工作已经完成了,应用接收方需要在 60 天之内接收,否则被视为放弃。

# 开始接收

接收流程的官方文档是 Accept an app transfer (opens new window)

进入苹果商店后台,登录接收方的账户持有人的苹果账户,可以看到如下提示

「App 转让请求正在等待接受转让协议正在等待处理。若要完成 App 转让,你的账户持有人必须查看并接受协议、税务和银行业务中的条款。转让协议自发起日 60 天内有效。60 天内未接受的协议将被取消」

按照提示,我们进入「协议、税务和银行业务」区,点击 App 转让下的「审核」操作。

Untitled

付费应用或者应用带内购的话,这里的的银行信息等都需要先填好。

进入转让页面里

Untitled

填好信息之后点击接受,没问题的话就是转移成功了。之前发起转让的账户持有人会收到邮件,内容如下:

Untitled

然后等个几分钟,登录接收方的 Appstore Connect ,就能在应用里看到转移过来的应用了。转让的过程并不需要苹果审核。

# 迁移后的一些说明

# 商店相关

  1. 内购的项目也会跟着一起带过来。
  2. 历史的版本发布信息也会带过来。
  3. 评分以及评论都在。

# 开发相关

应用迁移过来之后,所有的配置文件(Identifier & Profiles)基本上都需要重新生成一下,有一些和主工程对应的 Identifier 是不会被迁移过来的,比如你主工程 Identifier 是 com.fanthus.xxx 主工程对应有个测试工程 com.fanthus.xxxdebug,则这个 Identifier 是需要转让方删除后,你才能在新主体下创建的,其实就是苹果保证 bundle id 是不同的机制。

# 分享&Adhoc功能

微信分享是依赖 Universal Links 的,配置 Universal Links 是需要将一个名为 apple-app-site-association 的文件放到指定目录下。问题来了,这个文件里的 bundle id 是带 teamid 前缀的,而变更主体的时候 teamid 也会同步发生变化,所以你需要将这个文件的 teamid 前缀替换为新主体的 teamid。

同理 Adhoc 包导出的时候需要的 ExportOptions.plist 文件同样包含一个 teamid,不替换为新主体的 teamid 的话,是没有办法安装 adhoc 包的。

# 推送功能

刚迁移完还之后推送还是能用的,我实际测试之后发新版之后就算不更新推送证书也能用(但不确定能持续多久),而且就算后续更新了推送证书,老的版本依然能收到推送,苹果应该是做了一些处理,不过官方文档这里说的不够细致。

官方文档相关描述:用于推送通知的关联客户端 SSL 证书不会转让。如果该 App 采用了“Apple 推送通知服务”(APNs),则接收方需要使用其开发者帐户创建一个客户端 SSL 证书,方可重新启用该服务。

参考地址:

  1. Overview of app transfer (opens new window)
  2. 记录一次APP的转让流程 (opens new window)

关注我的微信公众号,我在上面会分享我的日常所思所想。