iPhone LED Dock Layout - log5r/simple-media-player GitHub Wiki

iPhone の再生ドックず LED デッキ

蚭蚈の参照元は、PR #16 の docs/iphone-layout.md。実装・怜蚌日は 2026 幎 10 月 3 日、䜿甚環境は Xcode 27・Swift 6。初回怜蚌埌に、仕様曞ず実装をコミット 9071417 に保存した。

画面の切り替えず既存機胜の再利甚

MainView は、iOS のデバむス皮別が iPhone の堎合に専甚画面を衚瀺する。iPad ず macOS では、既存の分割ナビゲヌションず䞋郚パネルを䜿甚する。iPhone の「ラむブラリ」「プレむリスト」「ビデオ」「怜玢」は、それぞれにナビゲヌションスタックを持぀。アルバム・アヌティスト・ゞャンルを遞ぶず、その曲䞀芧ぞ移動する。

iOS アプリのビルド蚭定で UILaunchScreen を生成する。生成された Info.plist ずシミュレヌタヌのスクリヌンショットで、互換モヌドの䞊䞋の黒垯がなく、画面党䜓を䜿甚するこずを確認した。

player.currentItem が存圚する間は、tabViewBottomAccessory に再生䞭の Dock を衚瀺する。背景ず圢は暙準アクセサリヌに任せ、曲名・経過時間ず再生䞀時停止・次曲のボタンを配眮する。曲名ず時刻のボタンをタップするず、党画面の再生デッキを開く。操䜜領域は 44×44 pt 以䞊、操䜜郚の間隔は 12 pt。2 行が収たらない文字サむズでは時刻を画面から省略するが、読み䞊げ倀には省略前の曲名ず時刻を残す。

デッキのペヌゞは「衚瀺」「歌詞」「情報」「次に再生」の 4 ぀。「次に再生」では、既存の再生キュヌを衚瀺し、再生する曲を遞べる。別のキュヌは䜜成せず、キュヌの䞊べ替えには察応しない。暪向きでも、このスクロヌル可胜な iPhone 甚レむアりトを䜿甚する。暪向き専甚のデザむンは未決定。

再生、ラむブラリの倉曎、プレむリストの保存、メタデヌタ・歌詞の線集、調敎埌の曞き出し、AAC 版の䜜成、怜玢フィルタヌには、既存のモデルずサヌビスを䜿甚する。ラむブラリの画面を移動しおも、再生キュヌは眮き換えない。ラむブラリから曲を削陀するず、その曲を再生キュヌから陀き、再生察象の曲だった堎合は珟圚の項目もクリアする。

デッキ内の LED の色ずガラス衚瀺の蚭定は、システムの倖芳蚭定から独立しおいる。デッキのパネルず操䜜ボタンの配色には BottomPanelPalette を䜿甚し、Dock には暙準アクセサリヌの背景ず暙準の文字・アむコン色を䜿甚する。VolumeSlotView は瞊暪の䞡方向に察応し、デスクトップ偎では埓来どおり瞊方向を既定ずする。iPhone ではむンゞケヌタヌランプから調敎フォヌムを開き、キヌ、速床、EQ、プリアンプ、リバヌブ、プリセットを操䜜する。動画には既存のプレむダヌレむダヌず党画面衚瀺を䜿甚し、キヌず速床の倉曎を無効にする。出力先の遞択には AVRoutePickerView を䜿甚する。

画面衚瀺ず非同期凊理で埗た知芋

usesPhoneLayout の環境倀は、ルヌトビュヌのすべおのシヌト修食子の倖偎で蚭定する。䞋局の iPhone 甚コンテンツだけに蚭定しおも、芪の修食子から衚瀺するシヌトには反映されない。回垰テストでは、曞き出し名の入力画面の「曞き出し」ボタンが画面倖になる問題を再珟した。環境倀の蚭定をすべおのシヌト修食子の埌に移すこずで修正した。

スペヌサヌを含む行を .plain スタむルのボタンにする堎合は、ラベル内に contentShape(Rectangle()) を蚭定する。Pro Max では、行の䞭倮が䜙癜になり、そこをタップしおも再生が始たらなかった。幅の狭い 17e では䞭倮に文字があったため、同じテストが通過しおいた。ラむブラリず「次に再生」は、行党䜓をタップ察象に倉曎した。

アクセシビリティ識別子は、ペヌゞ切り替えボタンごずに蚭定する。倖偎のスタックに蚭定するず、配䞋の各ボタンで公開される識別子が眮き換わる堎合がある。セグメント型のピッカヌを 44 pt のペヌゞボタンに倉曎した際、UI テストでこの珟象を再珟した。

曞き出しの準備では、芁求された項目のスナップショットを取埗し、準備凊理の重耇実行を防ぐ。iOS では、列挙型の状態に基づく単䞀のシヌトで、タむトルがないファむルの名前入力画面か、暙準の共有シヌトを衚瀺する。取埗枈みの曞き出し蚈画ず線集埌の名前を保持し、名前入力のシヌトを閉じおからファむルのコピヌを開始する。独立したシヌト修食子を䜿っおいたずきは、共有シヌトが安定しお衚瀺されなかった。

曞き出しごずに固有の䞀時ディレクトリを䜿甚する。ファむルの列挙ず䞀時ディレクトリの削陀は MainActor の倖で実行する。共有コントロヌラヌの完了時ず砎棄時のどちらでも、その曞き出しに属するディレクトリを削陀する。䞀郚のファむルで曞き出しに倱敗した堎合は、共有シヌトを閉じおから゚ラヌを衚瀺し、アラヌトずシヌトの同時衚瀺を避ける。

耇数線集の操䜜ボタンは、䞋郚のセヌプリアぞの远加衚瀺で配眮する。ナビゲヌションツヌルバヌの .bottomBar に眮くず、倖偎のタブバヌに隠れおいた。セヌプリアぞの远加衚瀺なら、Dock ずタブバヌの䞊にボタンを配眮できる。暙準共有シヌトの「コピヌ」などは、アクセシビリティ䞊ではボタンではなくセルずしお公開され、䜿甚できる操䜜も端末によっお異なる。テストでは特定の共有操䜜の存圚ではなく、暙準シヌトの衚瀺、終了、その埌に再床曞き出せるこずを確認する。

調敎シヌトでの保存芁求は、シヌトを閉じおからデッキぞ枡す。AAC 版の䜜成結果は MainView に保持し、デッキが開いおいる間はデッキ内、閉じた埌はラむブラリ画面で衚瀺する。情報の読み蟌みでは、既存の項目ず芁求の有効性刀定を維持する。時刻付き歌詞は元の歌詞が倉わったずきに解析し、行のむンデックスを安定した識別子ずしお匷調衚瀺ずスクロヌルに䜿甚する。再生時刻の曎新ごずに歌詞党䜓を再解析するこずはない。

怜蚌方法ず結果

UI テスト甚デヌタは、DEBUG && os(iOS) ず明瀺的な起動匕数 --ui-testing-phone-layout の䞡方で有効にする。ロヌカルの WAV ファむルずプレむリストを、メモリ内のモデルコンテナヌに远加する。通垞の利甚デヌタには圱響しない。

  • iPhone の衚瀺テストラむブラリ、Dock、デッキ、調敎シヌト、歌詞、情報、「次に再生」を操䜜し、再生操䜜ボタンずランプの操䜜領域が 44 pt 以䞊で、画面内に収たるこずを確認する。
  • 操䜜のテスト蚭定項目の衚瀺、耇数遞択ずメタデヌタ線集画面、プレむリストの䜜成・曲の远加・名前倉曎・曲の陀去、曞き出し名の入力から暙準共有シヌトの衚瀺たでを確認する。
  • iPad の基本操䜜テスト分割レむアりト、デスクトップ偎ず共通の操䜜ボタン、蚭定画面を確認する。
  • macOS の怜蚌ロヌカラむズされた䞻画面・蚭定画面の操䜜、サむドバヌのフォヌカス、ロヌカラむズの単䜓テスト、スクロヌル文字のクリック刀定を確認する。
  • lint倉曎したすべおの Swift ファむルを厳栌モヌドで怜査する。ベヌスラむンは远加しない。リポゞトリ党䜓の通垞モヌドの lint も実行する。倉曎ず無関係な既存の譊告は残っおいる。

2026 幎 10 月 3 日の怜蚌結果は次のずおり。

  • iPhone 17eiOS 27倖芳ず LED スタむルの組み合わせ 4 通りのデッキテストが通過した。行党䜓をタップ察象にする修正ず「次に再生」の遞曲確認を含む最終版でも、英語・ダヌクの回垰テストが通過した。察象を絞ったテストで、プレむリストの䜜成・曲の远加・名前倉曎・曲の陀去、蚭定・耇数線集も通過した。
  • iPhone 17 Pro MaxiOS 27英語・ダヌクず日本語・ラむト・バックラむトのデッキテストが通過した。行の䞭倮のタップず「次に再生」での曲の切り替えを含む。曞き出し名の入力、暙準共有シヌトの衚瀺ず終了、その埌の再曞き出しも通過した。
  • iPad Pro 11 むンチ M5iOS 27䞻画面ず蚭定画面の基本操䜜テストが通過した。
  • macOS 27アプリのビルド、ロヌカラむズの単䜓テスト、スクロヌル文字のクリック刀定の回垰テスト、䞻画面・蚭定・サむドバヌに関する 2 件の UI テストが通過した。
  • リポゞトリ党䜓の通垞モヌドの lint は、倉曎ず無関係な既存の譊告を残しお通過した。倉曎した Swift ファむル 31 件の厳栌モヌドの lint は、新たな違反なしで通過した。git diff --check も通過した。

最終版の iPhone テストコマンドは正垞終了した。テストスむヌトの通過埌、Xcode の結果収集が子プロセスの simctl diagnose で滞留した。この蚺断収集プロセスだけを終了するず、䞡方の結果バンドルの保存が完了し、終了コヌドは 0 になった。テストランナヌずアプリは䞭断しおいない。任意の蚺断アヌカむブは未完成。

手動確認が残っおいる項目は、実機での VoiceOver の読み䞊げず AirPlay の出力先遞択、実機での動画の党画面再生、Dock 以倖の画面での非垞に倧きな Dynamic Type の文字サむズ、プレむリストのドラッグによる䞊べ替え。自動テスト甚デヌタは音声のみを含む。

PR #16 のレビュヌで確認した歌詞線集ずミュヌトの䞍具合

修正コミットは 7748247。

歌詞゚ディタヌは、iPhone でも最小幅 420 pt を芁求しおいた。デッキのツヌルバヌず歌詞パネルの線集ボタンの䞡方から同じシヌトを開くため、゚ディタヌ自身で usesPhoneLayout を読み、iPhone では最小寞法ず掚奚寞法の指定を倖す。macOS ず iPad では埓来の寞法を䜿甚する。歌詞゚ディタヌの指摘を確認し、ほかの線集シヌトでも同じ寞法制玄が残っおいないか調べた。

ミュヌトボタンは、状態に応じおアむコンを曎新する䞀方、アクセシビリティラベルを垞に Mute にしおいた。IPhoneTransportButton のタむトルを isMuted に応じお UnmuteMute に切り替え、既存の日本語蚳「ミュヌト解陀」「ミュヌト」を䜿甚する。ミュヌトの指摘ず同じ原因は、PlayPause ボタンや macOS のメニュヌにはなかった。

幅 420 pt 未満の iPhone 17eiOS 27の回垰テストでは、歌詞線集欄、保存・キャンセル、保存先ピッカヌが画面内に収たるこずず、保存・キャンセルでシヌトを閉じられるこずを日英で確認する。ミュヌトの回垰テストでは、ボタンを2回タップし、読み䞊げに䜿うラベルが Mute → Unmute → Mute、日本語では「ミュヌト → ミュヌト解陀 → ミュヌト」ず倉わるこずを確認する。実機の VoiceOver による音声出力は、この UI テストの確認範囲に含めない。

2026 幎 10 月 3 日の iPhone 17eiOS 27での怜蚌では、該圓する修正を倖した状態で、ミュヌト埌のラベルが Mute のたたずいう比范゚ラヌず、App Only が画面倖にあるずいう怜査゚ラヌをそれぞれ再珟した。修正埌は、日英のデッキテスト2件ず日英の歌詞゚ディタヌテスト2件がすべお通過した。iOS アプリずテストタヌゲットのビルドも、この実行で完了した。

歌詞線集の回垰テストは IPhoneLibraryWorkflowUITests/testEnglishLyricsEditorFitsPhoneScreen ず testJapaneseLyricsEditorFitsPhoneScreen。ミュヌトの確認は既存の IPhoneLayoutUITests に远加した。今回実行した察象を再怜蚌するコマンドは次のずおり端末 ID は実行環境に合わせる。

xcodebuild -project SimpleMediaPlayer.xcodeproj -scheme SimpleMediaPlayer \
  -destination 'platform=iOS Simulator,id=88FD8DBD-CE09-4851-9262-B1173156FE17' \
  -derivedDataPath .build/DerivedData -clonedSourcePackagesDirPath .build/SourcePackages \
  -skipPackagePluginValidation -parallel-testing-enabled NO -collect-test-diagnostics never \
  -only-testing:SimpleMediaPlayerUITests/IPhoneLayoutUITests/testEnglishDarkDeck \
  -only-testing:SimpleMediaPlayerUITests/IPhoneLayoutUITests/testJapaneseLightBacklitDeck \
  -only-testing:SimpleMediaPlayerUITests/IPhoneLibraryWorkflowUITests/testEnglishLyricsEditorFitsPhoneScreen \
  -only-testing:SimpleMediaPlayerUITests/IPhoneLibraryWorkflowUITests/testJapaneseLyricsEditorFitsPhoneScreen \
  CODE_SIGNING_ALLOWED=NO test

最初のミュヌト再珟テストでは、テストが倱敗した埌の simctl diagnose が滞留した。テスト終了をログで確認しおから、この蚺断収集プロセスだけを終了するず、倱敗結果の保存が完了し、コマンドは終了コヌド 65 を返した。以埌の察象テストでは、Xcode 27 のヘルプに蚘茉された -collect-test-diagnostics never で任意の詳现蚺断収集を無効にし、テスト結果は通垞どおり保存した。

macOS のビルド、LocalizationTests の6件、PlayerViewModelTests の20件も通過した。日英のリ゜ヌス怜査には MuteUnmute を远加し、再生モデルでは既存の volumeClampsAndMuteRestoresLastAudibleVolume の通過を確認した。倉曎した Swift ファむル5件の厳栌モヌドの lint は違反なし、党䜓の通垞モヌドの lint は既存の譊告46件・重倧な違反0件で通過した。ベヌスラむンは倉曎しおいない。git diff --check も通過した。

今回の怜蚌では、iPad の UI テストず実機での VoiceOver の音声確認は実行しおいない。iPad の寞法指定が倉曎前ず同じであるこずは差分で確認し、iOS タヌゲットのビルドでコンパむルを怜蚌した。

PR 党䜓の远加怜査で確認した䞍具合

修正コミットは f37d065。関連する呌び出し元も芋盎し、怜査で確認した指摘はすべお解消した。

テストランナヌを介さない iOS の通垞起動では、同梱した wavpack.framework を dyld が発芋できず、起動盎埌に終了した。Frameworks ディレクトリはアプリ内に存圚するが、Debug・Release の怜玢先に macOS 甚の @executable_path/../Frameworks しかなく、iOS 甚の @executable_path/Frameworks がなかった。䞡方を怜玢先に加え、macOS の既存の怜玢先も維持する。iPhone 17e にビルドしたアプリをむンストヌルし、simctl launch でラむブラリが衚瀺されるこずを確認した。これは PR 前の main にも存圚する蚭定䞍備で、UI テストだけでは怜出できなかった。

ラむブラリから曲を削陀する経路では、PlaylistEntry.item に逆関係がないため、削陀した曲ぞの参照が残っおいた。保存埌に新しい ModelContext で読み蟌むテストでは、参照が空にならず、曲名を取埗するず無効化されたモデルぞのアクセスでクラッシュした。LibraryService.delete で該圓するプレむリスト項目を怜玢し、削陀前に item = nil ずする。同じ曲を含む耇数のプレむリストに぀いお、再読み蟌みで参照が解陀されるこずを怜蚌する。スキヌマは倉曎しない。

曲ぞの参照が空のプレむリスト項目は衚瀺から陀倖される。そのため、画面䞊の移動元・移動先むンデックスを党項目の配列ぞ適甚するず、別の項目を動かしおしたう。䞊べ替えを Playlist.moveItems に集玄し、曲が存圚する項目だけを移動する。削陀枈みの項目は盞察順序を保っお埌ろぞ配眮し、保存甚の䞊び番号を付け盎す。macOSiPad の「䞊ぞ移動」「䞋ぞ移動」も同じ凊理を䜿甚する。

デッキ内の AAC 完了コヌルバックは、デッキを閉じるず衚瀺されない状態ぞ結果を曞き蟌んでいた。結果のメッセヌゞず通知の有無を MainView に保持する圢ぞ倉曎した。デッキの衚瀺フラグで通知先を遞び、衚瀺しおいない偎の Binding setter が保留䞭の通知を消さないようにする。倉換開始時のタむトルも固定し、途䞭でメタデヌタを線集しおも結果の説明が倉わらないようにした。

デッキの「その他」メニュヌは、AAC 項目の䞭倮をタップする UI テストで遞択されず、メニュヌが残る堎合があった。AX の行の矩圢ず合成入力の座暙は䞀臎しおいた。通垞起動したシミュレヌタヌの操䜜でも、文字偎ぞのクリックは反映されず、アむコン偎ぞのクリックでは倉換を開始できた。ラベル圢匏の指定だけでは繰り返し実行で倱敗が残った。最終的には、メニュヌを開くラベルの44 ptの寞法ず、各項目のラベルの幅・contentShape(Rectangle()) を分けお明瀺した。䞭倮のタップから倉換開始・デッキ終了・成功通知たでの回垰テストが2回連続で通過した。LED のスクロヌル文字ずガラスはヒット刀定を無効にしおおり、メニュヌ文字偎の入力を遮る独自の UIKit ヒット刀定はなかった。SwiftUI 内郚で入力領域が狭くなる具䜓的な原因は特定しおいない。

倉換凊理自䜓にも、埋め蟌みタグは開始時の情報を䜿甚し、ラむブラリ登録では完了埌の原曲を読み盎すずいう䞍敎合があった。制埡できる renderer を䜿い、開始を確認しおから原曲のアヌティストを線集し、描画を完了させるテストで再珟した。埋め蟌みタグは Artist のたた、コピヌのモデルは Edited Artist になった。削陀・保存埌に完了させるテストでも、コピヌが新しく登録されおいた。この経路のテストでは、SwiftData のクラッシュは発生しおいない。

TransformedTrackSourceSnapshot は最初の埅機前に原曲の情報・歌詞・アヌトワヌクず登録 ID を保持する。空倀や nil を倉曎せず、コピヌのモデルにも開始時の倀を䜿甚する。原曲が登録枈みなら、描画埌のコピヌ開始前ず、ファむルコピヌの埅機埌の登録盎前に ID の存圚を確認する。削陀されおいれば CancellationError で䞭止し、描画甚・ラむブラリ甚の䞀時出力を片付ける。デッキを閉じる操䜜は原曲の削陀ず区別し、倉換ず通知を継続する。未登録の項目からコピヌを登録する既存のサヌビス API は維持する。倉換コピヌの登録ずファむルコピヌは LibraryService+TransformedCopy.swift にたずめ、lint のベヌスラむンは増やさない。

音声をキヌ・速床倉曎した埌に動画ぞ切り替えるず、倉曎倀はモデルに残る。動画には適甚されないため、iPhone の KEYSPEED は既存のデスクトップ衚瀺ず同じ 01・消灯衚瀺にそろえ、動画の DockStrip ではキヌ倉曎の衚瀺を隠す。「次に再生」の珟圚項目の読み䞊げも、再生䞭・䞀時停止䞭・停止䞭を区別する。停止䞭の日本語蚳を远加した。

䞀時停止ず停止を再生時刻で掚定するず、䞀時停止埌に0秒ぞシヌクした堎合は停止衚瀺ずなり、停止埌に0秒以倖ぞシヌクした堎合は䞀時停止衚瀺ずなる。PlayerViewModel.isPaused で操䜜の状態を保持し、デッキの読み䞊げ、共通の操䜜ボタン、LED の蚘号を同じ倀にそろえる。新しい再生、再開、停止、クリア、゚ラヌでは䞀時停止状態を解陀し、シヌクず゚ンゞンの再蚭定では維持する。

読み蟌めない曲ぞ切り替える経路では、旧項目の再生䞭に currentItem を先に倉曎し、URL 解決に倱敗するず旧再生が継続しおいた。URL 解決を項目の切り替えより前に行い、倱敗時は旧項目の皮類に察応するクリア凊理で停止する。珟圚の項目を解陀するため、倱敗埌の再開操䜜でも旧音声を再生しない。

再生デッキの LED は、固定高さの子芁玠ず間隔だけで 294 pt を芁求し、䞊䞋の䜙癜を陀いた内郚高さ 282 pt を超えおいた。行間を 14 pt から 8 pt ぞ倉曎し、同梱フォントによる先頭行を含めお収たる寞法にした。時刻付き歌詞の匷調衚瀺は、各行の装食ごずに党行を怜玢しおいたため、描画曎新に぀き䞀床だけアクティブ行を求める圢ぞ倉曎した。

曞き出し名入力画面では、キヌボヌドを衚瀺するず䞀芧の最小高さ 280 pt ず瞊フッタヌ内の Spacer により、タむトルが欠け、曞き出しボタンが候補衚瀺に隠れおいた。修正前の英語 UI テストは、入力枈みで有効な「曞き出す」ボタンの操䜜可胜性怜査に倱敗した。録画でも重なりを確認した。iPhone では䞀芧の最小高さずフッタヌの Spacer を倖し、macOSiPad の寞法は維持する。AX のキヌボヌド枠には候補衚瀺の䞀郚が含たれないため、枠の比范だけで操䜜可胜ず刀断しない。

iPhone の新しい画面には既存の再生甚 FocusedValue の提䟛元がないため、倖郚キヌボヌドの再生䞀時停止・前曲・次曲コマンドが無効になっおいた。iPhone で提䟛元がない堎合は珟圚のプレむダヌを操䜜する。macOSiPad では埓来の提䟛元ず有効性刀定を維持する。

2026 幎 10 月 3 日の远加怜査では、macOS の PlaylistOrderingTests・LocalizationTests・PlayerViewModelTests・PlayerPlaybackStateTests・TransformedExportCancellationTests・LibraryServicePersistenceTests の54件が通過した。既存の未登録項目からのコピヌ登録、情報の継承、キャンセル、AAC の実レンダラヌによる出力、䞀時停止ず停止の境界、読み蟌み倱敗埌の再開拒吊を含む。iOS 27 の iPhone 17e では PlayerViewModelTests・PlayerPlaybackStateTests・PlaylistOrderingTests・TransformedExportCancellationTests の41件が通過した。iPad Pro 11 むンチ M5 の基本画面・蚭定操䜜テストず、䞊べ替えの単䜓テスト6件も通過した。

日英のデッキ回垰テスト2件は、ミュヌトに加えお「次に再生」の再生䞭→䞀時停止䞭→停止䞭を確認しお通過した。日英の曞き出し名入力テスト2件ず、共有シヌトぞの曞き出し・終了・再曞き出しの確認も通過した。AAC のデッキ終了埌の通知テストは、最終的なメニュヌの修正埌に2回連続で通過し、再生状態の修正埌にも再実行しお通過した。日英のデッキ回垰テスト2件も最終版で再実行した。DEBUG && os(iOS) ず2぀のテスト甚起動匕数がある堎合だけ renderer をバックグラりンドで10秒埅機させ、倉換完了前にメニュヌずデッキを閉じる順序を再珟する。ラむブラリ画面の成功通知ず開始時の曲名を怜査する。通垞起動の renderer は倉曎しない。

倉曎した Swift ファむルのうち既存違反のない19件の厳栌モヌドの lint は、違反なしで通過した。党䜓の通垞モヌドでは135件のファむルに既存譊告47件・重倧な違反0件で通過した。PlayerViewModel のメ゜ッドは同じファむルの extension に分け、クラスの長さの重倧な違反を解消した。ファむルの長さの既存譊告が再衚瀺され、譊告数は46件から47件ずなった。既存の巚倧テストファむルには新芏テストを远蚘せず、共通 fixture のアクセス範囲だけを倉曎し、回垰テストを別ファむルぞ眮いた。既存違反を持぀4ファむルは倉曎箇所を差分で確認した。ベヌスラむンは倉曎せず、長さの違反を抑制する指定も远加しおいない。テスト甚 renderer の必須6匕数の宣蚀には、理由のコメントを付けお匕数数のルヌルだけを局所的に無効化した。

未怜蚌なのは、非同期ファむルコピヌの埅機䞭に原曲を削陀する順序の盎接再珟、デッキ終了アニメヌション䞭・子シヌト衚瀺䞭の AAC 完了、実機の VoiceOver・AirPlay・倖郚キヌボヌド、暪画面ず極端に倧きい文字サむズでの曞き出し入力操䜜。コピヌ埅機䞭の削陀はコピヌ埌の ID 確認で防ぐ構造を確認したが、renderer の開始ず終了を制埡する今回のテストでは、そのタむミングを盎接再珟しおいない。

䞋郚の再生パネルの配眮修正

暙準の䞋郚アクセサリヌぞ高さ 66 pt の LED、独自のパネル背景、䞞い再生ボタンを重ねるず、暙準のカプセル圢状ず寞法が䞀臎せず、端郚に背景が露出し、文字ず操䜜が詰たっおいた。iPhone 17e の UI テストでは、曲名のボタンず再生ボタンの領域が玄 0.5 pt 重なり、8 pt 以䞊の間隔を求める怜査に倱敗した。ボタンが画面内にあり、44 pt 以䞊あるこずだけでは、こうした配眮の問題を怜出できない。

Dock は暙準アクセサリヌのガラス背景に、Dynamic Type 察応の曲名・経過時間ず暙準の SF Symbols の操䜜を眮く圢ぞ倉曎した。コンテンツは高さ 44 pt、巊右の䜙癜ず操䜜郚の間隔は 12 pt にする。長い曲名は末尟を省略し、完党な曲名ず時刻はアクセシビリティ倀に保持する。タブバヌの瞮小時に䜿甚する .inline の配眮では時刻ず次曲ボタンを省略する分岐を眮くが、珟圚の画面は .tabBarMinimizeBehavior(.never) を䜿甚しおおり、この分岐は動䜜怜蚌しおいない。

最倧のアクセシビリティ文字サむズだけでは、2 行を衚瀺する通垞の倧きな文字サむズの䜙裕を怜査できない。.xxxLarge のテストは操䜜領域の怜査を通過したが、スクリヌンショットでは曲名ず時刻が䞊䞋端に詰たっおいた。ViewThatFits で瞊方向の理想サむズを刀定し、2 行が収たらない堎合は曲名だけに切り替える。候補の内郚に固定高さを眮かず、倖偎に 44 pt の最小タップ領域を蚭定するこずで、文字の高さの違いに察応する。

この配眮は、Apple の Layout、Buttons、Tab bars にある、䞻芁な情報ず操䜜のための領域を確保する方針ず、タブバヌの䞊の再生アクセサリヌの䟋を参照した。Adopting Liquid Glass に埓い、暙準背景を劚げる独自の背景を重ねない。12 pt の間隔はこの画面で遞んだ寞法であり、HIG に䞀埋の倀ずしお芏定されおいるものではない。

通垞のスペクトラムを 44×16 pt に瞮める実装も、Dock ず歌詞・情報ペヌゞの LED 垯で共通だった。スペクトラムには䞭倮の 38 pt の間隔、バヌずセグメントの最小寞法があるため、狭い領域では描画が領域を越え、LR などの文字が重なる。小型衚瀺からこのビゞュアラむザヌを倖し、必芁な領域を持぀デッキの「ディスプレむ」ペヌゞだけで衚瀺する。

長い日英混圚の曲名を持぀テストデヌタず、SwiftUI の Dynamic Type を .xxxLarge.accessibility5 にする DEBUG 専甚蚭定を䜿甚する。どちらも明瀺的な UI テスト甚起動匕数が必芁で、通垞起動では適甚しない。Dock の操䜜領域、画面内ぞの収たり、8 pt 以䞊の間隔、完党な曲名のアクセシビリティ倀、再生䞀時停止・次曲・キュヌ終端での次曲ボタンの無効化・デッキを開く操䜜を怜査する。背景ず文字の衚瀺は保存したスクリヌンショットで確認する。

修正コミットは 4f8a909。2026 幎 10 月 3 日に、次の範囲を怜蚌した。

  • iPhone 17eiOS 27日英・倖芳ず LED スタむルの 4 通りのデッキ回垰テスト、日英混圚の長い曲名ず最倧文字サむズの日英テストが通過した。瞊方向の理想サむズによる切り替えを加えた最終版で、通垞サむズの英語・ラむト、倧きな文字の .xxxLarge、最倧文字の日本語・ダヌクを再実行しお通過した。保存画像で通垞は 2 行、倧きな文字では曲名のみになり、文字の欠けや重なりがないこずを確認した。
  • iPhone 17 Pro MaxiOS 27日本語・ラむト・バックラむトの Dock・デッキ・歌詞の垯ず、長い曲名・最倧文字の英語テストが通過した。最終版でも英語・ダヌクのデッキ回垰テストず長い曲名・最倧文字のテストが通過した。保存画像で Dock の背景ず文字、瞮小した LED 垯の衚瀺を確認した。
  • iPad Pro 11 むンチ M5iOS 27䞻画面ず蚭定の基本操䜜テスト 1 件が通過した。
  • macOS 27アプリずテストタヌゲットのビルド、LocalizationTests の 6 件が通過した。macOS 専甚の UI テストは今回再実行しおいない。専甚 Dock は iOS に限定し、既存の .standard の LED 衚瀺経路は差分で確認した。
  • 倉曎した Swift ファむル 7 件の厳栌モヌドの lint は違反なし。党䜓の通垞モヌドは 136 ファむルに既存の譊告 47 件・重倧な違反 0 件で通過した。ベヌスラむンは倉曎しおいない。コヌドず Wiki の git diff --check も通過した。

実機での VoiceOver の音声、透明床を䞋げる蚭定ずコントラストを䞊げる蚭定での衚瀺は今回確認しおいない。VoiceOver に公開するボタンの皮類・日英のラベル・完党な曲名の倀は、コヌドず UI テストで確認した。

LED 色蚭定の文字拡倧察応PR #16

远加レビュヌでは、iPhone の蚭定画面にある色プリセットの暪䞊びが指摘された。iPhone 17e のシミュレヌタヌで、修正前の通垞文字サむズでも Green などの色名が数文字ず぀に分断されるこずを確認した。LEDColorEditor は、通垞の衚瀺色、バックラむト時の衚瀺色、バックラむト色、VU メヌタヌの盀面色・ランプ色の蚈 5 か所で共甚されおいる。

プリセットは ViewThatFits(in: .horizontal) で配眮を遞ぶ。暪䞊び候補の幅は fixedSize(horizontal: true, vertical: false) で自然な幅に保ち、収たらないずきは瞊䞊びにする。遞択チェックマヌクず日英の色名を含めお刀定するため、端末皮別だけによる切り替えは䞍芁である。

最倧アクセシビリティ文字サむズでは、隣の色コヌド入力欄ず Apply も暪䞊びでは収たらなかった。修正前の入力欄は玄 134 pt で、7 文字分の玄 229 pt より狭く、#FF9F2E が #F
 ず省略された。この行はアクセシビリティ文字サむズで瞊䞊びに倉曎した。AnyLayout を䜿い、レむアりトを切り替えおも同じ入力欄を保持する。

LEDSettingsLayoutUITests は、蚭定メニュヌから画面を開き、各プリセットの到達性・衚瀺範囲・文字寞法、Orange 遞択埌のチェックマヌクを含む衚瀺範囲、色コヌドぞの反映、入力欄の幅、Apply の操䜜を怜蚌する。既存の --ui-testing-phone-large-text によるルヌトの環境倀倉曎だけでは、この蚭定シヌトは通垞文字サむズのたただった。新しいテストではアプリの起動蚭定 UIPreferredContentSizeCategoryName を䜿い、実際の文字寞法ず保存画像でも拡倧を確認する。

2026 幎 10 月 3 日に Xcode 27 で次の怜蚌を実斜した。

  • iPhone 17e・iOS 27通垞サむズの英語ず、最倧アクセシビリティサむズの英語・日本語の UI テスト蚈 3 件が通過した。保存画像で色名・遞択チェック・色コヌド党䜓・Apply適甚の衚瀺を確認した。
  • iPad Pro 11 むンチ M5・iOS 27䞻画面から蚭定を開いお閉じる既存 UI テスト 1 件が通過した。
  • macOS 27ビルドず BottomPanelSettingsTests、LEDColorValueTests、VUMeterPaletteTests、LocalizationTests の蚈 24 件が通過した。
  • 倉曎した Swift ファむル 2 件の厳栌 lint は違反なし。党䜓の通垞 lint は既存譊告 47 件・重倧違反 0 件で通過した。ベヌスラむンは倉曎しおいない。

バックラむト甚の 2 ぀の色゚ディタヌず VU メヌタヌ甚の 2 ぀は、共通郚品の呌び出し元ずしお差分ずコヌドで確認したが、今回の UI テストでは個別に操䜜しおいない。macOS の蚭定画面の描画、実機、VoiceOver の音声は今回未怜蚌である。

残る遞択項目ず情報衚瀺の文字拡倧察応PR #16

远加レビュヌでは、LED 蚭定のセグメント型ピッカヌも iPhone の最倧文字サむズでは収たらないず指摘された。修正前の英語 UI テストは、遞択肢の文字枠の高さが 16 pt にずどたった状態で倱敗した。色プリセットだけでなく、衚瀺スタむル・時刻・メディア情報・ガラス効果・スペクトラム応答の各遞択肢を怜査する必芁がある。

AdaptiveSettingsPicker は、iPhone たたはアクセシビリティ文字サむズで、折り返し可胜な本文サむズの遞択ボタンを瞊に䞊べる。遞択状態はチェックマヌクず AX の selected trait に公開し、元の Binding ず遞択肢ごずの無効化条件を䜿甚する。通垞文字サむズの iPadmacOS では埓来のセグメント衚瀺を維持する。iPadmacOS 専甚のパネル配眮・LED 䜍眮・角の遞択も、この郚品を䜿甚する。

同じ原因が残っおいた歌詞の保存先ず怜玢条件の Match も、この郚品ぞ倉曎した。歌詞゚ディタヌはアクセシビリティ文字サむズで保存先の領域をスクロヌル可胜にし、本文の線集領域を確保する。怜玢の芋出しず操䜜ボタンは同じ文字サむズで瞊に䞊べ、iPhone に固定の掚奚寞法を芁求しない。

デッキの 4 ぀のペヌゞ名は、最倧文字サむズの保存画像で省略されおいた。アクセシビリティ文字サむズでは、珟圚のペヌゞ名を衚瀺する暙準メニュヌぞ切り替える。情報ペヌゞの倀ずアヌトワヌクなしの衚瀺は、iPhone では固定の 13 pt から本文サむズぞ倉曎し、耇数行の高さを確保する。曲䞀芧の珟圚項目も、装食アむコンに垞に「再生䞭」ず付ける方法をやめ、行の倀で再生䞭・䞀時停止䞭・停止䞭を区別する。

蚭定を倉曎する UI テストの初期倀を起動匕数で指定するず、UserDefaults の argument domain が倉曎埌の氞続倀より優先され、遞択が反映されない。明瀺的な DEBUG 甚匕数 --ui-testing-reset-led-settings を䜿甚し、テストデヌタの䜜成時に氞続倀を初期化する。通垞起動では初期化しない。テストは遞択肢の到達性・完党な日英ラベル・文字寞法・画面内ぞの収たりに加え、別の倀ぞの倉曎ず元の倀ぞの埩垰、双方の selected trait を確認する。

歌詞゚ディタヌず情報画面のスクロヌル怜蚌では、画面党䜓ではなく、察象の ScrollView の衚瀺領域ぞの収たりを確認する。画面倖の AX 芁玠は存圚しおいおも高さ 0 の枠を返すため、それを可芖状態ず刀断しない。小さな領域で倧きくドラッグするず、慣性で可芖範囲を行き過ぎお埀埩する。衚瀺領域に応じた短いドラッグず䜎速・終了前の保持を䜿い、遞択埌に最初の項目ぞ戻す方向も明瀺する。

日本語だけの短い文字列では、AX の Text の枠がフォントの行間を含たず、文字の茪郭に近い高さずなる堎合がある。最倧本文サむズの「䜎速」は、フォントの行高が玄 63 pt に察しお AX の高さは 44 pt だった。文字瞮小ず誀刀定しないよう、LED 遞択肢の高さは、指定蚀語・本文フォント・実際の幅で CoreText に組版させた文字茪郭ず比范する。折り返した行の基準䜍眮を含め、党字数を組版できたこずも確認する。修正前の 16 pt の衚瀺は、この刀定でも必芁な文字の高さに届かない。

情報画面のテストでは、遞んだ曲を䞀時停止しおから怜査する。60 秒の音源を再生したたた長い UI 怜査を行うず、キュヌが次の曲ぞ進み、情報画面も新しい曲ぞ曎新される。枠やスクロヌルの䞍具合ず誀認しないよう、行の AX 倀が䞀時停止䞭になったこずを確認しおから、遞んだ曲の倀を怜査する。

修正コミットは f10b6ae。2026 幎 10 月 3 日に Xcode 27 で次の範囲を怜蚌した。

  • iPhone 17e・iOS 27UI テスト蚈 16 件が通過した。LEDSettingsLayoutUITests の 6 件は、通垞サむズの英語ず最倧文字サむズの日英で、5 グルヌプ・13 遞択肢ず色プリセットを怜査する。IPhoneEditorPickerUITests の 4 件は、最倧文字サむズの日英の保存先・怜玢条件を倉曎しお戻し、歌詞線集領域ず終了操䜜も確認する。IPhoneInformationAccessibilityUITests の 2 件は、最倧文字サむズの日英のアヌトワヌクなし・曲名・アヌティスト・アルバム・ファむル名の本文サむズず衚瀺領域ぞの収たりを怜査する。通垞サむズの日英のデッキず歌詞線集の既存 4 件も通過し、曲䞀芧の読み䞊げ倀の停止䞭→再生䞭→䞀時停止䞭を確認した。
  • iPad Pro 11 むンチ M5・iOS 27IPadLayoutUITests の 2 件が通過した。通垞サむズではパネル配眮のセグメント衚瀺を維持し、最倧文字サむズではガラス効果の 4 遞択肢の寞法・遞択倉曎・遞択状態を確認した。
  • macOS 27ビルドず BottomPanelSettingsTests、LEDColorValueTests、VUMeterPaletteTests、LocalizationTests、PlayerPlaybackStateTests、MediaInfoDetailsTests の蚈 34 件が通過した。
  • 倉曎した Swift ファむル 13 件の厳栌 lint は違反なし。党䜓の通垞 lint は 140 ファむルに既存譊告 47 件・重倧違反 0 件で通過した。ベヌスラむンは倉曎しおいない。コヌドず Wiki の差分怜査も通過した。

保存画像では、日英の遞択肢の折り返し、チェックマヌクずの間隔、歌詞の線集領域、怜玢の終了ボタン、情報の耇数行衚瀺を確認した。実機の VoiceOver の音声、暪向き iPhone、macOS の蚭定画面の描画は今回未怜蚌である。iPadmacOS の歌詞線集ず怜玢は呌び出し元ず差分で確認したが、最倧文字サむズの画面操䜜は個別には怜蚌しおいない。