MacSlowCooker Dock アイコンのアニメーション

MacSlowCooker OSS

Mac の GPU 使用率・SoC 温度・ファン・電力を Dock の鍋アイコンで可視化

🐙
ソースコード
GitHub

MacSlowCooker は Mac の GPU 使用率・SoC 温度・ファン RPM・電力を、Dock の鍋アイコンとフローティングウィンドウで可視化する macOS アプリ。GPU が忙しいと鍋の下の炎が伸び、温度が上がると鍋が赤くなり、ファンが回ると湯気が立ち、高負荷が続くと沸騰演出に切り替わる。

Apache License 2.0 で公開。Apple Silicon / Intel 両対応の Universal Binary(macOS 14 以降)。


機能

アニメーションする Dock アイコン

3D ドラム形の鍋(円柱風シェーディング、ドーム蓋、ハンドル付き)。鍋の色は SoC 温度に連動(白 → 95°C で赤橙)。下の炎は GPU 使用率で伸び、湯気はファン RPM(ファンレス機種は温度)に連動して本数・太さが変化。

フローティングダッシュボード

Activity Monitor の「GPU の履歴」風ウィンドウ。GPU / Temperature / Fan / Power の 4 チャート + メトリクスタイル。Float-above-other-windows のオン/オフ可。数値は危険度に応じて白 → 黄 → 赤に変化。

Apple Silicon と Intel

Universal Binary。サンプラー選択は実行時にホスト CPU を検出するので、Universal Binary の x86_64 スライスが Rosetta 上で動いていてもちゃんと正しいデータを取れる。ファンレス機種(MacBook Air M シリーズ等)では Fan UI が自動非表示になり、湯気は温度ベースにフォールバック。

低電力モード対応

Low Power Mode が ON のときアニメーションを 5 fps に落とし、炎の wiggle を無効化。Preferences のステータス行に override 中であることを表示。


App Store で配布しない理由

MacSlowCooker は SMAppService.daemon で root の LaunchDaemon を登録し、/usr/bin/powermetrics を spawn し、AppleSMCIOHIDEventSystem を直叩きする。**3 つとも App Store Sandbox では使えない**:

  • App Store では SMAppService.loginItem(ユーザー権限)しか許可されない。SMAppService.daemon(root)は不可
  • Sandbox は powermetrics(これ自体 root 必須)の spawn を禁止
  • IOHIDEventSystem*AppleSMC ユーザクライアントは私的 API

iStat Menus / Stats / TG Pro が App Store にいないのと同じ理由。App Store 配布のために大幅に機能を削るより OSS のほうが現実解だと判断した。


インストール

署名済 DMG リリースは現状なし。ソースからビルドする:

git clone https://github.com/hakaru/MacSlowCooker.git
cd MacSlowCooker

# Apple Developer Team ID をセット(権限 helper が検証する)
bin/set-team-id.sh ABC1234XYZ

# Xcode プロジェクト生成 + ビルド
brew install xcodegen
xcodegen generate
xcodebuild -project MacSlowCooker.xcodeproj -scheme MacSlowCooker \
  -configuration Release -derivedDataPath build build \
  CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=ABC1234XYZ \
  ONLY_ACTIVE_ARCH=NO

詳細なビルド・デプロイ手順は CONTRIBUTING.md


FAQ

なぜ root 権限が要るの?

powermetrics は GPU 電力・thermal_pressure を取るのに root が必要。本体アプリは非特権のまま、root の LaunchDaemon を別バンドルとして登録して XPC で叩く設計。helper は接続元アプリの code-signing requirement (Team OU) を毎回検証する。

動作が重くならない?

idle CPU はほぼゼロ。アニメーター用タイマーは動きが必要なときだけ走り、Dock アイコン更新は visualHash で重複描画を抑制。helper の powermetrics プロセスは Activity Monitor が内部で使っているのと同じもの。

Intel Mac / MacBook Air は?

両対応。Intel の powermetrics は gpu_busy / busy_ns という別スキーマを出すが parser が両系統を扱う。ファンレス機種では Fan チャートを自動非表示にして、湯気は温度ベースにフォールバック。

コントリビュートしたい

Issue / PR 歓迎。CONTRIBUTING.md 参照。


連絡先

質問・バグ報告:
GitHub Issues(推奨)または hirose@hakaru.net


リンク