CLI tool
twostraws/ControlRoom avatar
twostraws/ControlRoom

Control Room: A macOS Front End for Xcode's simctl

A macOS app to control the Xcode Simulator.

6,104 stars320 forksSwiftMIT

At a glance

What is it?
Control Room wraps Apple's simctl command line tool in a SwiftUI app for changing simulator appearance, status bar, location and app state. It is built from source in Xcode, and its value depends on how much of your simulator workflow currently happens in Terminal.
Who is it for?
Adopt Control Room if your simulator work is mostly visual tweaking: status bar overrides, dark mode, Dynamic Type, screenshots with bezels, and app data folders. Skip it if your workflow is already scripted around simctl, because the app does not replace the command line and adds a build step.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 178 days ago.
What is it written in?
Mainly Swift, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Control Room Does That simctl Does Not Do For You

Apple's simctl is a command line tool that ships with Xcode. It can boot simulators, install apps, override the status bar, set a location, and take screenshots. The problem is not capability, it is recall. Each of those operations is a subcommand with its own flags, and you reach for them in the middle of a UI task when your attention is on the simulator, not on a shell. Control Room is a macOS app that puts those operations behind a graphical interface. The README describes it as wrapping Apple's own simctl, so the underlying work still goes through the same tool. The intended user is an app developer on a Mac who already has Xcode and wants to change simulator state without composing commands. The feature list in the README is broad: screenshots and movies with optional device bezels, system time and date including Apple's preferred 9:41, WiFi, cellular and battery status, opening the app data folder, editing UserDefaults, overriding dark or light mode, language, accessibility options and Dynamic Type size, a custom user location, starting and stopping apps, installing and removing them, sending test push notifications, triggering deep links, and picking colors from the simulator and converting them to UIKit or SwiftUI code. There is also an optional menu bar icon for repeating the last push notification or the last deep link.

How the App Sits on Top of simctl

The architecture is a thin client, not a reimplementation. Control Room is written in SwiftUI, and the README states plainly that it relies on the simctl command being present. That means the app does not talk to the simulator through a private framework or a socket. It shells out to the same binary you would type into Terminal. Two consequences follow. First, anything simctl cannot do, Control Room cannot do either. Second, when a command fails, the failure surfaces as a simctl error, and the README's contribution guide names error handling as the first suggested area for help, repeating it for emphasis. That is an admission that error reporting is not the finished part of the project. The repository layout matches the description: ControlRoom.xcodeproj for the project, ControlRoom/ for the app sources, ControlRoomTests/ for tests, and a Working/ directory. There is a .swiftlint.yml at the top level, which is the configuration for the linter the contribution guide requires contributors to run. Because there is no server component and no background daemon, the state you see in the app is whatever the simulator currently reports when the app asks.

Installing Control Room and Taking a First Screenshot

There is no package manager step in the README and no released binary is described. The installation instructions say to download the code and build it through Xcode. You need Xcode 14.0 or later, and the README notes macOS Big Sur for running it, while the badge at the top of the README states macOS 13 and later. If you see an error about missing command line tools, the README gives the fix: open Xcode's Preferences, go to the Locations tab, and make sure Xcode is selected for Command Line Tools. Once the app builds and runs, the first useful action is a screenshot with the device bezel. In the app, choose the simulator you want, then use the screenshot control and enable the bezel option. If you would rather confirm the underlying tool works before opening the app, run the version check from a terminal.

Where Control Room Stops Being the Right Tool

Control Room is a single-user desktop app for interactive work. It is the wrong choice for anything that runs unattended. If you need to boot a simulator, install a build and capture a screenshot inside continuous integration, the app has nothing to offer, because there is no documented command line interface or automation entry point. You would call simctl directly, which is what the app does anyway. The same applies to scripted test runs and to any workflow where the simulator is one step in a pipeline rather than the thing you are looking at. A second limitation is the build requirement. The README offers no download of a compiled app, so every user compiles the project themselves and needs a working Xcode installation to do it. That is a real cost for a tool whose whole purpose is convenience. Third, the README does not document rollback. If you override the status bar, the time, the location or the appearance and then want the simulator back to its defaults, the README does not say which control restores them. The contribution guide also states that tests are welcome but might be tricky given the underlying use of simctl, which tells you the project's own test coverage is thin.

Control Room Against Driving simctl by Hand

The obvious alternative is simctl itself, used directly from a shell. The difference is not feature coverage but where the knowledge lives. With simctl, the commands are text you can put in a script, review in a pull request, and run on a build machine. With Control Room, the same operations are clicks, which is faster when you are iterating on a layout and useless when you are not at the keyboard. A middle path exists and the README does not mention it: use simctl for anything repeatable, and keep Control Room for the interactive cases it was built around, such as trying a status bar at 9:41 for a screenshot, checking a layout at a larger Dynamic Type size, or pulling a color out of the simulator into SwiftUI code. Another adjacent option is Xcode's own simulator menus, which cover appearance and some device state but not the status bar overrides, the custom location, or the UserDefaults editing that Control Room exposes. The honest framing is that Control Room is a convenience layer over a tool you already have, and convenience layers earn their place only if you use them often.

Maintenance, Licence and the Cost of Upgrading

The repository is not archived, and the last push was on 2026-04-05. The README lists no releases, so there is no versioned upgrade path to follow and no changelog to read before pulling changes. Upgrading means pulling the source and rebuilding in Xcode, and the practical risk is drift with Apple's tooling: Control Room calls simctl, so a change in simctl's behaviour or in the Xcode version it ships with can break a feature without any change in this repository. The README already pins a floor of Xcode 14.0, and the badge states macOS 13 and later, so older machines are out. The licence is MIT, which permits commercial and private use, modification and redistribution provided the copyright notice and permission notice are included; the README points to the LICENSE file for the full text. Swift, the Swift logo and Xcode are trademarks of Apple, and the README notes that Control Room is built on simctl and credits that team. This is a description of the licence terms, not legal advice; if you redistribute a modified build, read the LICENSE file yourself. Contributors should note the README's requirement that SwiftLint return no errors or warnings before changes are sent.

Editorial conclusion

Adopt Control Room if your simulator work is mostly visual tweaking: status bar overrides, dark mode, Dynamic Type, screenshots with bezels, and app data folders. Skip it if your workflow is already scripted around simctl, because the app does not replace the command line and adds a build step. Before relying on it, check that Xcode 14.0 or later is installed, that Command Line Tools points at Xcode in the Locations tab, and that SwiftLint passes if you plan to send changes upstream.

Frequently asked questions

What does Control Room do?

It is a macOS app that controls the simulators for iOS, tvOS and watchOS, covering UI appearance, status bar configuration, location, app installation and removal, screenshots and movies, and more. It works by wrapping Apple's simctl command line tool.

How do I install Control Room?

The README says to download the code and build it through Xcode, with Xcode 14.0 or later required. No prebuilt download is described, and the app relies on the simctl command being present.

What do I need installed before Control Room will work?

You need Xcode, because Control Room depends on the simctl command. If you get an error that the command line tools are missing, the README says to open Xcode's Preferences, choose the Locations tab, and make sure Xcode is selected for Command Line Tools.

Does Control Room have a command line interface for automation?

The README does not document a command line interface or any automation entry point. It describes a SwiftUI macOS app, and the underlying simctl command is what you would call directly for scripted or unattended work.

What licence is Control Room released under?

It is licensed under the MIT license, and the README points to the LICENSE file for the full text. The README also notes that Control Room is built on Apple's simctl command.

Official sources

  1. Issues
  2. License: MIT
  3. README
  4. twostraws/ControlRoom on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/twostraws-controlroom.svg)](https://hysenlabs.com/projects/twostraws-controlroom)