← Back to Devlog
July 30, 2026 • Apple Architectures & Xcode

Overcoming Apple Silicon Simulator Linker Impedance

The iOS Simulator arm64 Linker Error: When compiling iOS projects exported from Godot on modern Apple Silicon (M1/M2/M3) Macs, developers frequently hit a compiler wall. Attempting to build and test the project on the standard Xcode iOS Simulator targets leads to a blocker linker error: building for iOS Simulator, but linking in object file built for iOS, file for architecture arm64.

The Root Cause: The compiled game library (libgodot.ios.template_release.arm64.a) contains a pre-compiled arm64 static binary slice targeted for physical iOS Devices (the physical arm64 instruction set). While Apple Silicon Macs also run natively on arm64 architectures, Xcode's iOS Simulator requires a specialized arm64-simulator binary slice with distinct system headers and framework alignments. Because the pre-compiled template lacks this simulator slice, the compilation fails.

The Native Solution: "My Mac (Designed for iPad)"

Instead of wasting days attempting to re-compile Godot's static templates with custom simulator slices, we bypass the simulator layer altogether. We leverage Xcode's native **"My Mac (Designed for iPad)"** execution target. This build target compiles the application using the physical **Device (arm64)** static library slice of libgodot.a, while running the application inside a fully responsive iOS canvas frame directly on the macOS desktop:

# Force Xcode target compilation to native arm64 Mac architecture
xcodebuild -project MazePoint.xcodeproj \
           -scheme "MazePoint" \
           -destination "platform=macOS,variant=Designed for iPad" \
           build

Xcode Project File Configuration

To ensure the project builds successfully, we modify the platform targets and architecture exclusions in the project's build settings under project.pbxproj:

// Set Xcode architecture search parameters to exclude simulator slices on Apple Silicon
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64";
"VALID_ARCHS" = "arm64";
"SUPPORTS_MAC_DESIGNED_FOR_IPAD" = "YES";

Applying this configuration enables identical performance characteristics to real hardware, supporting dynamic window resizing, full keyboard inputs, and high-framerate real-time synthesis without any simulator emulation overhead.