reckfellENGINE

Exporting a project for macOS

Templates, C# and architectures, signing, notarization and final .app validation.

On this page

Expected output

A Game.app bundle containing the executable, resources and project libraries. An .app is a directory with an internal layout, not a single file. Choose ZIP when transferring from Windows: directly copying an .app from Windows does not preserve Unix executable permissions.

This workflow exports a project. Building the editor and templates is covered in compiling for macOS.

Prepare the export

  1. Check that the project and its main level run in the editor. For C#, resolve build errors first.
  2. Prepare macOS templates for your particular Reckfell 1.0.0 build. The exporter looks for macos.zip; a Windows editor archive is not a substitute. For a custom build set the preset's custom_template/debug and custom_template/release archives. Matching version numbers alone do not establish matching modules and SDKs.
  3. Add a macOS preset in the project export dialog. Set application/bundle_identifier, for example com.yourstudio.yourgame, and keep it stable between releases of the same game. The displayed application name is a separate setting.
  4. Choose binary_format/architecture: arm64 for Apple silicon, x86_64 for Intel, or universal for both. Native extensions and third-party libraries also need the corresponding architectures. A universal engine executable alone does not provide them. What a universal binary contains.
  5. Review application/min_macos_version_x86_64 and application/min_macos_version_arm64. Preset defaults are 11.00 and 13.00; these are bundle metadata rather than proof that your game runs on those OS versions. Actual requirements also depend on the renderer, .NET and libraries.
  6. Create a separate output directory outside the project. For release validation export a release build with Export With Debug disabled. Existing output at the selected path can be replaced; do not overwrite your only accepted build.

Choose distribution

GoalConfiguration and result
Local testingexport/distribution_type=0 (Testing), ad-hoc signing, notarization disabled. This is not a finished public release.
Distribution outside the storeexport/distribution_type=1 (Distribution), Developer ID signing, notarization and final-bundle validation on a Mac.
Mac App StoreA separate workflow available when exporting on macOS; requires store signing, a provisioning profile, installer identity and App Sandbox. Developer ID does not replace those settings.

ZIP and .app are implemented for all export hosts. DMG and PKG creation require macOS; the format list also depends on distribution type. An export option does not establish installed templates or working C# publishing on your host.

C# projects

Use the .NET editor, compatible .NET templates and the project SDK. The export plugin runs dotnet publish, not just a regular build. For universal, it publishes x86_64 and arm64 separately; each architecture needs matching native NuGet/extension dependencies.

On macOS, published data goes into Contents/Resources/data_<project>_<platform>_<arch>. Do not delete it from the .app or distribute only the executable from Contents/MacOS. The dotnet/embed_build_outputs option does not embed these outputs in the PCK on macOS.

For Failed to build project or Publish succeeded but project assembly not found, inspect the MSBuild/publish log. An existing ZIP and a successful editor build do not prove successful publishing for both architectures.

Signing and notarization

On a Mac, choose Xcode codesign and a Developer ID Application identity from Keychain for direct distribution. An empty identity or - means ad-hoc signing. Built-in ad-hoc signing does not identify the developer and cannot be used for notarization. Other hosts offer rcodesign, but installing it does not establish correct signing of a bundle containing .NET/dynamic libraries: verify the final bundle on a Mac.

For notarization configure Team ID and one authentication method: Apple ID with an app-specific password, or App Store Connect API credentials. Keep real passwords and private keys out of examples, repositories and logs. This article does not call Apple's service.

Disable codesign/entitlements/debugging for distribution. Generated entitlements account for CSharpScript and include JIT permissions. If codesign/entitlements/custom_file is set, your file replaces built-in generation: retain the permissions required by .NET and your libraries yourself. Do not enable every entitlement indiscriminately.

The Xcode notarytool branch submits an archive and prints a UUID without waiting for final acceptance. A UUID identifies a request, not an Accepted result. Check status/logs using Apple's tools, wait for Accepted, then attach the ticket with stapler. ZIP archives are not stapled directly: staple the application/DMG, then rebuild the final ZIP. Do not modify application contents afterwards. Apple's official workflow.

Validate on a Mac

Extract the actual archive you intend to distribute. Replace the path in a macOS terminal:

Shell
APP="/absolute/path/Game.app"
EXEC=$(/usr/libexec/PlistBuddy -c 'Print :CFBundleExecutable' "$APP/Contents/Info.plist")
plutil -lint "$APP/Contents/Info.plist"
file "$APP/Contents/MacOS/$EXEC"
lipo -archs "$APP/Contents/MacOS/$EXEC"
codesign --verify --deep --strict --verbose=2 "$APP"
spctl --assess --type execute --verbose=4 "$APP"

For universal, the main executable should contain both x86_64 and arm64; inspect bundled libraries separately. Passing signature verification does not equal Gatekeeper acceptance. Permission failures, launch policy and application logs are covered in running on macOS.

Launch the release bundle on a target Mac and test the main level, input, audio, user:// saves and extension features. Test both architectures for a universal release. An export without errors does not replace this launch: some signing failures are reported as warnings by the exporter.

Review boundary: settings and export branches were reviewed against Reckfell 1.0.0 source, its C# plugin and Apple instructions. No .app export, macOS C# publishing, signing, notarization or Mac launch was performed here; those are validation steps for your build rather than existing results.

Reckfell Engine documentationBack to top ↑
QUICK LINKSGetting startedEntity hierarchyC# & .NET 10Scenes and prefabs
Reckfell guides and full API K
reckfellENGINE
RECKFELL ACCOUNT

Sign in

Sign in to your Reckfell account.

One account for the entire Reckfell platform.