Building source and .app for macOS
Apple SDK, architectures, C# stages and bundle packaging.
This builds Reckfell 1.0.0 source for macOS. For an existing game's package use macOS export. Native compilation and .app generation below were reviewed from source, not executed on this Windows host.
Select the Apple toolchain
Use an Apple toolchain and macOS SDK, Python 3.9+, SCons 4.4+ and .NET SDK 10 for C#. In the terminal used for the build inspect:
xcode-select --print-path
xcrun --sdk macosx --show-sdk-path
clang --versionResolve a missing/wrong active developer directory using Apple's toolchain settings. The build uses xcrun to find the SDK unless MACOS_SDK_PATH is explicitly supplied. A Mac SDK directory alone does not provide every compiler/framework dependency. Cross-compilation is a separate toolchain workflow, not just platform=macos on another OS.
Current source accepts arm64 and x86_64. It sets deployment minima to macOS 13.0 for arm64 and 11.0 for x86_64. These flags are not a full hardware/feature support certification. Metal is enabled only for arm64 in this source; the x86_64 path disables it with a warning. Do not infer identical renderer availability from a combined binary.
Check renderer and optional dependencies
| Option | Consequence |
|---|---|
| vulkan=yes, use_volk=no | Needs compatible MoltenVK; supply vulkan_sdk_path if detection fails |
| metal=yes | Needs the selected Apple SDK/frameworks and supported target architecture |
| angle=yes | Needs matching ANGLE libraries through angle_libs; absence can disable the backend with a warning |
| accesskit=yes | Needs AccessKit C SDK through accesskit_sdk_path; absence can disable accessibility support |
Read the complete configuration log: a successful build can still have a backend disabled. Use angle=no/accesskit=no only as deliberate feature changes. Match dependency architecture to the output.
Build and prepare C#
Run in Source containing SConstruct. Apple Silicon editor example:
scons platform=macos target=editor arch=arm64 module_mono_enabled=yes -j4Use arch=x86_64 for Intel output and its own dependencies. Other choices, including dev_build and precision, affect filenames/configuration. Results go to Source/bin. An old executable surviving a failed compile/link is not a successful result; check exit status and timestamp.
The C# module is disabled by default. Native compilation with module_mono_enabled=yes is only one stage: generate glue using the new editor and build its matching managed API/packages with .NET SDK 10. RECKFELL_BINARY must name the actual new output; adjust the example filename to your configuration:
RECKFELL_BINARY="/absolute/Source/bin/reckfell.macos.editor.arm64.mono"
"$RECKFELL_BINARY" --headless --generate-mono-glue modules/mono/glue
python3 modules/mono/build_scripts/build_assemblies.py --reckfell-output-dir=bin --push-nupkgs-local=bin/NuGet
"$RECKFELL_BINARY" --path /absolute/project --editorCheck bin/ReckfellSharp and bin/NuGet for the SDK 1.0.0 build. Keep native/managed features matched. project.reckfell must be in the --path directory. --headless is a launch mode, not proof of a dependency-free or GPU-validated build.
Generate the bundle last
For a C# editor .app, complete managed output before the final generate_bundle=yes pass: the bundle builder copies bin/ReckfellSharp. It does not independently build that directory. Reuse matching SCons settings:
scons platform=macos target=editor arch=arm64 module_mono_enabled=yes generate_bundle=yes -j4The result appears under bin; the .app name depends on the build prefix/suffixes. Inspect Contents/MacOS/Reckfell and, for C#, Contents/Resources/ReckfellSharp. The builder uses the source template misc/dist/macos_tools.app and current misc/dist/macos entitlement files. Do not copy obsolete entitlement paths from another checkout.
To include Intel and Apple Silicon, build both architectures with matching settings before the final bundling pass. The lipo helper combines binaries it actually finds; it cannot create a missing architecture. Verify the architectures in the resulting executable rather than assuming a filename proves a universal build.
bundle_sign_identity defaults to '-' for local ad-hoc signing. That is not Developer ID distribution/notarization. The helper calls codesign without enforcing its return code, so SCons completion alone does not prove signing succeeded. Inspect signing output and verify the resulting bundle before using it. Distribution validation and signing were not performed in this review.
For game templates use target=template_debug/template_release with matching C#/architecture/settings. generate_bundle packages available template outputs; it does not compile every missing variant. Validate the exported game on each supported target OS.
Diagnosis and limits
| Failure | Check |
|---|---|
| xcrun cannot locate SDK | Active developer directory and MACOS_SDK_PATH |
| MoltenVK/ANGLE/AccessKit missing | Selected backend, SDK path and architecture |
| C# bundle copying fails | Matching bin/ReckfellSharp exists before bundling |
| .app exists but does not launch | Actual executable, managed files, dynamic dependencies and signature |
| One architecture missing | Both native outputs and identical bundling configuration |
Source options, managed stages and bundle behavior were reviewed. macOS compilation, dependency installation, actual multi-architecture linking, launch, graphics, signing and export remain unverified. Source, installed Runtime and SDK were not changed.