Any app that controls fan speed needs administrator privileges, and that's something you should always question. This page explains exactly what gets installed, what it can do, and how to remove it.

Why administrator permission is needed

Fan speed is managed by the SMC (System Management Controller), a microcontroller in your Mac that macOS does not allow a regular application to write to. Reading temperatures and RPM is harmless, but writing a speed requires system privileges.

That's why FanFan Control is split into two pieces: the app you see, which runs with your normal user permissions, and a small privileged helper that performs only the operations that require elevated permissions.

What exactly gets installed

The first time you turn on manual control, macOS asks for your password once and installs two files:

FileWhat it is
/Library/PrivilegedHelperTools/com.fanfancontrol.helper The helper. About 450 KB.
/Library/LaunchDaemons/com.fanfancontrol.helper.plist The registration that tells macOS when to launch it.

One important detail: the app doesn't copy these files itself. macOS does it via SMJobBless, Apple's official mechanism for this. The system verifies the signatures of both parties before installing anything, and refuses if anything doesn't match. The app never touches system files directly or asks for your password on its own — the dialog you see is macOS's own.

What the helper can do (and can't)

This is the part that really matters. The helper does not execute arbitrary commands: it exposes a closed interface of six operations, and there is no way to ask it for anything else.

OperationWhat it does
listFansAndTempsReturn fans and temperatures
setFanRPMSet the speed of a fan
setFanAutoReturn a fan to system control
setAllAutoReturn all fans to system control
discoverKeysEnumerate the SMC's sensor keys
helperVersionReport its version

There's no access to files, no network access, and no command execution. Even if someone managed to communicate with it, the worst they could do is move the fans.

Two-way validation

The classic risk with this design is that malicious software finds the already-installed helper and uses it as a backdoor. This is prevented with a mutual cryptographic check:

identifier "com.fanfancontrol.app" and anchor apple generic and certificate leaf[subject.OU] = "5P2FSRLTVZ"

In plain terms: it only accepts commands from a program that identifies itself as FanFan Control, signed with a certificate issued by Apple, whose development team identifier is exactly 5P2FSRLTVZ — ours. Any other process that tries to connect is rejected, even if it's running as administrator. And because that check is resolved by the operating system itself against the binary's signature, it isn't enough for an impostor to just use the same name.

Signing, notarization, and Hardened Runtime

The app and the helper are built with Hardened Runtime, which prevents code injection into the running process, and are signed with a Developer ID certificate issued by Apple to Jaime Lillo Benito.

Every version is then submitted to Apple for notarization, where it's scanned for malicious code and returned with a certificate embedded in the download itself. You can verify this yourself before opening anything, once you've downloaded the DMG:

spctl -a -t open --context context:primary-signature -v FanFanControl.dmg

It should respond accepted and source=Notarized Developer ID.

That's why, when installing the helper, macOS shows a "Background Items Added" notice with the name Jaime Lillo Benito: that's the real name on the Apple Developer account used to sign it, and it's exactly the proof that Apple verified who's behind it. It's not an error, nor is it a field in the helper that can be changed — an installer with no identifiable name behind it would be the less trustworthy signal, not the other way around.

Thermal safety can't be turned off

Lowering fan speed too much can overheat the machine. That's why the app includes a limit that doesn't depend on your settings: if CPU temperature exceeds 95 °C, all fans immediately return to the system's automatic control, regardless of how they were set. There's no setting or preference that overrides this.

Your license doesn't go anywhere

The license is validated locally. The app has an Ed25519 public key built in, which it uses to verify the signature on your key; the private key used to sign it lives only on the purchase server and is never distributed. Because the check is mathematical rather than a lookup, activating the license requires no internet connection, and no identifier for your machine is sent anywhere.

The practical consequence: the app keeps working even if this website disappears someday. Your copy doesn't depend on any server.

One caveat worth stating: if a purchase is refunded, its key goes onto a list of annulled licenses that travels inside new versions of the app. There are still no internet lookups —the list is compiled into the signed binary— but a refunded license stops unlocking Pro as soon as the app is updated. See the refund policy.

Updates: optional and signed

The app can tell you when a new version is out. It's the only thing it ever asks the network, and it asks you the first time before enabling it: say no and it never connects, and you keep the whole application, undiminished.

With checking enabled, all that happens is that the app downloads a small file from this site listing the published versions. That request reveals the same as visiting any web page —your IP and the version you have installed— and carries neither your license, nor your email, nor any data about your Mac.

Every update is signed with an Ed25519 key different from the one that signs licenses, and its public half is built into the app. A download whose signature doesn't match is discarded before it is ever installed, so neither a compromised server nor someone intercepting the connection can slip in a tampered version. And, like any other, it arrives signed and notarized by Apple.

How to uninstall everything

Dragging the app to the Trash doesn't remove the helper, since it lives outside the app bundle. To remove it completely, in Terminal:

sudo launchctl bootout system/com.fanfancontrol.helper
sudo rm /Library/PrivilegedHelperTools/com.fanfancontrol.helper
sudo rm /Library/LaunchDaemons/com.fanfancontrol.helper.plist

Once removed, the fans return to macOS's control. You can also delete the saved license by searching for com.fanfancontrol.app.license in Keychain Access.

Have a question that's not covered here?

Write to soporte@fanfancontrol.com and I'll answer it.