Fix: Xcode Command PhaseScriptExecution Failed (Cursor)
AI builders write the app, then Xcode chokes on a build script you did not write. The error is scary but the causes are a short, fixable list.
TL;DR
The Xcode error Command PhaseScriptExecution failed with a nonzero exit code means a run-script build phase failed, not your Swift code. From Cursor-generated projects the usual causes are script sandboxing (ENABLE_USER_SCRIPT_SANDBOXING), a missing tool or PATH (node, a CLI), CocoaPods or Expo scripts, or missing input and output file lists. Read the real error above the red line, fix the specific cause, and starting from a clean reference avoids most of them.
Hitting Command PhaseScriptExecution failed with a nonzero exit code in Xcode after generating code with Cursor? The short answer: this is not your Swift code, it is a run-script build phase failing, and the causes are a short, fixable list. Read the real error in the build log, match it to a cause below, and apply the fix. Starting clean, for example building the UI from a free VP0 design and keeping a standard project layout, prevents most of these in the first place.
Who this is for
This is for people building iOS apps with Cursor and other AI tools who get a red build failure pointing at a script phase rather than a line of Swift, and want to know what actually broke.
Read the real error first
The red “Command PhaseScriptExecution failed with a nonzero exit code” line is a summary, not the cause. Open the build log, expand the failed Run Script phase, and read the message printed just above it. That line, “command not found,” “operation not permitted,” “pod: not found,” is the truth. The Apple guide to running custom scripts during a build explains how these phases work, and the Xcode build system documentation covers where to find the log. Never debug the summary line; debug the message above it.
| Symptom in the log | Likely cause | Fix |
|---|---|---|
| sandbox or “operation not permitted” | Script sandboxing blocks file writes | Set ENABLE_USER_SCRIPT_SANDBOXING to No, or declare input and output files |
| ”command not found” / node missing | Tool not on Xcode’s PATH | Use absolute paths or source the right environment in the script |
| ”pod: not found” | CocoaPods not installed or wrong shell | Install pods, run pod install, open the .xcworkspace |
| ”No such file or directory” | Missing input or output file list | Add the script’s input and output files |
| Expo or RN script fails | Stale node_modules or cache | Reinstall, clear Metro and derived data |
The fixes that actually work
For sandboxing, the quick fix is setting ENABLE_USER_SCRIPT_SANDBOXING to No in build settings, but the clean fix is declaring the script’s input and output files so it runs inside the sandbox. For a missing tool, AI-generated scripts often assume node or a CLI is on the PATH, which Xcode does not inherit, so use absolute paths or explicitly source the environment. For CocoaPods, make sure pods are installed and you opened the .xcworkspace, not the .xcodeproj. After any fix, clean the build folder and clear derived data so you are not chasing a cached failure.
Build cleaner so it happens less
Most of these errors come from AI builders bolting on build phases that assume a setup you do not have. Keep the project standard: a conventional structure, scripts added deliberately with declared inputs and outputs, and dependencies installed before you build. Building the UI from a clean reference like a free VP0 design keeps the project predictable, so Xcode has fewer surprise phases to fail on. For related AI-build-error fixes, see the Xcode command phase script failed fix, an Expo EAS build failed with CocoaPods on AI-generated code, a Lovable export missing Info.plist in Xcode, and Cursor rules for a SwiftUI native mobile template. When you do ship, remember the Apple Developer Program is $99 a year, so get the build green well before submission.
Common mistakes
The first mistake is debugging the red summary line instead of the real error above it. The second is disabling sandboxing blindly when declaring files is the proper fix. The third is assuming Xcode inherits your terminal PATH; it does not. The fourth is opening the .xcodeproj when CocoaPods needs the .xcworkspace. The fifth is not clearing derived data, so you keep seeing a cached failure after you already fixed it.
Key takeaways
- The error is a build script failing, not your Swift code; read the message above the red line.
- From Cursor code the usual causes are sandboxing, a missing PATH tool, CocoaPods, or missing file lists.
- Fix the specific cause; for sandboxing, declaring input and output files beats disabling it.
- Clean the build folder and derived data after a fix to avoid chasing a cached error.
- Start from a clean reference like a free VP0 design so fewer surprise phases exist.
Sources
- Apple Xcode documentation: the official toolchain for building and signing iOS apps.
- React Native architecture overview: how React Native renders real native views.
- Metro bundler troubleshooting: fixing the React Native JavaScript bundler.
Frequently asked questions
What does Command PhaseScriptExecution failed mean in Xcode? A run-script build phase exited with a nonzero code, so the failure is in a script, not your Swift. Read the actual error above the red summary line.
Why do I get this error from Cursor AI generated code? AI builders add or assume build scripts without the matching setup. Common causes are sandboxing, a missing PATH tool like node, or missing file lists.
How do I fix script sandboxing errors in Xcode? Set ENABLE_USER_SCRIPT_SANDBOXING to No, or better, declare the script’s input and output files so it works within the sandbox.
How do I avoid these build errors in the first place? Start from a clean, known-good project, add scripts deliberately, and build the UI from a free VP0 design so the structure stays standard.
Frequently asked questions
What does Command PhaseScriptExecution failed mean in Xcode?
It means a run-script build phase exited with a nonzero code, so the failure is in a build script, not your Swift code. Expand the failed phase in the build log and read the actual error printed above the red summary line, that message tells you the real cause.
Why do I get this error from Cursor AI generated code?
AI builders often add or assume build scripts (CocoaPods, Expo, a CLI step) without the matching setup. Common causes are script sandboxing blocking file access, a missing tool or PATH like node, or missing input and output file lists. Fix the specific cause the log names.
How do I fix script sandboxing errors in Xcode?
If the log mentions sandbox or a denied file operation, set ENABLE_USER_SCRIPT_SANDBOXING to No in build settings, or rewrite the script to declare its input and output files so it works within the sandbox. Declaring files is the cleaner long-term fix.
How do I avoid these build errors in the first place?
Start from a clean, known-good iOS project and add scripts deliberately. Building the UI from a free VP0 design and keeping the project structure standard means fewer surprise build phases for Xcode to choke on.
Part of the App Store Publishing, Build Errors & Deployment hub. Browse all VP0 topics →
Keep reading
Fix: Missing Apple Team ID Error in Xcode (AI Code)
AI-generated iOS project throwing a missing Team ID or code-signing error? Here are the real causes in auto-generated configs and the fixes to ship a signed build.
Testing APNs Push Notifications on the iOS Simulator
You can test push notifications on the iOS Simulator now. Here is how to send an APNs payload to the simulator, what works, and what still needs a real device.
Cursor to TestFlight: The Full Tutorial
Built an app in Cursor and want testers on it? Here is the full Cursor-to-TestFlight path: build, sign, archive, upload, and invite, step by step.
Rork Xcode Build Failed: The Solution, Step by Step
Rork export failing to build in Xcode? Here are the real causes, pods, signing, Info.plist, and node paths, and the fixes to get a green build.
How to Export a Rork App to Xcode (Como Exportar)
Exporting a Rork app to Xcode (como exportar Rork a Xcode)? Here is the path, the common errors, and how to get a clean build that runs on a device.
Why FlutterFlow Layouts Break in Xcode, and the Fix
FlutterFlow layout looks right in the builder but breaks on a real iPhone? Here is why, safe areas, constraints, fonts, and how to prompt a reliable fix.