O MacSlowCooker visualiza o uso da GPU do Mac, a temperatura do SoC, o RPM do ventilador e a energia como um ícone animado de panela de cozinha no Dock. A cor da panela acompanha o calor (branco → vermelho), a chama abaixo cresce com a carga da GPU, e o vapor sobe conforme o RPM do ventilador. Carga sustentada aciona uma animação de fervura.
Código aberto sob Apache License 2.0. Universal Binary para Macs com Apple Silicon e Intel (macOS 14+).
Recursos
Ícone animado no Dock
Panela em formato de tambor 3D renderizada com sombreamento cilíndrico, tampa em cúpula e alças robustas em laço. A cor da panela mistura de branco (frio) a vermelho-alaranjado (95 °C). A chama embaixo aumenta com o uso da GPU; o vapor em sopros suaves sobe e desaparece com o RPM do ventilador (ou com a temperatura em Macs sem ventilador).
Painel flutuante
Janela no estilo "histórico de GPU" do Activity Monitor com gráficos e blocos de métricas para GPU, Temperatura, Ventilador e Energia. Opção de flutuar acima de outras janelas. Os números mudam de branco → amarelo → vermelho conforme o risco.
Apple Silicon e Intel
Universal Binary. A escolha do amostrador é determinada pela CPU do host em tempo de execução, então a fatia x86_64 de um Universal Binary executando sob Rosetta ainda obtém os dados corretos. Macs sem ventilador (MacBook Air série M) ocultam automaticamente a interface do ventilador e fazem o vapor recuar para uma rampa de temperatura.
Respeita o Modo de Baixo Consumo
A animação cai para 5 fps e a oscilação da chama é desativada quando o Modo de Baixo Consumo está ativo, com uma linha de status nas Preferências explicando a substituição.
Por que não na App Store?
O MacSlowCooker instala um auxiliar LaunchDaemon como root (via SMAppService.daemon), inicia /usr/bin/powermetrics e lê AppleSMC + IOHIDEventSystem diretamente. Os três são incompatíveis com as regras do Sandbox da App Store:
- Apps da App Store podem usar apenas
SMAppService.loginItem(nível de usuário), nãoSMAppService.daemon(root). - O Sandbox proíbe iniciar
powermetrics(que por si só requer root). IOHIDEventSystem*e o cliente de usuárioAppleSMCsão APIs privadas.
Esse é o mesmo motivo pelo qual iStat Menus, Stats e TG Pro são distribuídos fora da App Store. A distribuição pela App Store significaria cortar a maior parte do que torna o ícone significativo, então o MacSlowCooker permanece como código aberto.
Instalação
No momento não há um lançamento DMG assinado. Compile a partir do código-fonte:
git clone https://github.com/hakaru/MacSlowCooker.git
cd MacSlowCooker
# Set your Apple Developer Team ID (the privileged helper validates it)
bin/set-team-id.sh ABC1234XYZ
# Generate the Xcode project and build
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
Veja CONTRIBUTING.md para o ciclo completo de build / deploy / assinatura.
Perguntas frequentes
Por que precisa de root?
O powermetrics requer root para amostrar a energia da GPU e o estado térmico. Para manter o app principal sem privilégios, o MacSlowCooker delega a amostragem a um pequeno auxiliar LaunchDaemon root e se comunica com ele via XPC. O auxiliar rejeita qualquer chamador cujo requisito de assinatura de código (Team OU) não corresponda.
Deixa meu Mac mais lento?
O uso de CPU em ocioso é praticamente zero — o timer do animador para automaticamente quando o ícone não precisa mudar, e a atualização do ícone do Dock é deduplicada via um hash quantizado. O processo powermetrics do auxiliar é o mesmo que o Activity Monitor usa internamente.
E quanto ao meu Mac Intel / MacBook Air?
Ambos suportados. Macs Intel usam um esquema diferente de powermetrics (gpu_busy / busy_ns); o parser lida com os dois. Macs sem ventilador (MacBook Air série M) ocultam automaticamente o gráfico do ventilador e o vapor recua para uma rampa de temperatura.
Posso contribuir?
Sim — issues e pull requests são bem-vindos. Veja CONTRIBUTING.md.
Contato
Dúvidas ou relatórios de bugs:
GitHub Issues (preferencial) ou hirose@hakaru.net