Published: March 05, 2026 · Author: Lionel Mosley · Platform: macOS Tahoe 26.x · Intel MacBook Pro
Tags:
I enjoy working with different computing platforms. When using my MacBook Pro — switching between PowerShell and Terminal — I often forget commands like Flush DNS Cache. Rather than reaching for my notes every time, I opened Xcode and built the solution.
MacSysTools is a native macOS system administration application built specifically for macOS Tahoe (26.x) running on an Intel MacBook Pro.
It provides a clean, professional graphical interface for common macOS Terminal commands — eliminating the need to remember complex command syntax or open Terminal manually. Every tool is one click away, with live output streaming, native sudo elevation, and a UI that feels indistinguishable from a first-party Apple application.
The core philosophy: encode the knowledge of what command to run and when, not just how. The app handles version detection, privilege elevation, output parsing, and error display — the user selects a tool and clicks Run.
The project started as a brainstorm around Electron. After evaluating both options, SwiftUI + Xcode won for three decisive reasons:
Liquid Glass. macOS Tahoe introduced the most significant visual redesign since Big Sur, built around a new material called Liquid Glass. SwiftUI gets this automatically and correctly — Electron required undocumented private APIs that could break with any macOS point release.
Native performance. The MacSysTools app bundle is approximately 8MB. An equivalent Electron app would be roughly 150MB due to the bundled Chromium runtime.
Finder, Spotlight, and Dock integration. A SwiftUI app built with Xcode produces a proper .app bundle the OS recognizes natively — it appears in Spotlight search, pins to the Dock, and launches in under a second. No additional packaging or configuration required.
| Component | Version |
|---|---|
| Mac | MacBook Pro Intel (x86_64) |
| macOS | Tahoe 26.x |
| Xcode | 26.4.1 (17E202) |
| Swift | 6.3.1 |
| Interface | SwiftUI |
| Deployment Target | macOS 26.0 |
| Bundle ID | com.lionelmosley.MacSysTools |
Apple Human Interface Guidelines (HIG). Every design decision follows Apple’s HIG — 13px base font size using -apple-system, native NavigationSplitView for the sidebar layout, SF Symbols for all icons, grouped form controls, and correct cursor behavior on interactive elements.
Liquid Glass sidebar. The NavigationSplitView with .listStyle(.sidebar) automatically applies Tahoe’s Liquid Glass material to the sidebar — the desktop wallpaper refracts through it exactly like Finder, Mail, and System Settings.
Native sudo elevation. Commands requiring administrator privileges use osascript with with administrator privileges — this triggers the native macOS authentication dialog. Passwords are never handled, stored, or logged by the app.
Live output streaming. The ShellRunner class uses Process() with Pipe() and readabilityHandler to stream stdout line-by-line into the UI as commands execute — no waiting for completion before seeing results.
MacSysTools/
├── MacSysToolsApp.swift — @main entry point
├── ContentView.swift — NavigationSplitView root layout
├── SidebarView.swift — Left panel, tools grouped by category
├── DetailView.swift — Right panel, routes to correct view
├── InputToolView.swift — Input fields for tools requiring parameters
├── ShellRunner.swift — Async command engine, live output streaming
├── PrivilegedRunner.swift — sudo elevation via osascript
├── Tool.swift — Master enum of all 23 tools and their properties
└── Assets.xcassets — App icon (>_ terminal prompt on dark navy)
| Tool | Command | Sudo |
|---|---|---|
| Flush DNS Cache | sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder |
Yes |
| nslookup | nslookup -type=[A/MX/TXT…] [hostname] [server] |
No |
| Wi-Fi Diagnostics | networksetup -getinfo Wi-Fi && airport -I |
No |
| Ping Host | ping -c [count] [hostname/IP] |
No |
| Traceroute | traceroute [hostname/IP] |
No |
| Renew DHCP Lease | sudo ipconfig set en0 DHCP |
Yes |
nslookupfeatures a full input form — hostname field, record type picker (A, AAAA, MX, TXT, CNAME, NS, ANY), and DNS server field pre-populated with Google’s 8.8.8.8.Ping Hostaccepts a hostname or IP and a configurable packet count.
| Tool | Command | Sudo |
|---|---|---|
| Purge Memory | sudo purge |
Yes |
| Disk Permissions | diskutil verifyPermissions / |
Yes |
| Clear System Logs | sudo rm -rf /private/var/log/asl/*.asl |
Yes |
| Rebuild Spotlight | sudo mdutil -E / |
Yes |
| Show Open Ports | sudo lsof -i -n -P \| grep LISTEN |
Yes |
| Clear Font Cache | sudo atsutil databases -remove && sudo atsutil server -shutdown |
Yes |
| Tool | Command | Sudo |
|---|---|---|
| Kill Process | killall [process name] |
No |
| Firewall Status | /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate |
No |
| Gatekeeper Status | spctl --status |
No |
| Clear App Cache | rm -rf ~/Library/Caches/* |
No |
Kill Processfeatures an input field accepting the exact process name as shown in Activity Monitor — for exampleFinder,Safari, orDock.
| Tool | Command | Sudo |
|---|---|---|
| Clear Xcode Derived Data | rm -rf ~/Library/Developer/Xcode/DerivedData |
No |
| Show Hidden Files | defaults write com.apple.finder AppleShowAllFiles -bool true && killall Finder |
No |
| Edit /etc/hosts | open -e /etc/hosts |
No |
| System Information | system_profiler SPHardwareDataType SPSoftwareDataType |
No |
| Tool | Command | Sudo |
|---|---|---|
| Enable Screen Sharing | sudo launchctl enable system/com.apple.screensharing && sudo launchctl load -w … |
Yes |
| Enable Remote Login | sudo systemsetup -setremotelogin on |
Yes |
| Enable File Sharing | sudo launchctl enable system/com.apple.smbd && sudo launchctl load -w … |
Yes |
Tahoe note: Screen Sharing on macOS Tahoe requires a user to be logged in due to a security change Apple introduced in Tahoe 26. The
launchctlcommands function correctly but the session must be active.
This project is a good example of how I think about problems. The frustration wasn’t Terminal — Terminal is powerful. The frustration was the cognitive overhead of remembering syntax for commands I use infrequently. The solution wasn’t a notes app or a cheat sheet. The solution was encoding the knowledge into a tool that eliminates the question entirely.
That’s the difference between a workaround and an architecture.