みずぴー日記

人間の再起動ボタンはハワイのビーチにある

🌓ダークモード

メニューバーからダークモード切り替えをするアプリケーションを作った。

f:id:mzp:20180729124035p:plain

ダウンロード: https://github.com/mzp/DarkMenuBar/releases

🖼デモ

🌑ダークモードの登場

macOS HighSierraからメニューバーおよびドックを黒にするダークモードが利用できる。さらにMojaveではウインドウ等も黒にできるようになった。

f:id:mzp:20180729124441p:plain (WWDC 2018 Keynoteより引用)

これらの変更はシステム環境設定から変更できる。

f:id:mzp:20180729124739p:plain

しかし、「周囲が暗いのでダークモードに切り替えたい」「気分転換にモードを変えたい」といったときに、都度システム環境設定を開くのは面倒である。 もっと気軽にメニューバーから切り替えたい。

🌟メニューバーからの切り替え

そこでメニューバーからダークモードのオン・オフをするアプリケーションを作った。https://github.com/mzp/DarkMenuBar/releasesからダウンロードできる。

f:id:mzp:20180729124035p:plain

f:id:mzp:20180729123947p:plain

🛠仕組み

ダークモードへの切り替え

切り替えはSkyLightというprivate frameworkを使うとできる。 こんな感じ。

@objc func enterDarkMode(sender: Any!) {
  NSLog("%@", "enter dark mode")
  SLSSetAppearanceThemeLegacy(1)
}

@objc func leaveDarkMode(sender: Any!) {
  NSLog("%@", "leave dark mode")
  SLSSetAppearanceThemeLegacy(0)
}

メソッド名にLegacyが含まれてるのが不吉だけど、とりあえず無視する。 /System/Library/PreferencePanes/Appearance.prefPane をディスアセンブルしてもこれ使ってたので、まちがってはいないと思う。

メニューバーへの組込み

WeatherBar by bgreenleeにある方法でメニューバーに組み込む。

アイコンはSketchで適当に書いた。

f:id:mzp:20180729125623p:plain

ログイン時に起動

ログイン時に起動はHow to launch a macOS app at login? - The.Swift.Devで実現した。

/Applications に配置しないと動作しないのでデバッグが面倒だった。