This guide shows how to build and export OFS_Simulator3D for macOS on Apple Silicon (M1, M2, M3, M4, M5) and Intel Macs.
Download the correct version:
- Go to: https://godotengine.org/download/3.x/macos/
- Download: Godot Engine - .NET 3.5.3 (Mono version with C# support)
- Choose the ARM64 version for Apple Silicon or x86_64 for Intel
Installation:
# Extract the downloaded .zip file
unzip Godot_v3.5.3-stable_mono_osx.universal.zip
# Move to Applications
mv Godot_mono.app /Applications/
# Create command-line alias (optional but recommended)
echo 'alias godot="/Applications/Godot_mono.app/Contents/MacOS/Godot"' >> ~/.zshrc
source ~/.zshrcGodot Mono requires either .NET SDK or Mono runtime for C# compilation.
Option 1: Install .NET SDK (Recommended)
# Download from Microsoft
# https://dotnet.microsoft.com/download
# Or install via Homebrew
brew install --cask dotnet-sdkOption 2: Install Mono
brew install monoVerify installation:
dotnet --version
# or
mono --version-
Open the project:
cd /path/to/OFS_Simulator3D open -a Godot_mono.app project.godot -
Wait for C# solution to build:
- Godot will automatically detect the C# project
- Wait for the initial build to complete (bottom panel)
- You'll see "Build succeeded" when ready
-
Add macOS Export Preset:
- Go to Project → Export
- Click Add... → macOS
- Configure the preset:
- Name: macOS (ARM64) or macOS (Universal)
- Runnable: ✓ Enabled
- Export Path: Choose destination (e.g.,
../Export/OFS3D/macos/FunscriptSimulator3D.app) - Architectures: Select ARM64 for Apple Silicon, or Universal for both
-
Export the project:
- Click Export Project
- Choose your export path
- Click Save
-
Run the app:
open ../Export/OFS3D/macos/FunscriptSimulator3D.app
-
Build the C# project first:
cd /path/to/OFS_Simulator3D # Open project to trigger C# build, then close godot --path . --editor --quit
-
Add macOS export template (see
export_presets.cfgsection below) -
Export via command line:
# Export for macOS godot --path . --export "macOS" ../Export/OFS3D/macos/FunscriptSimulator3D.app
Add this to your export_presets.cfg file:
[preset.2]
name="macOS"
platform="macOS"
runnable=true
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="../Export/OFS3D/macos/FunscriptSimulator3D.app"
script_export_mode=1
script_encryption_key=""
[preset.2.options]
custom_template/debug=""
custom_template/release=""
application/icon="res://favicon.png"
application/identifier="com.zestyraraferu.funscriptsimulator3d"
application/signature=""
application/app_category="Games"
application/short_version="1.6"
application/version="1.6"
application/copyright=""
display/high_res=true
privacy/camera_usage_description=""
privacy/microphone_usage_description=""
codesign/enable=false
codesign/identity=""
codesign/timestamp=true
codesign/hardened_runtime=true
codesign/replace_existing_signature=true
codesign/entitlements/custom_file=""
codesign/entitlements/allow_jit_code_execution=false
codesign/entitlements/allow_unsigned_executable_memory=false
codesign/entitlements/allow_dyld_environment_variables=false
codesign/entitlements/disable_library_validation=false
codesign/entitlements/audio_input=false
codesign/entitlements/camera=false
codesign/entitlements/location=false
codesign/entitlements/address_book=false
codesign/entitlements/calendars=false
codesign/entitlements/photos_library=false
codesign/entitlements/apple_events=false
codesign/entitlements/debugging=false
codesign/entitlements/app_sandbox/enabled=false
codesign/entitlements/app_sandbox/network_server=false
codesign/entitlements/app_sandbox/network_client=false
codesign/entitlements/app_sandbox/device_usb=false
codesign/entitlements/app_sandbox/device_bluetooth=false
codesign/entitlements/app_sandbox/files_downloads=0
codesign/entitlements/app_sandbox/files_pictures=0
codesign/entitlements/app_sandbox/files_music=0
codesign/entitlements/app_sandbox/files_movies=0
codesign/custom_options=PoolStringArray( )
notarization/enable=false
notarization/apple_id_name=""
notarization/apple_id_password=""
notarization/apple_team_id=""
texture_format/s3tc=true
texture_format/etc=false
texture_format/etc2=falseGodot 3.5.3 Mono has native ARM64 support and runs without Rosetta 2. Export as:
- ARM64 only - Smallest size, best performance on Apple Silicon
- Universal Binary - Works on both ARM64 and Intel (larger file size)
Use the x86_64 version of Godot 3.5.3 Mono, or use Universal Binary exports.
macOS Gatekeeper will block unsigned apps. To run:
Method 1: Right-Click Open
- Right-click the app → Open
- Click Open in the dialog
Method 2: Remove Quarantine
xattr -cr /path/to/FunscriptSimulator3D.appIf you see C# compilation errors:
-
Check .NET/Mono installation:
dotnet --version mono --version
-
Regenerate C# solution:
- In Godot Editor: Build → Clean Solution
- Then: Build → Build Solution
-
Check Godot's Mono installation:
- Editor → Editor Settings → Mono → Builds
- Verify the Build Tool is set correctly
If export fails with "Missing export templates":
-
Download templates:
- In Godot Editor: Editor → Manage Export Templates
- Click Download and Install
-
Or download manually:
- Go to: https://godotengine.org/download/3.x/
- Download "Export templates" for 3.5.3
- Install via Godot Editor
OFS_Simulator3D/
├── Main.tscn # Main scene
├── Simulator3D.cs # Core simulator logic
├── Funscript.cs # Funscript file handling
├── BorderlessWindow.cs # Window management
├── ResizeHandle.cs # Window resizing
├── InputListener.gd # Input handling (GDScript)
├── LineDrawer.gd # Line rendering (GDScript)
├── project.godot # Godot project config
├── export_presets.cfg # Export configurations
└── FunscriptSimulator3D.csproj # C# project file
- Apple Silicon: Native ARM64 export provides best performance
- Universal Binary: Works on all Macs but ~2x file size
- Intel: Use x86_64 export or Universal Binary
This simulator is designed to work with OpenFunscripter (OFS):
- Build/export the simulator
- In OFS, configure the simulator path to point to the exported
.app - OFS will launch the simulator and communicate via WebSocket
- Godot Documentation: https://docs.godotengine.org/en/3.5/
- Godot C# Guide: https://docs.godotengine.org/en/3.5/tutorials/scripting/c_sharp/
- OFS Documentation: Check the main OpenFunscripter repository