Google Play Consoleの署名エラーでリリースが遅れた

この記事は Akerunのカレンダー | Advent Calendar 2023 - Qiita - 9日目の記事です。

こんにちは、ohioshirt - Qiita です。
普段はAndroidアプリの開発をしています。個人ではiOSアプリも開発します。
今回はAndroidアプリリリース作業の中で起きたトラブルについて書きます。

はじめに

この記事にはアプリへの署名の話が出てきます。
記事そのものを読むための前提知識は不要だと思いますが、
知識を得たい場合は公式ドキュメントを当たってください。 https://developer.android.com/studio/publish/app-signing?hl=ja
実例に近い形で理解を深めたい場合は、以下の記事が参考になります。 https://note.com/nttrtech/n/n18280473a4d6

TL;DR

Google Play Consoleでアプリを更新しようとしたところ、署名エラーが発生して公開時の審査へ進めなくなりました。
こちらの不手際である確証はないものの
Google Issue Trackerで問い合わせたところ、
何かしらの修正が行われ、解決しました。
めでたしめでたし。

以下、本編です。

見知らぬ、エラー

ある秋の日のこと、
Google Play Console上で次のリリースに向けてアプリを審査に提出した時に
以下のエラーメッセージが表示されました。

以前の APK の署名には鍵のローテーションが使用されていますが、
このリリースには、proof-of-rotation に同じ証明書が含まれていない APK(バージョン コード xxxxxx)へのアップグレード パスが導入されています。

検索、そして検証

前のバージョンと比べてもtargetSdkVersionの変更も行っておらず、
署名に関する変更を行ったのは半年近く前のことです。
心当たりが無いため、ひとまず前例がないか調べてみると、
以下のコミュニティページが見つかりました。

https://support.google.com/googleplay/android-developer/thread/235877033/unable-to-release-app-updates-from-google-play-console?hl=en-AU

ほぼ同じタイミングで同じエラーに遭遇した人がいるようです。
しかも、同じ問題があるという投票がいくつかありました。当時は2件ほどでした。
コメントから、おおよその条件が見えました。

  • Playアプリ署名を有効にしている
  • 鍵のローテーションを行った
  • いわゆるAndroid13対応済み(targetSdkVersionを上げている)

なるほど、確かに該当する。
弊社も数ヶ月前に発生した某サービスのインシデントのために鍵のリセットを行い署名を更新しました。
しかし、それまで何の問題もなくアプリを更新できていたことから、
アップグレード自体は問題ないと考えていました。
ところが実際にapksignerで内容を確認すると、Scheme v3.1に違いが見られました。

pc-user@mac-user-san ~ % <path-to-apksigner> verify -v /Users/pc-user/work/10001.apk
Verifies
Verified using v1 scheme (JAR signing): false
Verified using v2 scheme (APK Signature Scheme v2): false
Verified using v3 scheme (APK Signature Scheme v3): true
Verified using v3.1 scheme (APK Signature Scheme v3.1): true
Verified using v4 scheme (APK Signature Scheme v4): false
Verified for SourceStamp: true
Number of signers: 1

pc-user@mac-user-san ~ % <path-to-apksigner> verify -v /Users/pc-user/work/10000.apk
Verifies
Verified using v1 scheme (JAR signing): false
Verified using v2 scheme (APK Signature Scheme v2): false
Verified using v3 scheme (APK Signature Scheme v3): true
Verified using v3.1 scheme (APK Signature Scheme v3.1): false
Verified using v4 scheme (APK Signature Scheme v4): false
Verified for SourceStamp: true
Number of signers: 1

Scheme v3.1がtrueとなり、今回のバージョンから差が生じたようです。
そして、今回のapkには先述のエラーに出てきた「proof-of-rotation」が正しく設定されていない模様。
どこかで設定する機会があったのか振り返ってみましたが、やはり無い。

初めてのIssue Tracker

原因と解決策が見つけられないため、サポートに問い合わせることにしました。
普段サポートに問い合わせることはないため、
適切な対応ができる問い合わせ先を特定するまでに時間がかかりました。
最終的にGoogle Issue Trackerに行き着いたものの、
これまで利用したことがないUIにまた苦労しました。

Issue Tracker、さっぱりわからない
問い合わせ先のカテゴリがわからない!

終息

問い合わせてからの動きは迅速でした。
1日足らずで返信があり、解決したとのこと。
Google Play Consoleを確認すると、エラーは解消され無事審査へ進めるようになっていました。
原因についての説明がなく真相は不明ですが、何かしらの対応が行われたと思われます。
はっきりしない終わり方ですが、 一連のエラー対応はこれで終息しました。

残された謎

改めてサポートページを見直すと
鍵のアップグレードを行う時にproof-of-rotation を生成することについて書かれていました。

ステップ 1: 新しい鍵をアップロードし、proof-of-rotation を生成してアップロードする

当時の手順とスクリーンショットを見る限り、
鍵をリセットした時にproof-of-rotationの設定を促されず
そのまま設定する機会が失われたのではないかと思います。
先のコミュニティページでのコメントを見る限り
Play Console側にも発生の原因があることが仄めかされていましたが、
はっきりとしたことはわかっていません。

よかったこと

Issue Trackerは滅多に使わないので、いい経験になりました。
意外とレスポンスが早く、たらい回しにされることもなく
心理的なハードルが下がりました。
また、原因調査の過程で署名に関する理解が深められたのも怪我の功名です。

反省点

今回のエラーの解決のために公開がそれなりに遅れました。
ビジネスサイドからの要望に応えるリリースが遅れてしまったことで、
関係者には迷惑をかけてしまいました。
不測の事態でもなるべく影響を広げないように、知識を深め迅速に対応していきたいです。
もう1点、リリース担当者(自分)がインフルエンザにかかってしまったことで
ストア公開はさらに1週間遅れました。
忘年会シーズン真っ只中、体調管理には気をつけましょう。


株式会社フォトシンスでは、一緒にプロダクトを成長させる様々なレイヤのエンジニアを募集しています。 photosynth.co.jp

Akerunにご興味のある方はこちらから akerun.com