iOS APP 转让避坑指南

4,261 阅读5分钟

背景

由于公司主体改变,跟进法务要求,需要将APP下面的主体改变成新主体。主体改变有两种途径:

  1. 直接在开发者账号-联系我们-会员资格和账户-组织名称更改。 在这里插入图片描述
  2. 通过App Store Connect 来进行APP转让,将APP转让到新主体下面。 在这里插入图片描述

第一种方案对APP来说是没有影响的,如果公司主体更换,最好是选择第一种方式。但是由于我们主体更换后,法人已经更变,导致无法提供相关信息给苹果开发者账号审核这边进行审核。所以只能用第二种方案,APP转让的方案了。2019年10月份,我们开始了APP的转让,但是当时由于我们使用了iCloud功能,导致我们无法迁移。 在这里插入图片描述 就这样,等待了2年后,苹果终于放开iCloud限制了,使用了iCloud的也可以迁移。官方文档 在这里插入图片描述 在这里插入图片描述

问题

APP转让时,App Store的评分、评论是可以选择保留与不保留的。另外APP转让,不会影响已经上架在App Store的应用(包括推送、通用链等,都不影响)。具体的迁移流程就不多讲了,自己操作都有提示,很容易。下面讲一下迁移后和迁移前需要处理的问题。

一、keyChain

如果APP中使用到了KeyChain功能,新版本将不能访问老版本的KeyChain数据。原因如下:

ITMS-90076: Potential Loss of Keychain Access - The previous version of software has an application-identifier value of ['xxxx.xxxxx1'] and the new version of software being submitted has an application-identifier of ['xxxx.xxxxx2']. This will result in a loss of keychain access.

在这里插入图片描述 KeyChain中存储的数据是跟Team ID相关的,访问数据是通过TeamID+BundleID 来访问的,由于我们将APP 从 A开发者账号 转让到 B开发者账号,这样Team ID就发生了变化,所以无法读取保存在 A开发者账号下的 KeyChain 数据了。我们很多应用应该都用KeyChain来做DeviceID唯一,或者存储登录状态、用户密码等,迁移后这些数据都将获取不到,所以需要注意这个。并且需要提前做好准备。

我们可以用以下方法: 在迁移前,我们可以将 KeyChain中存的数据,同时存储到本地缓存(沙盒SandBox)中,在 APP 启动时,优先从 Keychain 中读取,如果 Keychain 中取不到,就从本地缓存中取(然后再把本地缓存的同步到 Keychain 中,因为即使 APP 转让了,用户更新版本覆盖安装后 Sandbox 中的数据是不会变的),如果两处都取不到,那就看业务是如何生成数据,重新存储到 KeyChain中。

二、Sign in with Apple (苹果三方登录)

不同的苹果开发者账号主体,苹果登录生成的唯一标识是不一样的,所以应用迁移后,通过Sign in with Apple(苹果三方) 登录,获取到的Identifier值和原来的不一致。因为三方登录一般是用Identifier与本身账号体系做的关联绑定,迁移后,将会导致用户重新走关联绑定的流程。

通过查看苹果官方文档,发现苹果已经提供了解决方案。

文档中,苹果提供了转化条件。这里的transfer_usb就是用户在新主体账号 B 下面生成的 Identifier_02。 在这里插入图片描述

具体步骤如下: 1、通过转化工具提前获取用户的 Identifier_02。 2、将Identifier_02 刷回原来的用户数据库,覆盖旧的账号Identifier_01。 3、用户重新用 Apple 登录,Identifier_02 能正确匹配到该用户。 当然这个少不了后端同学的配合了。在这里感谢我们 毛架 陪我战斗到天亮。

三、APP Groups

如果我们应用中用到了Extension(扩展),并且用到了APP Groups 共享数据,在应用迁移后,需要将原来账号下面的Group ID删除掉,这样在新账号下才可以重新生成同名的Group ID,否则会报以下错误。

An Application Group with Identifieris not available. Please enter a different string.

在这里插入图片描述

那么在哪里删除原来账号下面的APP Group ID呢?需要在开发者账号的证书管理中心下面,找到App Groups 然后删除掉相应的Group ID。 在这里插入图片描述 删除后,重新刷新一下APP Groups,发现不再报错了。

四、Universal Link(通用链)

如果APP中用到了通用链,用于在H5页面唤起APP,那么应用迁移完之后,在所有的通用链配置文件中的旧的Team ID的基础上,增加新账号Team ID相关的配置。这样配置后不会影响线上和后续新版本应用的唤起。当然这个少不了麻烦运维同学,在这里感谢然总奎神的相助。 一般在域名下面目录:xxx.com/apple-app-site-association或者xxx.com/.well-known/apple-app-site-association 在这里插入图片描述

五、内购沙盒测试账号

APP 转让完毕后,原来的内购沙盒测试账号将不能使用,测试内购时,统一需要使用新开发者账号下面的沙盒测试账号。

六、开发者证书

APP 转让完毕后,原来账号下面的证书将不再适用,开发者证书、推送证书等,都需要在新开发者账号下面重新生成。证书配置官网

七、App Store小型企业计划

App Store小型企业计划,是不允许进行新App转让的。如果您发起或接受App转让,您将无法注册此计划或不再符合参与此计划的资格。就是说发起方和接收方的小企业计划都会被取消,需要从新申请此计划,提交审核。申请官网地址