Audit device fingerprinting signals on iOS and iPadOS
Loupe is an iOS/iPadOS app that shows, in raw form, exactly what device fingerprinting signals your iPhone quietly exposes to any app.
Why it matters
Reveal what device fingerprinting data iOS apps can silently collect about your iPhone or iPad by reading and displaying real values from public APIs, organized by access tier (passive, permission-required, and advanced side-channels).
Outcomes
What it gets done
Extract passive signals like locale, time zone, screen dimensions, and battery status without prompts
Display permission-gated readings from contacts, photos, location, and calendars
Probe advanced side-channels including URL-scheme detection and Keychain persistence
Export raw fingerprinting values for analysis while keeping all data on-device
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/mysk-research-loupe | bash Overview
Loupe
Loupe is an iOS/iPadOS app that reads real values from public iOS APIs and displays them raw, grouped into Passive, Needs Permission, and Advanced side-channel tiers, so users can see exactly what device fingerprinting data any third-party app can quietly collect. Use it to understand, hands-on, what your iPhone exposes to apps without special permissions versus what requires a prompt or a side-channel technique; it is an inspection tool, not a fingerprinting blocker - Mysk's Psylo browser is the separate protective product.
What it does
Loupe is an iOS and iPadOS app that gives a hands-on tour of the device fingerprinting surface exposed by public iOS APIs - the same ones any third-party app can call. It reads real values from those APIs and shows them to you raw, without aggregation or hashing, so you can see exactly what your iPhone quietly exposes and why each individual reading helps an app recognize you again across sessions. The premise, stated directly by the source: trackers don't need your name, email, or location to recognize you online - no single reading is necessarily unique on its own, but together they form a fingerprint that follows you across apps and websites.
Loupe groups every signal into three tiers by cost of access: Passive (visible to any app with no prompt at all - locale, time zone, screen, battery, and more), Needs Permission (readings that trigger an iOS system prompt - contacts, photos, location, calendars), and Advanced (clever side-channel uses of public APIs, such as URL-scheme probing via canOpenURL and Keychain persistence across app reinstalls). It also builds for macOS, though the source notes the Mac version is mostly complete but not yet fully polished. The app itself was written almost entirely by AI coding tools, as the source discloses directly.
When to use - and when NOT to
Use Loupe to understand, concretely and on your own device, what data points a third-party iOS app can gather about you without any special permissions (the Passive tier), what triggers an explicit permission prompt, and what less-obvious side channels (URL-scheme probing, Keychain persistence) exist beyond the obvious permission-gated APIs. It's a fit for privacy-curious users, security researchers, and developers who want a concrete, hands-on demonstration of iOS device fingerprinting rather than an abstract explanation.
It is an educational and inspection tool, not a protective one - it shows you what's exposed, it doesn't block or reduce it. For actual anti-fingerprinting protection while browsing, the source points to Mysk's separate product, Psylo, a privacy-first browser with proxy-backed browsing and isolated tabs.
Inputs and outputs
Input is simply running the app on an iOS/iPadOS device or simulator - no configuration needed to see the readings. To build from source, open code/Loupe.xcodeproj in Xcode 26+, copy code/Config/Signing.local.xcconfig.example to code/Config/Signing.local.xcconfig and fill in your own DEVELOPMENT_TEAM and bundle identifiers (gitignored, never published), then build and run. The project uses Xcode's buildable folders, so new Swift files are picked up automatically without editing the project file.
Output is an in-app display of each signal's raw value, grouped by tier. Nothing Loupe reads leaves the device unless the user explicitly exports it - values are never uploaded, synced, hashed, or shared.
Integrations
Loupe reads directly from public iOS and iPadOS system APIs (locale, time zone, screen, battery, contacts, photos, location, calendars, URL-scheme handling, Keychain) with no external service integration or network calls beyond an explicit user-initiated export. It's a standalone Swift/Xcode project with no dependency on a backend.
Who it's for
Privacy-conscious iPhone and iPad users, security researchers, and app developers who want to see, in concrete and raw terms, exactly what a third-party app can learn about their device through public APIs - and, by extension, anyone deciding whether they need stronger anti-fingerprinting protection like a dedicated privacy browser. It is licensed under MIT for the source code (the name, logo, and design assets are not covered).
Source README
Loupe
Loupe is an iOS and iPadOS app that gives you a hands-on tour of the device fingerprinting surface. It reads real values from public iOS APIs, the same ones any third-party app can call, and shows them to you raw. The point is simple: see what your iPhone quietly exposes, and why each reading helps an app recognize you again.
Trackers don't need your name, email, or location to recognize you online. Each reading isn't necessarily unique on its own, but together they form a fingerprint that follows you across apps and websites.
How signals are organized
Loupe groups every reading into three tiers, reflecting the cost of access:
- Passive - visible to any app with no prompt at all (locale, time zone, screen, battery, and more).
- Needs Permission - readings that trigger an iOS prompt (contacts, photos, location, calendars).
- Advanced - clever side-channel uses of public APIs, such as URL-scheme probing via
canOpenURLand Keychain persistence across reinstalls.
A note on how this was built
Loupe was written almost entirely by AI coding tools.
Building
You'll need Xcode 26 or newer.
- Open
code/Loupe.xcodeproj. - Copy
code/Config/Signing.local.xcconfig.exampletocode/Config/Signing.local.xcconfigand fill in your ownDEVELOPMENT_TEAMand bundle identifiers. This file is gitignored and never published. - Build and run on a device or simulator.
The project uses Xcode's buildable folders (folder references), so new Swift files are picked up automatically with no need to edit the project file.
macOS
Loupe also builds for macOS. The Mac version is mostly complete, but a few things still need work before it's polished.
About
Loupe is made by Mysk.
FAQ
Common questions
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.