Skip to main content
Migrate Already selling? Move your customers to Keylight without re-issuing a single key.
Keylight

Guide · Copy protection

Best anti-piracy and copy protection for Mac apps

You cannot measure your piracy rate, and most anti-piracy spending ships friction to paying customers to stop attackers who were never going to pay. Here is what actually works, ranked by return.

Start Free

Updated July 2026

Search for anti-piracy advice and you’ll find a lot of confidence about a number nobody actually has. A cracked build has the license check removed or stubbed out — that’s the entire point of a crack — so it never contacts your server, never appears in a log, and never shows up in any dashboard you own. You cannot measure your piracy rate. Every figure quoted in a forum thread or a “how much are you losing to piracy” blog post is an estimate built on download counts from warez aggregators or a guess, not a measurement.

That changes what “best” has to mean on a page like this. You can’t rank these approaches by how well they stop piracy, because you have no way to verify that number before or after you ship a fix. What you can rank is return on effort: how much engineering time and customer friction each approach costs, against what it actually buys you. Some of these are close to free and worth doing on day one. Others are weeks of ongoing maintenance that ship friction to every paying customer to inconvenience approximately zero of the people who were never going to pay.

One more piece of context before the list: a pirated copy usually isn’t a lost sale. Most people running a cracked build were never going to buy at your price, on your platform, in their country. The developers who spend the most on copy protection are usually the ones who’ve convinced themselves otherwise. Keep that in mind as you read the ranking — it’s why the top of this list looks unglamorous and the bottom looks like busywork.

The best anti-piracy approaches for Mac apps

1. Signed offline license leases — best baseline for every paid app

A license signed with a private key your server holds, verified locally by the app using a bundled public key. This isn’t really an anti-piracy measure so much as the floor every paid Mac app should already be standing on: it stops trivial key-guessing and casual tampering, requires no server call at launch, and costs your honest customers nothing. If you don’t have this yet, it’s the first thing to build or buy — see offline license validation for how the cryptography works.

2. Node-locking and device activation limits — best for curbing the one signal you can actually see

Binding a license to a bounded number of devices is the one lever that acts on something you can genuinely observe: key sharing. A shared key still runs through your licensing system, so the devices-per-license tail, activation velocity, and geographic spread are real data, unlike a piracy rate. A generous cap — three to five devices — with self-service deactivation converts unlimited sharing into a bounded, tolerable number without a single honest customer noticing the ceiling exists. Full mechanics in node-locked licenses and how to prevent license key sharing.

3. Developer ID signing and notarization — required, but it’s hygiene, not defense

Every Mac app distributed outside the App Store should be signed with a Developer ID certificate and notarized — Gatekeeper will otherwise warn or block your app on a fresh install, which will cost you more legitimate customers than any crack ever will. Apple is explicit that this proves the software is not known malware and hasn’t been tampered with since signing. It says nothing about who is entitled to run it. Do this unconditionally; just don’t count it as copy protection, which the next section covers in full.

4. Server-side validation — best for catching revocations, worst as a per-launch gate

Checking a license against your server has a real, narrow job: confirming a refund or chargeback has actually revoked the key. Used as a periodic background revalidation alongside an offline lease — not as a hard gate every launch has to pass — it catches revocation within days without making your server a single point of failure. Used as the primary check, it’s a lose-lose: fail closed and a customer on a plane or behind a corporate firewall is locked out of something they paid for; fail open and the check enforces nothing, because it’s trivially bypassed by blocking the network. Pair it with an offline lease; don’t make it load-bearing on its own.

5. Deliberately doing nothing further — best default once the above is in place

Once you have a signed lease, a generous device cap, and clean Developer ID signing, the correct next move for almost every indie Mac app is to stop. Not out of neglect — because you have no evidence that spending more would pay back, and the next rungs on this list cost real engineering time for a payoff you can’t measure. This is the deliberate, defensible choice, not the lazy one.

6. Per-customer watermarking — best for narrow leak-tracing, not typical indie piracy

Embedding a customer-identifying token in exported files, sample content, or a pre-release build is a real technique — but it solves a different problem than app piracy. It’s for tracing where a specific leaked asset or build came from, which mostly matters for content-heavy or enterprise-distributed software, not a typical indie utility sold directly. If you don’t have a leak problem to trace, this has no return at all; build it only when a specific incident justifies it.

7. Binary obfuscation and tamper detection — lowest return on effort

Control-flow obfuscation, string encryption, checksum loops, anti-debugging tricks: this is the category with the worst return by a wide margin. It ships friction to 100% of your paying customers — code signing gets harder, crash symbolication breaks, every OS or toolchain update risks a false positive that locks out someone who paid you — to stop roughly zero determined attackers, who reverse a $49 utility as a hobby regardless of what you throw in their way. Adobe, Microsoft, and JetBrains get cracked within days despite security budgets larger than your entire revenue. Skip this unless you have specific, verified evidence that a specific, better-understood attack is costing you real revenue — and even then, weigh it against the cost of a single false positive: a refund plus a public review that outlives the sale by years.

Notarization is not copy protection

This is worth stating plainly because it’s the most common confusion in this space: Developer ID signing and notarization prove provenance, not entitlement.

Apple’s own description of the mechanism is narrow and specific: digitally signing your app with a Developer ID and including a notarization ticket lets Gatekeeper verify that the software is not known malware and has not been tampered with since it was signed. Notarization is an automated scan Apple runs before issuing that ticket. None of it checks who paid for the app, how many devices it’s running on, or whether the copy in front of Gatekeeper is licensed at all.

A cracked build doesn’t get to keep the original notarization ticket, either — modifying a signed executable invalidates its code signature by design, which is the entire point of code signing, so patching out a license check breaks the original signature outright. Gatekeeper’s job ends at “is this safe to run,” full stop. Whether the person running it paid you is a question your licensing layer answers, not Apple’s.

That doesn’t make notarization optional — it’s required baseline hygiene for any Mac app sold outside the App Store, and skipping it costs you real, measurable customers to Gatekeeper warnings. It just means you should budget it as distribution cost, not anti-piracy spend, and look to the approaches above it on this list for the thing it doesn’t do.

How to choose

  • Shipping a paid Mac app for the first time → signed offline leases plus a generous device cap. Nothing else, to start.
  • Seeing a key on far more devices than your cap allows → tighten enforcement and reach out to the outlier by hand before building anything new.
  • Distributing outside the App Store at all → Developer ID signing and notarization, unconditionally, as distribution hygiene.
  • Worried about a refunded customer keeping access → periodic background revalidation paired with your offline lease, not a per-launch online gate.
  • Tracing a specific leaked build or asset → per-customer watermarking, scoped to the incident.
  • Tempted by obfuscation or tamper detection → don’t, until you have specific evidence a specific technique is costing you specific revenue, and even then, budget for the false positives.

Where Keylight fits

Keylight is built around the approaches at the top of this list, not the ones at the bottom: Ed25519-signed offline leases your app verifies with no network call, generous device activation limits with self-service deactivation, and periodic background revalidation that catches refunds without making your server a single point of failure. It doesn’t ship obfuscation or tamper detection, because that isn’t where the return is. The dashboard surfaces the sharing signal directly instead of leaving you to infer it: active devices by day and month, new activations against devices churned over the last 30 days, and a breakdown by country and platform — the closest thing to a piracy signal that actually exists, because it’s the device pattern itself, not an estimate of one. Plans start at $19/month, with a free tier.

Start licensing your app today

Drop in the Swift SDK, point it at your dashboard, and sell paid apps in under a minute. Free forever tier included.

Start Free