chore: VRT専用のホストアプリターゲットを追加してスナップショットテストを高速化する - #332
Open
stotic-dev wants to merge 6 commits into
Open
stotic-dev wants to merge 6 commits into
stotic-dev wants to merge 6 commits into
Conversation
VRT専用ホストアプリはAppRootに依存しない(Firebaseを引き込まないため)。 AppRootに置いたままだとこのViewのスナップショットが撮れなくなるので、 依存がHometeDomain/HometeResourcesだけで済むHometeUIへ移す。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
VRTのテストホストがhometeアプリだったため、AppRoot → HometeInfrastructure 経由でfirebase-ios-sdk(gRPC/abseil/leveldbをソースビルド)・GoogleMobileAds・ RevenueCatのビルドがVRTのたびに必要になっていた。Feature / HometeUI / HometeDomain / HometeResources はこれらに依存していないので、VRT専用の ホストに差し替えてビルドするモジュールを減らす。 hometeVRTHostはkey windowを用意するだけの空のAppにして、描画対象の モジュールはhometeSnapshotTests側が直接リンクする。ホスト経由(BUNDLE_LOADER) でシンボルを解決させると、ホストが参照しないオブジェクトファイルが リンク時に落ちうるため。 ローカライズは文字列カタログを持たない代わりにCFBundleLocalizationsで ja/enを宣言し、-AppleLanguages (ja) でLocale.currentがjaへ解決される 状態を維持する(既存のLocalizable.xcstringsは訳文がキーと同一で、 表示内容には影響しない)。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
テストホストをhometeVRTHostに切り替えたことでGoogle Mobile Ads SDKが リンクされなくなり、GADApplicationIdentifier未定義による起動時クラッシュの 回避目的でデコードしていたxcconfigが不要になった。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
.prefireIgnored()が付いたプレビューはPrefireが生成コードへ展開しないため、 モジュールが.prefire.ymlに未登録でも、private/fileprivateなシンボルを 参照していてもVRTのビルドは壊れない。AppRootをVRT対象から外したところ、 .prefireIgnored()済みのAppTabViewのプレビューを誤検知していた。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
VRTのテストホストが
hometeアプリだったため、スナップショットを撮るたびにAppRoot → HometeInfrastructure → firebase-ios-sdk / GoogleMobileAds / RevenueCatの全体をビルドしていました。firebase-ios-sdk はSPM経由だと gRPC・abseil・leveldb をソースからビルドするため、Xcode Cloud のVRTワークフローの時間の大半がスナップショットと無関係なコンパイルに費やされています。スナップショット対象のViewが属する
Features/HometeUI/HometeDomain/HometeResourcesはLocalPackage/Package.swift上でこれらに一切依存していないので、VRT専用のホストアプリに差し替えてビルドするモジュールを減らします。経緯は ADR-0029 に記載しました。
変更内容
refactor:LaunchScreenViewをAppRoot→HometeUIへ移動(AppRootをVRT対象外にするため)chore:hometeVRTHostを追加し、TEST_HOSTを差し替えci:ci_post_clone.shのVRT分岐からSecret_dev.xcconfigの展開を削除docs:設計上のポイント
hometeVRTHostは key window を用意するだけの空のApp。LocalPackage には一切依存させていませんhometeSnapshotTestsが直接リンクします。ホスト経由(-bundle_loader)でシンボルを解決させると、ホストが参照しないオブジェクトファイルが静的リンク時に落ちうるためですInfo.plistのCFBundleLocalizationsでja/enを宣言し、-AppleLanguages (ja)でLocale.currentが ja に解決される状態を維持しています(既存のLocalizable.xcstringsは全エントリがstaleかつ訳文がキーと同一で、表示内容には影響しません)Secret_dev.xcconfigの展開が不要になったのは、Google Mobile Ads SDK がリンクされなくなりGADApplicationIdentifier未定義による起動時クラッシュが起きなくなったためですXcode Cloud の
VRTワークフローが使っているスキームがhometeSnapshotTestsかどうか。hometeスキームを使っている場合、homete.appがビルドされ続けるので高速化の効果が出ませんSecret_dev.xcconfigが必要なままなので、VRTが落ちますその場合はワークフローのスキームを
hometeSnapshotTestsに変更してください(このスキームは BuildAction が空で、テストターゲットの暗黙依存=hometeVRTHostだけをビルドします)。確認したこと
LocalPackageのビルド: 成功make test-packages: 6ターゲットすべて成功project.pbxproj:plutil -lintOK、参照整合性(ぶら下がり参照・到達不能オブジェクト)ともに問題なしxcodebuild -list:hometeVRTHostを含めてXcodeがプロジェクトを読めるVRT自体はローカルでは流さない運用なので、スナップショットの一致はこのPRのXcode Cloud実行で確認します。
LaunchScreenViewの移動によるスナップショット名の変化はない想定です(Prefireはモジュール名ではなくプレビュー名でファイル名を決めるため)。補足: JSON形式のプロジェクトファイルについて
新フォーマット(
.xcodeprojの中身がproject.pbxproj→project.xcprojのJSON)は実在しますが、作成・変換に Xcode 27.2 が必要で、2026-09-30時点では beta です(安定版は 27.0)。Xcode Cloud や CocoaPods/Xcodeproj・tuist/XcodeProj など周辺ツールの対応も揃っていないため、今回は従来の pbxproj にターゲットを追加しています。安定版が出た時点でプロジェクト全体の変換として別途検討するのが良さそうです。🤖 Generated with Claude Code