Trust Strategy — Overcoming “Mac Cleaner = Scareware”

Status: DECIDED architecture doc. Governs marketing copy AND in-app UI copy. Any copy, screenshot, or UI flow that violates the Banned Patterns list in this doc is a release blocker — treat it the same as a failing test.

Why this doc exists (the risk, stated plainly)

Three facts collide and none of them are solved by writing better Swift:

  1. MacKeeper poisoned the category. Pre-2019 MacKeeper ran scareware-style full-screen “your Mac may be infected” popups, was the subject of a 2014 class-action suit alleging it fabricated problems to sell upgrades, and leaked account data for millions of users in a 2015 breach. Clario acquired it in 2019 and the product is now considered legitimate by most reviewers, but the brand damage is permanent — “MacKeeper” is still shorthand for “Mac scam” in casual conversation, and old scareware reviews still dominate search results years later (Macworld, Cybernews reviews, 2026). Every “Mac cleaner” inherits that prior.
  2. Apple’s own position is that macOS doesn’t need one. There’s no single Apple press statement, but the consistent line from Apple Support Community moderators is direct: cleaning/optimizing/speed-up software “is not necessary,” can “slow down your Mac instead of speeding it up,” and senior community members routinely advise against installing any of it (Apple Discussions threads 255255046, 8409499). Apple’s own answer to “how do I free up space” is Storage Settings, not a third-party app. We are building a product Apple’s own support channel tells users to avoid the category of.
  3. Apple is actively purging cleaner-shaped App Store scams. Apple removed 82,509 apps in 2024 (Utilities the single largest category, 16,000+ apps) and pulled 17,000+ apps in 2024 and nearly 59,000 in 2025 for bait-and-switch, much of it subscription-trap “cleaner” and “optimizer” utilities using fake storage-full warnings to push weekly subscriptions (Apple Newsroom transparency reports; independent teardown by Connor Tumbleson, Jan 2025, documenting two such apps ranked #7 and #14 among free Utilities). Meanwhile fake CleanMyMac installer sites are an active malware vector delivering crypto-stealers (TechRadar, 2025/2026 coverage). Users have every reason to assume any cleaner is either a subscription trap or malware wearing a costume.
  4. Free OSS rivals set the honesty bar, not the price bar. PureMac (MIT) and Pearcleaner (13k GitHub stars) are free, open source, and cover caches/Xcode/Homebrew/uninstall. A user can read their source. We can’t compete on “you can read the code” — we’ve decided closed source, paid one-time (see P0-01, P0-07). So every ounce of trust has to come from verifiable behavior, not source access. That’s what this doc designs.

Non-negotiable framing for every section below: we cannot say “trust us.” We have to build things a skeptical user, a security journalist, or a Reddit thread can check without our cooperation.


1. Published deletion-rules manifest

The problem it solves: closed-source binary + Full Disk Access is the exact shape of a supply-chain attack. The only way to neutralize that fear without open-sourcing the app is to open-source what it’s allowed to touch.

Format: a single YAML file, rules.yaml, one entry per rule:

- id: xcode-derived-data
  version: 1
  category: developer-tools
  path_pattern: "~/Library/Developer/Xcode/DerivedData/*"
  match_type: glob
  action: delete
  risk: low
  reasoning: >
    Xcode regenerates DerivedData automatically on next build. Safe to
    delete unconditionally.
  requires_confirmation: false
  added_in: 1.0.0
  references:
    - "https://developer.apple.com/documentation/xcode"
- id: chrome-cache
  version: 1
  category: browser-cache
  path_pattern: "~/Library/Caches/Google/Chrome/**"
  match_type: glob
  action: delete
  risk: low
  reasoning: "Browser cache, regenerated on demand, no user data."
  requires_confirmation: false
  added_in: 1.0.0

Where it lives: a public GitHub repo, dfacto-ai/mac-cleaner-rules (separate from the closed-source app repo — this repo has no reason to be private and its openness is the point). Every release tag corresponds exactly to the rules bundle shipped in that app version. Full history is git log-diffable, so “what changed between v1.2 and v1.3” is a normal PR diff any user or journalist can read without our help.

How a user verifies the shipped binary uses exactly the published rules — this is the load-bearing mechanism, not the manifest’s existence:

Implementable contract:


2. “Show me exactly what will be deleted and why” before any action

The problem it solves: the entire scareware genre works by hiding the gap between “we found a problem” and “here is the specific evidence.” Close that gap and the scareware pattern becomes structurally impossible to execute, not just against our style guide.

UI contract:

Implementable contract:


3. Zero telemetry by default, plus a viewer for opt-in telemetry

The problem it solves: a closed-source app that phones home is indistinguishable, from the user’s vantage point, from spyware. The fix isn’t a privacy-policy paragraph, it’s making “phones home” checkable.

Implementable contract:


4. Third-party security audit, published in full (owned by P4-07)

This section specifies what P4-07’s gate must cover; P4-07 executes it.

Scope the audit must cover:

Firms that do this kind of macOS/desktop-app audit (all have public track records auditing comparable trust-sensitive macOS apps, per current search): Cure53 (Berlin — audited ExpressVPN macOS, Obscura VPN macOS app + network extension, NordVPN desktop apps, Bitwarden desktop, Obsidian); Trail of Bits (New York — Obsidian Sync infra/crypto, broad macOS/ desktop and crypto audit practice). Both routinely publish full reports (not just summaries) for privacy/security-focused consumer apps, which is the standard we’re committing to.

Implementable contract (for P4-07 to execute):


5. Reproducible builds + published checksums

Honest assessment of feasibility: full bit-for-bit reproducible builds for a notarized Swift/SwiftUI app are not fully achievable today and we should say so rather than claim it. The blockers are real and external to us: Xcode ships its own clang/swiftc per version and optimization output can vary release to release; Apple’s notarization step (stapling a ticket into the binary) is itself a non-deterministic, Apple-side transformation — two notarization runs of the identical input produce different stapled output because the ticket embeds Apple-side metadata. SwiftPM dependency resolution has historically had its own reproducibility gaps. The one public reference case researching this for a security-sensitive Swift/iOS app (Immuni, the Italian COVID-tracing app) concluded it’s “feasible but not fully achieved” even with dedicated effort — that’s the honest ceiling for a team our size.

Best available substitute, and what we commit to instead:

Implementable contract:


6. No scareware patterns, ever — Banned Patterns list

Phrased so an auditor (or CI string-scan) can mechanically check app strings, screenshots, App Store copy, and marketing copy against it. Any occurrence of any pattern below, anywhere in shipped copy, is a release blocker.

  1. No unearned urgency language. Banned strings/patterns: “at risk,” “your Mac is at risk,” “warning,” “danger,” “critical issue found,” “act now,” “immediately,” used to describe a normal, harmless condition (cache size, log file count, etc.). Exception: genuine, factual risk statements written in the Review screen’s per-item reasoning (§2), which must be specific and sourced from the manifest, not generic alarm copy.
  2. No countdown timers or artificial deadlines anywhere in the app or its marketing — no “offer expires in,” no scan-result countdown, no “your discount ends in.”
  3. No inflated or estimated “GB found” numbers. Every number shown to the user is the exact, already-computed size of an already-identified set of items (§2) — never a pre-scan teaser number, never a rounded-up marketing figure (“reclaim up to 40GB”), never a number that includes items not individually listed on the Review screen.
  4. No “scanning you into a purchase.” The free scan must show real, itemized results with real paths and real sizes — never a paywall that blocks seeing what was found, only a paywall (if any) on the delete action. Never a scan result that’s deliberately vague (“47 issues found!”) to force a purchase to see detail.
  5. No fake system-state indicators. No red/yellow/green “health score,” “Mac Score,” or gauge widget not backed by a specific, inspectable, individually-listed metric. No badge/counter implying malware, viruses, or infections — macOS on Apple Silicon doesn’t have the “virus problem” this implies, and claiming otherwise is exactly the deception category Apple’s fraud team is actively removing apps for.
  6. No dark-pattern consent flows. No pre-checked “select all” on destructive actions. No disabled/greyed-out “Skip” or “No thanks” buttons. No consent dialogs where declining is visually smaller/lower- contrast than accepting.
  7. No auto-clean / silent background deletion in any default configuration — deletion always requires the explicit Review-screen confirmation in §2, full stop, no “smart mode” that skips it.
  8. No comparison-shaming imagery: no “before/after” red-to-green Mac icons, no “your Mac is dirty” illustrations, no anthropomorphized “sick Mac” mascots.
  9. No subscription dark patterns: no auto-enrolling a trial into a paid subscription without a clear, dated, in-app reminder (moot for us — we’re paid one-time, but this stays banned permanently in case pricing ever changes, per P0-07 decisions).
  10. No claims macOS itself contradicts. Never claim to “speed up,” “optimize,” “boost,” or “supercharge” the Mac via cache-clearing — Apple’s own guidance is that this doesn’t work and can make things worse; our claims are limited to disk-space-recovery facts we can prove per-item, matching the Honesty Contract (P0-06).

Mechanical check: CI includes a string-scan over all .strings/ .stringsdict resources and marketing copy in the public repo for the banned tokens above (risk, danger, warning, at risk, act now, immediately, optimize, boost, speed up, clean now, up to \d+\s?GB, expires in, health score) with an explicit allowlist file for the rare legitimate use (e.g. a genuine “at risk” only inside an itemized, manifest-sourced reasoning string) reviewed manually per exception.


7. Full undo for everything

Implementable contract:


Three additional trust mechanisms (not in the original list)

  1. A public, dated “incidents” page — even before we have any incidents. Ship dfacto-ai/mac-cleaner (or the rules repo) with a TRUST-LOG.md that we commit to updating within 48 hours of any confirmed data-loss report, false-positive deletion pattern, or security finding, with root cause and fix. An empty, dated, publicly-watched log from day one is more credible than a promise to be transparent someday — and it directly answers the MacKeeper-style fear (“what happens when they screw up”) before it happens.
  2. A local, tamper-evident action log the user owns, not us. Every scan and delete writes to a local SQLite/JSON log the user can open, export, or grep directly from Terminal, independent of the in-app History UI (§7) — so “what did this app do to my Mac” is answerable without trusting our UI to render it honestly, only trusting the raw log file, which we document the format of.
  3. A standing “report a false positive” loop that visibly changes the published manifest. A one-tap in-app “this shouldn’t have been flagged” action per Review-screen item files a public issue against the mac-cleaner-rules repo (§1) pre-filled with the rule id and path pattern (no personal data), and we commit to a stated SLA (e.g. 5 business days) to respond in that public issue. This turns “the rules are published” (a static claim) into “the rules visibly respond to users” (a living one), which is the difference between a compliance document and an actual trust signal.

What we say when a user asks “why should I trust a closed-source cleaner?”

We’re closed source because that’s the trade-off of a sustainable, one-time-paid product — but “closed source” doesn’t have to mean “opaque.” Every path we’re capable of touching is published, versioned, and diffable at github.com/dfacto-ai/mac-cleaner-rules; the app can verify its own shipped rules against that public list in one tap. Before anything is deleted, you see the exact files, sizes, and the exact reason, sourced from that same public list — not a summary, not a “1,204 issues found” teaser. Nothing is sent off your Mac unless you explicitly turn telemetry on, and if you do, you can watch the exact payload before it’s sent. A named independent security firm audits the app before release and we publish the full report, not a badge. And if we ever get something wrong, every deletion is undoable for 30 days, and we log it in public. You’re not trusting our promises — you’re trusting things you or a journalist can check without needing our source code at all.