The Frustration of a Broken simctl
I was halfway through a React Native build today when I tried to boot a simulator. Instead of the usual device list, the terminal spat out this annoying error:
xcrun: error: unable to find utility "simctl", not a developer tool or in PATH
You'll typically see this after an Xcode update or when jumping between Stable and Beta versions (like moving from Xcode 15 to Xcode 16). It's a classic configuration mismatch. If you rely on the command line for your iOS workflow, this error is a total showstopper. It blocks you from booting simulators, installing builds, or even listing available devices.
Why is this happening?
The issue isn't that simctl is missing from your Mac. The real culprit is xcrun—the helper that finds developer tools—losing track of your active Xcode directory.
Most systems default to the standalone Command Line Tools path at /Library/Developer/CommandLineTools. These are fine for basic git or C++ tasks, but they don't include simctl. That specific utility lives exclusively inside the full Xcode.app bundle. If your path points to the standalone tools, xcrun comes up empty-handed and throws the error.
The Quick Fix: Point to Xcode.app
The 30-second fix is to manually point xcode-select to your main Xcode installation. Since most devs keep Xcode in the Applications folder, run this command:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
Type in your Mac's password when prompted. Once that's done, test if simctl is back online:
xcrun simctl list devices
If a list of simulators appears, you've solved it.
Permanent Fix via Xcode Settings
Rather use the mouse? You can also toggle this setting inside Xcode’s UI to ensure it sticks after a reboot or a system update.
- Open Xcode.
- Press
Cmd + ,to open Settings. - Click the Locations tab.
- Find the Command Line Tools dropdown at the bottom.
- Select your actual Xcode version (e.g., "Xcode 15.4 (15F31d)").
Selecting the version here does the exact same thing as the sudo command, but it's a great way to confirm Xcode actually recognizes your installation.
Working with Multiple Xcode Versions
Mobile devs often juggle multiple versions, like Xcode-16-Beta.app and the stable Xcode.app. Every time you swap, your command-line path might lose its way. It’s a common headache.
I save time by adding these aliases to my .zshrc file. No more typing long paths every time a new Beta drops:
alias use-xcode-stable='sudo xcode-select -s /Applications/Xcode.app/Contents/Developer'
alias use-xcode-beta='sudo xcode-select -s /Applications/Xcode-beta.app/Contents/Developer'
Now, whenever I switch projects, I just type use-xcode-stable and my tools are instantly aligned.
Verifying the Fix
Run these three checks to confirm your setup is solid:
- Check the path: Run
xcode-select -p. It should return/Applications/Xcode.app/Contents/Developer. - Test simctl: Run
xcrun simctl help. You should see the documentation, not an error. - Check the version: Run
xcodebuild -versionto make sure you're using the version you expect.
Still not working?
Sometimes xcrun is just stubborn, especially if you recently moved Xcode.app into a subfolder or renamed it. Try resetting the path entirely and then setting it again:
sudo xcode-select --reset
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
Finally, check if a DEVELOPER_DIR environment variable is overriding your settings. Run echo $DEVELOPER_DIR. If a path pops up, delete that line from your .zshrc or .bash_profile. It’s better to let xcode-select handle the heavy lifting naturally.

