Guide

Export a Godot game to iOS without owning a Mac

Godot's iOS export turns your game into an Xcode project. Xcode then builds, signs and uploads the app, and Xcode only runs on macOS. We ran the whole chain on GitHub Actions on October 19, 2026, with Godot 4.7.2. The export step worked on Windows and Linux too. The Xcode step needed the Mac.

What the docs say, and what we saw

The Godot 4.7 iOS page says you must export from a Mac with Xcode installed. In our test, the Windows and Linux editors wrote the Xcode project anyway. They printed this warning and stopped there:

WARNING: Xcode Build: .ipa can only be built on macOS. Leaving Xcode project without building the package.
WARNING: Project export for preset "iOS" completed with warnings.

We copied each project to a Mac and built it for a device. All three builds passed. Treat this as a tested shortcut, not an official feature. Our test game had no plugins and no C# code. Godot's source says C# projects must export for iOS from macOS.

Step 1: export templates

The exporter needs the export templates for your exact Godot version. In the editor, open Editor, then Manage Export Templates, and download them. The 4.7.2 file is about 1.3 GB. On a server with no screen, unzip the .tpz yourself. These are the folders we used:

# macOS
~/Library/Application Support/Godot/export_templates/4.7.2.stable
# Linux
~/.local/share/godot/export_templates/4.7.2.stable
# Windows (Git Bash)
$APPDATA/Godot/export_templates/4.7.2.stable

Step 2: the iOS export preset

Open Project, then Export, click Add and pick iOS. Two fields are required. App Store Team ID is the 10 character code from your Apple Developer account, not your name. Bundle Identifier is your app's ID, like com.example.mygame. Godot saves the preset in export_presets.cfg. This is the part of ours that mattered:

# export_presets.cfg
[preset.0]
name="iOS"
platform="iOS"
runnable=true
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="export/GodotDemo.ipa"

[preset.0.options]
application/app_store_team_id="ABCDE12XYZ"
application/bundle_identifier="com.example.godotdemo"
application/export_project_only=true

# project.godot, two settings the export needed
[application]
config/icon="res://icon.svg"

[rendering]
textures/vram_compression/import_etc2_astc=true

Export Project Only tells Godot to write the Xcode project and stop. Without it, Godot on a Mac runs xcodebuild itself to make an archive and an .ipa. That needs real signing, so start with the project only.

Step 3: export from the command line

The preset name goes in quotes. The output path is relative to the folder that holds project.godot.

godot --headless --path demo --export-release "iOS" export/GodotDemo.ipa

The export took about 9 seconds on Linux and 21 on Windows. It wrote GodotDemo.xcodeproj, a GodotDemo folder, the .pck with your game data and the engine as GodotDemo.xcframework.

Two errors cost us a run each:

  • With no project icon, export fails with Invalid icon (icons/settings_58x58). Set an icon in Project Settings.
  • Without ETC2/ASTC texture import, export fails with an empty "configuration errors" message. Turn on Import ETC2 ASTC under Rendering, Textures, VRAM Compression.

Step 4: build on the Mac

Push the exported folder to git, or copy it with scp. On the Mac, this builds it for a device with signing turned off:

xcodebuild -project GodotDemo.xcodeproj -scheme GodotDemo \
  -configuration Release -sdk iphoneos \
  -destination 'generic/platform=iOS' \
  -derivedDataPath build build CODE_SIGNING_ALLOWED=NO

It finished in under 25 seconds and made an 82 MB app. To ship it, open GodotDemo.xcodeproj in Xcode. Pick your team under Signing and Capabilities, then choose Product, then Archive. Our publishing guide covers the upload.

The Simulator catch

A normal simulator build failed to link. The official template ships its simulator engine library for Intel (x86_64) only. On an Apple silicon Mac, Xcode looks for arm64 and stops with this error:

Undefined symbols for architecture arm64:
  "_main", referenced from:

Building for x86_64 worked. The app then ran in the iPhone 17 Pro simulator through Rosetta and showed our empty gray scene. Godot's docs add that the simulator only supports the Compatibility renderer.

xcodebuild -project GodotDemo.xcodeproj -scheme GodotDemo \
  -configuration Release -sdk iphonesimulator \
  -destination 'generic/platform=iOS Simulator' ARCHS=x86_64 ONLY_ACTIVE_ARCH=NO \
  -derivedDataPath build build CODE_SIGNING_ALLOWED=NO

For real speed and touch input, test on a phone with TestFlight. A remote Mac cannot see an iPhone plugged into your PC.

A Mac for the Xcode step

A MacRun day pass is a dedicated M6 Mac mini for $15, or $59 for a week. Xcode 27.1 is installed, and Xcode 26.6 for older projects. Godot is not preinstalled. You have admin rights and Homebrew, so you install the version that matches your editor. You work over SSH or screen sharing from Windows. The Mac is wiped at the end, so push your work first. For screen tips, see Xcode from Windows.

Who should not rent a Mac for this

If you only need an unsigned build check, run the commands above on GitHub Actions macOS runners. Our five jobs passed there with no Mac of our own. Codemagic gives individuals 500 free macOS M2 minutes a month, per its pricing page on October 19, 2026. If you ship every week for years, a used Mac may cost less than renting. Rent when you need Xcode open: signing errors, the Simulator, or an archive to upload.

Frequently asked questions

Can Godot export to iOS on Windows?

+

Godot's docs say to export from macOS. In our October 2026 test, Godot 4.7.2 on Windows and Linux still wrote the Xcode project. It warned that the .ipa can only be built on macOS. A Mac then built it.

Do I need a Mac to publish a Godot game on the App Store?

+

Yes, for the last step. Xcode builds, signs and uploads the app, and Xcode only runs on macOS. A rented Mac or a macOS CI runner covers that step.

What is the App Store Team ID in Godot's iOS export?

+

It is the 10 character code of your Apple Developer team, like ABCDE12XYZ. It is not your name. The Godot docs say you find it on developer.apple.com, next to your name.

Why does my Godot iOS simulator build fail with undefined symbol _main?

+

In our test the official 4.7.2 template had an x86_64-only simulator library. On an Apple silicon Mac, add ARCHS=x86_64 to the xcodebuild command. The app then runs through Rosetta.

Where do Godot export templates go on a headless machine?

+

Unzip the .tpz and rename its templates folder to the version, such as 4.7.2.stable. On macOS put it in ~/Library/Application Support/Godot/export_templates. On Linux use ~/.local/share/godot/export_templates.

Can I export a C# Godot project to iOS from Windows?

+

No. Godot's source code blocks C# iOS export on systems other than macOS. Godot also calls C# on iOS experimental. Export C# projects on the Mac.

Related guides