EditorExportPlatformMacOS in Godot – Complete Guide

Are you looking to distribute your Godot-created games to the macOS platform? Understanding the process of exporting can seem daunting, but with the right tools and knowledge, it becomes approachable and achievable. Get ready to learn about the EditorExportPlatformMacOS class in Godot 4, and how it empowers you to bring your gaming ideas to life for Mac users around the world.

What is EditorExportPlatformMacOS?

EditorExportPlatformMacOS is a vital class in Godot 4, specifically tailored for exporting games and applications to macOS. This class is an essential component of the Godot engine, which provides a plethora of settings to fine-tune your export according to macOS requirements and best practices.

What is it for?

The class serves as a bridge between your Godot project and the finished macOS product. It manages the intricate details needed to package your game into a form that’s compatible with macOS environments, including application signatures, entitlements for App Sandbox, and settings for notarization, ensuring your app aligns with Apple’s security protocols.

Why should I learn it?

Learning to use EditorExportPlatformMacOS is crucial for several reasons:

– **Distribution**: It’s the gateway for sharing your Godot games and apps with the Mac community.
– **Customization**: It provides the flexibility to customize export settings to your project’s requirements.
– **Compliance**: It helps ensure your projects comply with macOS standards, increasing user trust and satisfaction.

By the end of this tutorial, you will have the confidence to navigate the complexities of exporting to macOS and to bring your innovative games to an eager audience of Mac users. Let’s embark on this journey together and unlock the full potential of your Godot creations on macOS!

CTA Small Image

Setting Up Your Export Preset for macOS

To begin with, we need an export preset tailored for macOS. Let’s get started by configuring one in the Godot editor.



name="Mac OSX"
platform="Mac OSX"
patch_list=PoolStringArray(  )

The `export_presets.cfg` holds various export presets. Here we set the platform to “Mac OSX” and configured the `export_path` where the macOS package will be saved.

Configuring EditorExportPlatformMacOS

Once the preset is ready, dive into the scripting APIs to manipulate the EditorExportPlatformMacOS class for more advanced configurations.

var export_plugin = EditorExportPlatformMacOS.new()

export_plugin.export_path = "user://exports/MyGameTitle.dmg"
export_plugin.code_sign_identity = "Developer ID Application: Your Name (TEAMID)"
export_plugin.enable_app_sandbox = true
export_plugin.high_resolution = true

In this script snippet, we’re creating an instance of `EditorExportPlatformMacOS` and setting up key properties like the `export_path`, `code_sign_identity` for signing the app, and enabling App Sandbox and high-resolution display support.

Including and Excluding Resources

Deciding what to include or exclude during the export can heavily influence the size and quality of your final game package. Below, see how to define these filters:

export_plugin.include_filter = "*.png;*.gd"
export_plugin.exclude_filter = "*.psd;*.wav"

The `include_filter` will add every PNG and GD script file to the export, whereas `exclude_filter` will leave out Photoshop files and WAV audio files. Customize these parameters to fit the specific needs of your project.

Entitlements and Capabilities

If you’re leveraging macOS’s App Sandbox or other specific capabilities, you will need to define entitlements:

export_plugin.entitlements = """

This XML structure defines that we want our app to be sandboxed and to have network client permissions. Be mindful to only request entitlements that your app needs.

Handling Signatures and Notarization

To comply with macOS standards, we must handle app signatures and notarization carefully:

export_plugin.code_sign_identity = "Apple Distribution: Your Name (TEAMID)"
export_plugin.apple_team_id = "TEAMID"

Setting the `code_sign_identity` and `apple_team_id` will prepare your game for notarization by Apple, which is required for distribution through the Mac App Store or when distributing outside the store to be run on macOS Catalina and later.

Each code snippet illustrates a basic but necessary part of the macOS export process using the EditorExportPlatformMacOS class in Godot 4. It’s important to adjust these scripts to fit your game’s requirements, including adding or removing capabilities, adjusting path settings, and ensuring compliance with Apple’s latest guidelines. Stay tuned for more examples in the upcoming parts of this tutorial, where we’ll delve into optimizing your game’s export configuration further.Great, let’s proceed with the macOS export process by exploring additional code examples relevant to the `EditorExportPlatformMacOS` class that can help fine-tune your export settings even further.

Customizing the Export Process

Customizing the Info.plist for your macOS app is an essential step in ensuring that your game’s metadata is correctly set up. Here’s how to do it programmatically:

export_plugin.info_plist = """
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <string>Your Game Title</string>
    <!-- Add more keys as needed -->

By customizing the `info_plist` property, you can alter various settings such as the display name, versioning, supported device orientations, and more. This data is critical for macOS to understand how to handle and display your application.

Preserving file timestamps can be important if your game relies on file modification dates. The following line enables that functionality within the export settings:

export_plugin.preserve_file_mod_times = true

Setting `preserve_file_mod_times` to true ensures that the original modification timestamps of your files are kept intact in the exported package.

Optimizing Exported Files and File Structure

Optimizing the file sizes and the structure of your exported game can provide better loading times and smaller download sizes. Here’s how you might exclude unneeded file types:

export_plugin.exclude_filter = "*.ase;*.blender;*.import"

This snippet ensures that specific asset sources or import files that are unnecessary for running the game are not included in the final export.

Debugging symbols and information can be stripped for release versions to optimize the size of your executable:

export_plugin.strip_debug_symbols = true

Activating the `strip_debug_symbols` option removes debugging information, which is generally not needed for players and can reduce the size of your app significantly.

Ensuring High Performance and Compatibility

Enabling hardware acceleration and setting up renderers appropriately can vastly improve performance:

export_plugin.gfx_mode = "Metal"

Here, the `gfx_mode` is set to “Metal”, which is Apple’s graphics framework. This selection can leverage the full capabilities of the hardware, but it’s essential to check compatibility with the devices you aim to support.

When it comes to managing 32-bit and 64-bit architectures, it’s important to consider that newer Mac systems have shifted towards 64-bit only. However, if needed, you can still specify your architecture preference:

export_plugin.binary_format = "x86_64"

In this line, `binary_format` is set to “x86_64”, indicating that the game should be exported as a 64-bit binary, which is the standard for modern Mac computers.

Finalizing and Testing Your Export

After setting all your preferred configurations, the final step is to perform the export and test the resulting app:

var result = export_plugin.export_project(export_preset, false, "user://exports/")
if result == OK:
    print("Export succeeded!")
    print("Export failed.")

This code attempts to export the project using the settings specified earlier, and prints out the result, letting you know whether the export succeeded or failed.

Understanding and manipulating the `EditorExportPlatformMacOS` class allows a deep level of customization and optimization for your Godot projects. The provided code examples only scratch the surface, and as your projects grow in complexity, you might find yourself delving deeper into this class’s capabilities to fine-tune your exports for Mac users. Remember, a successful game isn’t just about great gameplay; attentive deployment can greatly enhance player experience.Let’s explore more functionalities provided by the `EditorExportPlatformMacOS` class, showcasing how Godot’s export system accommodates a myriad of requirements and optimizations for your macOS game builds.

Handling Icons and Images

Setting the icon for your macOS app enhances its professional appearance and brand recognition:

export_plugin.icon = "res://icon.png"

By defining the `icon` property, you instruct Godot to use a specific image file from your project as the application’s icon.

Managing Export Options Programmatically

Sometimes, you might need to adjust the export configurations dynamically based on certain conditions or preferences. For example, you can toggle on or off the embedding of the export templates:

export_plugin.embed_pck = true

This line ensures that the PCK file (which contains your game data) is embedded into the Mac binary directly, offering a neater package structure.

Optimizing for Different Screen Resolutions

It’s vital to consider users with Retina displays when targeting macOS. You can include high-resolution assets accordingly:

export_plugin.high_resolution = true

By setting `high_resolution` to true, you inform Godot to enable high-DPI mode, which uses high-res assets for sharper graphics on Retina displays.

Addressing Security and Access Permissions

In some cases, your game might need access to specific folders or system features. You can define access permissions, like for the user’s Music folder:

export_plugin.access_music_folder = true

Upon exporting, this setting allows your game to access the Music folder, assuming that you’ve handled the related user permissions and entitlements correctly.

Streamlining the Application Bundle

A clean and well-structured application bundle is more maintainable and user-friendly. You might choose to rename the executable within the app bundle for clarity or personal preference:

export_plugin.binary_name = "GameExecutable"

Here, the `binary_name` changes the name of the actual executable file inside the macOS app package.

Customizing Behavior Based on Build Types

Depending on whether you’re creating a debug or release build, you might want to enable test ads for services like AdMob:

export_plugin.use_debug_keystore = true
export_plugin.use_test_ad_units = true

These properties activate debug options for keystore and ad units, which are useful during development but should be set to false for final release builds.

Automating Localization and Translations

Lastly, if your game is multilingual, you’ll want to make sure all translations are correctly included:

export_plugin.include_all_locales = false
export_plugin.locales = [ "en", "es", "fr", "de" ]

These settings fine-tune which locale translations are included in the export, helping you manage the app size by only bundling the necessary language resources.

Each of these configurations plays a role in ensuring your macOS export meets the user’s expectations and platform’s requirements. With Godot’s robust export system and the flexibility of the `EditorExportPlatformMacOS` class, you’re well-equipped to tackle the myriad details of crafting your game for the macOS audience. With these features at your fingertips, you can ensure that each build of your game is primed for success on macOS.

Continue Your Game Development Journey with Zenva

You’ve taken important steps in mastering the macOS export process using Godot 4’s `EditorExportPlatformMacOS` class. But why stop there? At Zenva Academy, we offer a fully-fledged Godot Game Development Mini-Degree, perfect for those eager to continue building on their current knowledge. Our curriculum is designed to take you from beginner to a proficient developer, giving you hands-on experience by building actual games.

Through a series of expertly crafted courses, you’ll dive deep into everything from 2D and 3D game development to complex gameplay mechanics, bringing your creative visions to life. The Godot Engine is renowned for its simplicity and power, making our Mini-Degree an excellent pathway for both newcomers and seasoned developers looking to expand their skillset.

In addition, our extensive catalog of Godot courses covers a broad range of topics that can cater to every aspect of your learning needs. Whether you’re honing your programming chops or designing intricate game worlds, we’ve got the content to boost your career in game development.

By joining Zenva, you’ll build a robust portfolio of games, learn at your own pace, and unlock the door to new opportunities in a flourishing industry. The path to becoming a game developer is at your fingertips, so seize it with Zenva and elevate your skills to the next level.


Mastering the export process with Godot’s EditorExportPlatformMacOS is just the beginning of a thrilling journey in game development. As you expand your horizons and bring your creations to a wider audience, remember that every step you take fortifies your skills and prepares you for success. If you’ve enjoyed unlocking the secrets of macOS exports, imagine what you can accomplish with a full spectrum of game development knowledge at your fingertips.

At Zenva Academy, we’re excited to be part of your adventure. Our Godot Game Development Mini-Degree awaits eager minds ready to delve deeper into the realm of coding, game creation, and beyond. Forge ahead, keep learning, and let Zenva be the catalyst that propels your career and passions to new heights.

Python Blog Image

FINAL DAYS: Unlock coding courses in Unity, Godot, Unreal, Python and more.