tauri-apps/tauri · error · tauri_cli::error::Error
Arch specified by Xcode was invalid. {arch} isn't a known ar
Error message
Arch specified by Xcode was invalid. {arch} isn't a known arch What it means
The Xcode script helper maps each architecture Xcode asks it to build (from ARCHS) onto a Rust target triple: arm64 on device -> aarch64-apple-ios, arm64 on simulator -> aarch64-apple-ios-sim, x86_64 -> x86_64-apple-ios. Any other value in ARCHS falls through to this bail, meaning Xcode requested an architecture Tauri cannot compile for.
Source
Thrown at crates/tauri-cli/src/mobile/ios/xcode_script.rs:225
} else {
"x86_64"
}
.to_string()]
} else {
options.arches
};
let installed_targets =
crate::interface::rust::installation::installed_targets().unwrap_or_default();
for arch in arches {
// Set target-specific flags
let (env_triple, rust_triple) = match arch.as_str() {
"arm64" if !simulator => ("aarch64_apple_ios", "aarch64-apple-ios"),
"arm64" if simulator => ("aarch64_apple_ios_sim", "aarch64-apple-ios-sim"),
"x86_64" => ("x86_64_apple_ios", "x86_64-apple-ios"),
_ => {
crate::error::bail!("Arch specified by Xcode was invalid. {arch} isn't a known arch")
}
};
let interface = AppInterface::new(&tauri_config, Some(rust_triple.into()), dirs.tauri)?;
let cflags = format!("CFLAGS_{env_triple}");
let cxxflags = format!("CFLAGS_{env_triple}");
let objc_include_path = format!("OBJC_INCLUDE_PATH_{env_triple}");
let mut target_env = host_env.clone();
target_env.insert(cflags.as_ref(), isysroot.as_ref());
target_env.insert(cxxflags.as_ref(), isysroot.as_ref());
target_env.insert(objc_include_path.as_ref(), include_dir.as_ref());
let target = if macos {
&macos_target
} else {
Target::for_arch(if arch == "arm64" && simulator {
"arm64-sim"View on GitHub (pinned to 52e4b6e71d)
Solutions
- In the target's Build Settings set ARCHS to exactly `arm64` (device/simulator) and/or `x86_64` (Intel simulator); delete custom ARCHS entries so the default applies.
- Use EXCLUDED_ARCHS to remove unwanted arches (e.g. EXCLUDED_ARCHS[sdk=iphonesimulator*] = i386) instead of rewriting ARCHS.
- If a script forwards ARCHS to the tauri xcode-script phase, sanitize it to the supported set first.
- Verify with `xcodebuild -showBuildSettings -scheme <scheme> | grep ARCHS`.
Example fix
// before (Build Settings) ARCHS = armv7 arm64 // error: Arch specified by Xcode was invalid. armv7 isn't a known arch // after ARCHS = arm64 EXCLUDED_ARCHS[sdk=iphonesimulator*] = i386
Defensive patterns
Strategy: validation
Validate before calling
# In a pre-build script, validate ARCHS forwarded to the tauri phase for a in $ARCHS; do case "$a" in arm64|x86_64) ;; *) echo "unsupported ARCHS entry: $a"; exit 1;; esac done
Prevention
- Leave ARCHS at Xcode defaults; use EXCLUDED_ARCHS to trim architectures.
- Audit xcconfig files from third-party SDKs for ARCHS overrides.
- Check `xcodebuild -showBuildSettings | grep ARCHS` when adding new dependencies.
When it happens
Trigger: The ARCHS build setting (or a value derived from it, e.g. in a Universal build or after filtering by EXCLUDED_ARCHS) contains something other than arm64/x86_64 — such as arm64e, armv7, arm64_32, i386, or a malformed value. Also occurs when building a watchOS-adjacent scheme against the iOS project.
Common situations: Manually setting ARCHS in Build Settings; third-party xcconfig files injecting extra architectures; Xcode's 'Standard Architectures' resolving unexpectedly on unusual SDKs; fat/universal build scripts that forward ARCHS verbatim.
Related errors
- iOS platform not installed
- SDK root provided by Xcode was invalid. {} doesn't exist or
- Include dir was invalid. {} doesn't exist or isn't a directo
- Invalid SDK root {}
- Library not found at {}. Make sure your Cargo.toml file has
AI-assisted analysis of tauri-apps/tauri@52e4b6e71d (2026-08-20).
Data as JSON: /api/errors/9c429869ff8e91a0.
Report an issue: GitHub.