Control fan speed with ease on any Apple Silicon Mac
Warning
When switching from system fan mode to manual, the app tries to set fan speed every second for up to 15 seconds, since manual mode can only be applied after auto mode is set, which may take a moment
- macOS 14+
FanControl Remote
- iOS 17+
- visionOS 1+
The FanControl Remote iOS target uses the private CloudKit database shared with the macOS app, so it works across the internet and only for devices signed in to the same iCloud account
- Create
iCloud.dev.topscrech.FanControlin the Apple Developer portal - Associate the container with
dev.topscrech.FanControlanddev.topscrech.FanControl.remote - Run both apps with the development environment once, then deploy the CloudKit schema to production before distribution
- Enable Allow control from iPhone in the macOS app settings and keep FanControl running on the Mac
Control all fans:
min Set all fans to minimum
max Set all fans to maximum
-a, auto Set all fans to auto
[speed] Set all fans to [speed, example: 4000, 4k, 1.6k]
Control a specific fan:
-l, list List all fans
-id [fan id] min Set one fan to minimum
-id [fan id] max Set one fan to maximum
-id [fan id] -a, auto Set one fan to auto
-id [fan id] [speed] Set one fan to [speed]
Timers:
timer [speed] [duration] Run a timer for all fans, then return to auto
-id [fan id] timer [speed] [duration]
Run a timer for one fan, then return to auto
Duration: 30m, 1h, 1h30m, or 60s (maximum 23h59m)
Other:
-h, --help Show this help
-r, --report Print support report
-v, --version Print app version
-d, --device Print device modelFor example, fan timer 4k 30m runs all fans at 4000 RPM for 30 minutes, clamped to each fan's supported range
Timers run in the foreground, independently of the app's timer UI, and return the selected fans to Auto on completion, Ctrl-C, termination, or terminal closure
- Option + left/right arrows - change selected fan
- Command + 1 - Min mode
- Command + 2 - Max mode
- Command + 3 - Auto mode
- Command + 4 - Open preset mode sheet
Requires Xcode 26.4+ and access to the private CoreSMC library
Run CLI parser and timer lifecycle tests with python3 Tests/CLI/run-tests.py /path/to/CoreSMC
The tests use a mock SMC service and keep build artifacts in a temporary directory
4/5 libraries are developed and maintained by me, which helps minimize risk across all projects in which they are used
- CoreSMC - private library for sending read/set fan speed calls via SMC
- iSMC - Reading data from temperature sensors
- AutoUpdate
- ScrechKit - SwiftUI tweaks
- LaunchAtLogin