macOS 26 menu-bar app

Your Apple-dev toolkit, one click away

Clean Xcode clutter, control simulators, manage Git, inspect simulator network traffic, and reach Apple references from the menu bar.

Available on the Mac App Store.
Requires macOS 26 or newer on Apple Silicon.

Devil open from the macOS menu bar, showing the Xcode Caches page with Derived Data, SPM Caches, Preview Caches, Device Support and Device Logs sizes.

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.

UUIDULIDBase64JWT RegexJSONPathDiffQR

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.

Derived Data SPM caches Preview caches Device support Simulator runtimes Device logs
Devil Cleanup page listing Derived Data, SPM Caches, Preview Caches, Device Support and Device Logs with sizes, expanded to individual iOS device-support versions.

How deletion is kept safe

  • 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.

Devil browsing a simulator app's SQLite database, showing the table list, the container path of the selected store, Data and Definition tabs, a row search field, and the rows of a VehicleDataRecord table.
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.

Devil browsing a simulator app's UserDefaults in three columns: the five defaults files in the container, the 23 keys inside the selected app-group plist typed as String, Number, Bool and JSON Data, and the selected AppSettings payload expanded as an editable JSON tree above Cancel and Save.
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.

Devil Devices Settings page for a booted iPhone 17 Pro Max, with controls for privacy permissions, location, language, appearance mode and text size.
Device state
Devil composing a simulator push notification with alert title, body, badge and sound fields.
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.

Devil Custom Locations page with a map of Los Angeles, a pin dropped on Dodger Stadium, a place search field, and a saved list holding Dodger Stadium, MGM Grand and Berlin Brandenburger Tor with their coordinates.
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.

Devil Git Changes page showing staged and unstaged counts, a file tree, an inline Swift diff, and the commit box with Generate, Commit, Push and Create PR actions.

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.

Devil Git History page listing commits with author and age, and the files changed by the selected 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.

Devil Network Monitor with an app session of 31 requests, a chronological timeline filtered by method and status, and the selected response explored as a collapsible, searchable JSON tree beside Copy URL and Copy as cURL actions.
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.

Devil Capture Setup page with an active listener, the generated loadDevBarConnect snippet, and instructions to call it before the first request.

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.

Devil Network Monitor on the Mocks tab, with an enabled GET /mock-profile rule beside its matcher for method, origin and percent-encoded path, an Add Condition control, and a 200 OK JSON response body being edited as a tree.
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.
Devil Network Monitor metrics for one request, breaking 155 milliseconds into queued, TCP, request, waiting and download phases, with transfer rate, content type and body sizes below.
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.

Devil Screen Sizes reference listing iPhone models with pixel and point dimensions, scale, ppi, safe areas and corner radius.
Screens
Devil Typography reference showing Apple text styles with point size, weight, leading and the matching SwiftUI token.
Type
Devil SF Symbols reference with a searchable, category-filtered grid and a large preview of the selected symbol.
SF Symbols
Devil Color picker with a saturation and brightness pad, hue bar, hex field, shade ramp and copyable SwiftUI and UIColor values.
Color
Devil Color reference showing bundled Tailwind families from shade 50 to 950 with a search field.
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.

Devil Generators page with UUID, UUID batch, ULID, random string, lorem ipsum and Unix timestamp generators.
Generators UUID, 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.
Devil Encoders page pretty-printing JSON and showing the result as a searchable tree.
Encoders Base64, URL, HTML entities, Unicode, hex and binary, plus JSON pretty-print with line and column diagnostics, and JWT inspection that leaves the signature unverified.
Devil QR Code tool turning a pasted URL into a QR code with selectable error correction levels.
QR Code Any 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.

Devil Settings with the Glass background selected, showing the desktop wallpaper through the window.

Full Liquid Glass. Your desktop shows through, which looks striking over a dark wallpaper and gets harder to read over a bright one.

Devil Settings with the Material background selected, showing a frosted layer under the content.

A frosted layer under the content. It stays readable on any wallpaper while the cards still float as glass.

Devil Settings with the Solid background selected, showing an opaque window at maximum contrast.

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.

Put your Apple-platform toolkit in the menu bar

Available on the Mac App Store.
Requires macOS 26 or newer on Apple Silicon.