Available on the Mac App Store. Requires macOS 26 or newer on Apple Silicon.
One focused workspace for the work around your code
Devil opens as a sidebar workspace, not a row of tabs. Four groups are free. Three need Devil Pro.
Cleanup
Free
Scan common Xcode and simulator caches, review sizes, and reclaim selected disk space with confirmation.
Devices
Pro
Control booted iOS simulators, browse and edit an app's SQLite and UserDefaults data, export defaults, change device state, and send push notifications.
Git
Pro
Review changes and conflicts, pull, manage branches, commit, push, and create GitHub pull requests for selected local repositories.
Network Monitor
Pro
Capture, inspect, group, and mock supported foreground URLSession traffic from instrumented iOS Simulator apps.
Reference
Free
Browse local Apple-platform screen, typography, HTTP, font, and App Store screenshot references.
UI
Free
Search SF Symbols and work with colors, Tailwind families, and curated palettes.
Tools
Free
Generate and convert values, transform encodings, inspect JWTs, test Regex and JSONPath, compare text, hash input, and create QR codes. Everything runs locally.
UUIDULIDBase64JWTRegexJSONPathDiffQR
Reclaim the space Xcode quietly takes
Free
Cleanup scans the locations that fill up while you build, shows what each one costs you, and lets you pick individual folders or whole groups. Sizes stream in as they are calculated, so the list is useful before the scan finishes.
Devil asks for the cleanup folders through standard macOS panels first, then stores them as security-scoped bookmarks.
Deleting takes a second confirmation, and paths outside the granted roots are skipped and reported.
The running total counts only the bytes that were actually removed, so a partial failure never inflates it.
Drive your booted simulators from the bar
Devil Pro
Point Devil at your Xcode once and it lists every booted iOS simulator. Expand one to reach the installed apps, and you are not limited to the usual device toggles: the app's own storage opens right there in the popover.
Browse and edit the app's SQLite database
Select an installed app and Devil lists the SQLite databases inside its container, every table in them, and the rows themselves. Switch between the data and the schema, search rows, and correct a value in place instead of rebuilding to reach one field.
Tables, schema and rows, in the popover
Read and edit UserDefaults, down to nested values
Three columns: every defaults file in the container, the keys inside the one you pick, and the value itself. Each key carries its type, so a Bool is distinguishable from the JSON blob next to it at a glance. Nested JSON opens as raw text, formatted output, or a searchable tree, and a buried flag takes a moment to find rather than a debugging session. Supported property-list values are editable in place.
Files, keys, and the value, side by side
How edits are handled
Nothing is written until you press Save, in either viewer.
Leaving a page with unsaved changes prompts you first.
A whole domain exports as structured JSON, or as a Markdown key, type and value table to paste into an issue.
You can also open the selected app's container in Finder when you would rather work on the files directly.
Device state
Grant, revoke or reset privacy permissions, set a location, switch language and locale, flip appearance, and change the Dynamic Type size. Reboot or shut the simulator down from the same page.
Test payloads
Compose a push notification for the selected app with a title, body, badge and sound, or send a background update. It is delivered straight to the simulator, so notification handling is testable without a server.
Device state
Push payloads
Put the simulator anywhere
Seven preset cities cover the usual cases. For everything else, search for a place or drop a pin straight on the map, then save it under a name you will recognize. The location applies to the active simulator immediately, and saved places are stored globally, so every simulator you boot can reuse them.
Saved places, reusable on every simulator
Worth knowing
Devil runs simulator commands through the Xcode you select, because a sandboxed app cannot reach xcrun on its own.
Push payloads are delivered to the simulator for testing. This is not production APNs delivery.
Physical-device support is not available in this release.
Review, commit, push, and open PRs without leaving the bar
Devil Pro
Add the repositories you actually work in and Devil keeps them one click away. Staged and unstaged changes are separated, every changed file opens into a real diff, and the commit box sits under the file tree where you need it. Devil fetches origin when you select a project, and Pull fast-forwards a clean, non-diverged branch — it will not invent a merge to get you up to date.
Read the change first
Stage or unstage one file or all of them, read text diffs with hunk headers and context lines, and discard work only after a destructive confirmation. Binary files are detected and flagged instead of rendered. Selected files and folders can go straight into .gitignore.
Land in a merge, rebase, cherry-pick or revert with conflicts and Devil says so, names the operation, and counts the unresolved files. Narrow the tree and the diff to just those files, and the full change list comes back on its own once the last conflict is staged.
Then ship it
Apple Intelligence can draft a Conventional Commits message from the staged diff on device when it is available, and the button stays disabled when it is not. Push the branch, then open a GitHub pull request with a base branch, title and body prefilled from GitHub and your commit.
History, with the files each commit touched
Every branch, local and origin, in one table
Each repository gets a Branches page. It fetches and prunes origin first, then puts local and remote branches in one searchable table with their upstream, their ahead and behind counts, and the current and default markers. When the remote is unreachable the last snapshot stays on screen instead of emptying out.
Create and check out
Branch from where you are, or check out a branch that only exists on origin and get a local tracking branch for it. Both want a completely clean tree first.
Publish and rename
Push a branch to origin for the first time and set its upstream, or rename it locally and on the remote together, with explicit recovery actions if a network step is interrupted.
Delete, once merged
Local and origin deletion is offered for merged branches. Discarding unmerged work is not a decision a menu-bar utility should make for you.
How Devil talks to GitHub
The remote is contacted when you open the branch workspace or start a fetch, pull, branch, push or pull-request action, using one fine-grained personal access token you store in the macOS login Keychain.
The token needs Contents and Pull requests read and write access for the repositories you use with Devil.
Branch operations target origin. Authenticated changes to a remote need an HTTPS origin on github.com; other remotes can still be inspected and fetched.
Devil is not a general Git hosting client, and starting, continuing or aborting merges and rebases, along with stash and force pushes, is deliberately out of scope.
See what your Simulator app is sending
Devil Pro
Network Monitor captures requests from a Simulator app you instrument yourself. Devil generates the setup snippet, loads its capture framework from the installed app in Debug builds only, and listens on a local loopback port. Once a request has come through, you can answer the next one with a response you wrote yourself.
One session, its request timeline, and the response as a searchable tree
Paste it once, call it early
Copy the generated loadDevBarConnect() function into your app — there is a SwiftUI snippet and a UIKit one, so you take the shape that matches your startup — then call it from your earliest entry point, before anything creates a URLSession. The whole block sits behind #if DEBUG && targetEnvironment(simulator), so it never reaches your Release build.
One session per launch
Connected and disconnected app sessions each keep their own chronological timeline. Search URLs and bodies, combine method and status filters, reveal or copy a masked sensitive header, and take the whole request away as cURL. A polling endpoint that fired forty times can be grouped by request identity into a single row and opened as a group overview, without losing any individual occurrence. Sessions you are done with can be deleted one at a time.
Bodies you can read
Responses open Raw, Formatted or JSON. Formatted pretty-prints JSON and XML, decodes form data, and renders HTML as an inert preview that cannot run scripts, submit forms, navigate or load anything external.
Answer a request with your own response
Pick a request that already completed, choose Create Mock, and the matcher arrives filled in from the real call. Keep it exact, or add a condition on a query item, a header, a JSON path or the raw body when only one variant should be caught. Edit the JSON body scalar by scalar instead of retyping the document. Save and enable it, and the next matching request is answered inside the capture framework before a real task is ever created.
The matcher on the left, the response you are sending back on the right
Return what you need
Any HTTP status, safe headers, a JSON or UTF-8 text body, and up to sixty seconds of added latency when you want to see the loading state properly.
Or return nothing at all
Simulate offline, a timeout, a lost connection, or a host that cannot be found or reached, so the error path gets exercised without unplugging anything.
Fails open, always
A disabled rule, an unpaired or disconnected app, a rejected snapshot, the global Master Off, or simply no match — every one of them falls through to the real network.
Where the time actually went, phase by phase
What Network Monitor does not do
Your app has to be instrumented with the generated setup. Devil installs no proxy and no TLS certificate.
Capture covers foreground HTTP and HTTPS URLSession data tasks created after the framework loads, in iOS Simulator apps.
Physical devices, background sessions, WebSockets, WKWebView and raw Network.framework traffic are out of scope.
Captures live in memory for the current Devil process. There is no capture persistence, replay or HAR export. The mock rules you explicitly save are the one thing that is stored.
Mocks answer requests. They do not rewrite the outgoing request, run scripts or templates, hold binary bodies, or import and export as scenarios.
The Apple references you reach for, built in
Free
Seven reference surfaces, all bundled with the app. They read from local catalogs and compute on your Mac, so they keep working with the network off and with no reference service behind them.
Screens
Type
SF Symbols
Color
Tailwind families
App Store Shots
Required screenshot dimensions and orientation variants, grouped by platform, with a copyable size label.
Fonts
Search the families available on your Mac, preview them at several point sizes, and copy the family name or the matching Font.custom code. Families are labeled for iOS and macOS availability.
HTTP Status
A bundled catalog of response codes you can search by code, name or description, grouped by response class.
The small utilities that save a tab switch
Free
The things you currently paste into a random website. Every input and result in this group is processed on your Mac, offline.
GeneratorsUUID, UUID batch, ULID, random string, lorem ipsum and Unix timestamps, with the length and count on a slider. Timestamps convert in both directions, one at a time or a whole batch at once.
EncodersBase64, URL, HTML entities, Unicode, hex and binary, plus JSON pretty-print with line and column diagnostics, and JWT inspection that leaves the signature unverified.
QR CodeAny text becomes a QR code, with four error correction levels to choose from.
Regex
Foundation regular expressions with case-insensitive, dot-matches-newline, line-anchor and comment options. Matches report their offsets and capture groups against a highlighted preview, and a replacement template gives you a copyable result before you commit to it.
Text Diff
Two pasted values side by side, with unchanged, added, removed and modified lines, character-level highlights inside the modified ones, preserved line numbers, and a copyable unified diff.
JSONPath
Query a document with $, dot and bracket keys, array indexes, wildcards and recursive key lookup, and get the matching paths, their kinds and their scalar values back.
Hashing
SHA-256, SHA-384 and SHA-512, and HMAC with your own key. Results are lowercase hex.
Text
Seven casings, character and word counts, line sorting, duplicate removal, visible whitespace and trailing-space cleanup.
Numbers
Convert between binary, octal, decimal and hexadecimal.
Three backgrounds, one window
Free
Devil floats over your desktop, so how much of it shows through is your choice. Pick a background and see the difference.
Full Liquid Glass. Your desktop shows through, which looks striking over a dark wallpaper and gets harder to read over a bright one.
A frosted layer under the content. It stays readable on any wallpaper while the cards still float as glass.
An opaque background. Maximum contrast, and no desktop showing through at all.
Set once, forget
Start Devil when your Mac starts, point it at the Xcode whose developer tools you want for simulator commands, and paste the GitHub token that push and pull requests need. If Reduce Transparency is on in macOS settings, Devil says so instead of pretending the setting still applies.
Your way around
Search the whole sidebar from one field, including device names, runtimes, bundle IDs and repository names. Star the destinations you live in and they move to Favorites. The last eight you opened stay in Recent.
Precise about what leaves your Mac
Devil is sandboxed, so it starts with access to nothing and asks for the rest through standard macOS panels. There is no account and no tracking.
Sandboxed
You grant the developer folders Devil needs through standard macOS file panels, and they are stored as security-scoped bookmarks. Access is opened only while a scan, a deletion or a repository operation is running. Cleanup is limited to an allowlist built from those roots, and deleting always takes a confirmation.
Offline core features
Cache scanning, the bundled screen, type, font, HTTP and App Store references, the color and symbol catalogs, and every generator, encoder, hash and text transform work with no network access at all.
Network only when it has a purpose
A Git remote or GitHub is contacted for the fetch, pull, branch, push, pull-request and default-branch operations you start, using your own token. Network Monitor listens on a local loopback port and keeps captures in memory for the current Devil process; the mock rules you explicitly save are the only part that is written to disk. Commit and pull-request text is drafted by Apple Intelligence on device when it is available.
Simple, honest pricing
Four groups are free. Devil Pro is one payment, once, and there is no subscription.
Free
Freealways
Four groups, no trial and no purchase needed.
Cleanup. Scan and reclaim Xcode and simulator cache space.
Reference. Screens, App Store shots, type, fonts and HTTP status.
UI. SF Symbols, the color picker, Tailwind families and palettes.
Tools. Generators, encoders, hashing, regex, diffs and QR codes.
Devil Pro
€19.99one time
Start a free seven-day trial yourself whenever you are ready. Nothing starts it for you.
Devices. Simulator control, app data and test push payloads.
Git. Diffs, conflicts, branches, history, commits, push and pull requests.
Network Monitor. Capture, inspect and mock instrumented Simulator traffic.
Everything in Free stays free. Restore Purchases is in the app.
Devil is on the Mac App Store. The price you pay there is the localized one the store shows you.