iOS・Androidアプリを別developerアカウントへ移行する際の知見
アプリの譲渡・移行は実施が稀で情報が少ないので、誰かの役に立てばと書き残しておきます。
一番大切なのは、公式ドキュメントを熟読することです。
が、わりと誤りや不明点もあるので、問い合わせにかかる時間も含めて余裕を持ちましょう。
また、厳密な予定を組むのは不可能と心得て、関係者の合意も取りましょう。
移行の公式ドキュメント
iOS
- 日本語版:https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide_Jpn/Chapters/TransferringAndDeletingApps.html
- 日本語版2:https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide_jp/Chapters/TransferringAndDeletingApps.html
- 英語版: https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/TransferringAndDeletingApps.html
iOSはずっと1つ目を見ていましたが、本エントリ作成中に2つ目を発見しました。
2つ目の方が新しいですが翻訳がかなり怪しく、英語版が確実です。
Android
- 日本語版:別のデベロッパー アカウントへのアプリの移行 - Play Console ヘルプ
- 英語版: Transfer apps to a different developer account - Play Console Help
最初にやること
移行可能な条件に適合しているか確認
大事。だいぶ話が進んだときにAndroidで「定期購入アイテムを提供するアプリの移行はできません」という一文を見つけ大慌てしました。
問い合わせたところ、ドキュメントが古かっただけで可能でした。(現在は修正済みの模様、感謝!)
iOS/Androidでの相違点も多いため、混同しないよう注意しましょう。
移行フロー
iOS/Androidともに、所要日数の記載が無いのがツラいところです。
ストア反映の完了通知もありません。気付いたら変わっています…
簡易ですがフローを図示します。
iOS
移行元から移行申請 ↓ ↓ 数日以内? ↓ 移行先へ受諾可能となった通知が届く、受諾する ↓ ↓ 最大2営業日(のはず) ↓ 移行完了、ストア反映
iOSはstepが多く複雑です。「移行申請日」「受諾可能日」「移行完了日」など用語の定義をおすすめします。
「移行しました!」など曖昧な伝え方が発生し、齟齬が発生するためです。
Android
移行元から移行申請 ↓ ↓ 数時間〜数日以内? ↓ 移行完了、ストア反映
Androidはシンプルで、iOSより早い場合が多いようです。
ただiOSと異なり受諾無しで完了するため、移行先による日程のコントロールが出来ません。
自分は疲れからかiOSと同じかと勘違いし、大失敗しました。
事前準備
必要情報の準備
各OS、チームIDや注文番号などが必要です。
Google注文番号はアカウントの登録時にメールで来る番号です。正直そんな昔のもの失くすよね…
もし準備出来ない場合は問い合わせが必要です。
スケジュールの検討
移行と同日にアプリもアップデート予定でしたが、iOSは審査等のため不可能でした。
理想は、審査を通しリリース可能な状態にしておく→developer移行→新しい名義側でリリース でしたが、公開待ちでは移管申請が出来ないと途中で気付きました。
結果、リリース→developer移行 となり、1週間ほど差が出てしまいました。
このずれがあっても問題ないよう開発・運用の予定を引きましょう。
※公式に「移行可能な状態」は書いてあるのですが、「移行不可能な状態」の方が注意出来て有り難いので、本エントリの最後に付録として書きました。
レポートのexport
移行後は出来なくなるため、事前にとっておく必要があります。
ただしAndroidはレポート別に1ヶ月ずつしかDL出来ず、全期間のDLを試みると死にました。
普段からとっておくか、gsutilでも使っていれば楽出来たのかな…?
移行実施
移行申請
iOSで2点弾かれました。
TestFlightエラー
「TestFlight ベータ版テスト:譲渡する App からすべてのビルドおよびテスターを削除し、テスト情報の各フィールドのデータを消去する必要があります。」
TestFlightは使っていませんでしたが、自動的にupされていたようで消したところ解決しました。
課金系エラー
「App 用共有シークレット(購入者と共有する必要があります)を生成済みの場合、自動更新、無料、および非更新の登録を含む App のみ譲渡できます。」
こちらは課金機能をリリースしたことはないのに弾かれ、iTunesConnectの不具合のようです。問い合わせたところ進めてもらえました。
移行は実施が稀な分、ストア側にも未発見の不具合があるのかもしれません。
複数申請した内の1アプリだけ弾かれ、返答待ちで予定が読めず手順もややこしくなりました。
移行中
iOSは移行申請の翌日に受諾可能通知が来ました。
ステータスが「Pending App Transfer」になると書いてありますが、普通に「配信準備完了(Ready for Sale)」のままでした。
ただしバージョン追加ボタンがdisableで、普段とは違うことはわかりました。
権限の強いアカウントなら詳細を見られるのかもしれません。
移行完了
完了タイミング
Androidは移行申請の翌日にストア反映されました。残作業は無いためこれで完了です:tada:
iOSは受諾後早いものは1時間以内に反映されましたが、遅いものは3日経っても反映されず問い合わせました。
こちらも不具合だったようで個別対応してもらい、受諾から16日で反映されました。
普通は即座に終わるものだそうなので、1日かかった段階でも問い合わせて良さそうです。
iOSはPush, widgetがあるとその設定も必要です。
Push証明書の再設定
「プッシュ通知用に関連付けられたクライアントSSL証明書は譲渡されません。アプリケーションでApple Push Notificationサービス(APN)が使用されていた場合は、譲渡先ではMember Centerを使用してクライアントSSL証明書を作成し、このサービスを再度有効にする必要があります。」
公式のこの説明を読み、移行完了時点で即座に証明書が使えなくなる=Pushが届かなくなると思っていましたが、
新しい証明書適用までの数時間も普通に届いていました。
差し替えずいつまで使えるのかは不明です。
App Groupsの再設定
widgetでApp Groupsを使用しています。公式に記載はありませんが、これも無効化されるようです。
この辺りを見るに、移行元からグループを削除し、移行先で再登録すれば良いようでした。
- core data - Migrate iOS app group to another developer account - Stack Overflow
- App Group access after app transfer |Apple Developer Forums
ただPushと同じく、移行完了〜再登録までの数時間もwidgetは動いていました。
アップデートするまでは動作するのか、iOS弱いので要勉強です…
移行のつらいこと
テスト出来ない
移行は1度きりです。試すのも、早めにやっておくのも、失敗したら戻すのも出来ません。
作業途中でエラーとなるポイントも未知数でした。
いつ終わるかわからない
各所から日にちを聞かれるものの、答えられません。
Androidは作業時間を教えてくれたので1日以内のぶれで済みましたがiOSは全く読めず、
Push証明書等の後作業や告知日時の調整に苦労しました。
休暇も決めづらく、不在時に反映された場合用の準備などタスクが増えました。
事前には無理でも、せめて変わったらすぐ気付けるよう監視スクリプトを組んでおけばよかったです。
権限上、出来ないことが多い
ストア周りは会社であれば段階的にアカウント権限を振っていると思うのですが、
adminしか出来ない作業が多く、調査や依頼に苦労しました。
admin権限者と拠点が離れており、画面だけ見せてもらうことも出来ず手間取りました。
社外の人に聞けない
開発の相談ならば社外の人にも出来ますが、移行は特殊な事情なので明かす訳にはいきません。
日数の目安でも聞ければ、調整や時期の合意を取りやすかったと思います。
まとめ:大変
今回はアプリに絞って書きました。実際はサーバも移行しますし、関連作業の方が大変です。いやもう本当に。
しかし移行の仕組みが無かった頃よりは、選択肢が広がって有り難いことです。
アプリに関して言えば、情報さえあれば苦労しなかった面はあるので、本エントリを書きました。
もしもっと詳しい話を聞いてみたい方がいたら、 @wiroha までお声掛けください。
移行する人は少ないと思いますが、誰かの役に立てば幸いです。
付録
移行不可能な状態
https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/ChangingAppStatus.html#//apple_ref/doc/uid/TP40011225-CH30-SW1と突き合わせると下記の通り。
RejectedはOKで、Metadata RejectedはNGだと気付き面白い。