Skip to content

feat: 外観のライト/ダーク/システム準拠を設定から選択可能に#75

Merged
sasagar merged 1 commit into
devfrom
feature/appearance-mode-setting
Jul 7, 2026
Merged

feat: 外観のライト/ダーク/システム準拠を設定から選択可能に#75
sasagar merged 1 commit into
devfrom
feature/appearance-mode-setting

Conversation

@sasagar

@sasagar sasagar commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

概要

設定(⌘,)> 一般 の先頭に「外観」ピッカー(システムに合わせる / ライト / ダーク)を追加。

実装

  • 新規 AppearanceController.swift: AppAppearanceMode(system/light/dark) + @MainActor シングルトン。apply()NSApp.appearance を上書き(system は nil)。既存 AppIconController のパターンに準拠
  • 変更は即時反映(再起動不要)、UserDefaultsappAppearanceMode)に永続化し起動時に適用
  • 外観変更後に AppIconController.shared.apply() を呼び、Dock アイコンの「自動」判定(effectiveAppearance 基準)を追従させる
  • LaboTheme の動的色(NSColor(name:dynamicProvider:))は appearance 上書きに自動追従するため追加対応なし

検証(実機・AX 自動操作、システム外観=ライトの環境)

  • ✅ ビルド: xcodegen generate + xcodebuild → BUILD SUCCEEDED(Swift 6 strict concurrency、警告なし)
  • ✅ 設定 > 一般 先頭に「外観」ラジオグループ(3 択、既定=システムに合わせる)
  • ✅ ライト/ダーク切替が即時反映(システム=ライトのままウインドウ全体がダーク化することをスクショで確認)
  • ✅ 永続化+起動時適用: ダーク設定→再起動で、システム=ライトにもかかわらず起動直後からダークで立ち上がることを確認
  • ✅ 「システムに合わせる」でシステム外観(ライト)に復帰
  • 検証後は設定を system に戻し、元のアプリを復元済み

NSApp.appearance の上書き(nil = システム準拠)で実現。設定(⌘,)の
一般タブ先頭に「外観」ピッカーを追加し、変更は即時反映・UserDefaults に永続化。
外観確定後に Dock アイコンの自動追従(AppIconController)を再適用する。
@sasagar sasagar marked this pull request as ready for review July 7, 2026 02:24
@sasagar sasagar merged commit 1cd9110 into dev Jul 7, 2026
2 checks passed
@sasagar sasagar deleted the feature/appearance-mode-setting branch July 7, 2026 02:24
sasagar added a commit that referenced this pull request Jul 7, 2026
NSApp.appearance の上書き(nil = システム準拠)で実現。設定(⌘,)の
一般タブ先頭に「外観」ピッカーを追加し、変更は即時反映・UserDefaults に永続化。
外観確定後に Dock アイコンの自動追従(AppIconController)を再適用する。
@sasagar sasagar mentioned this pull request Jul 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant