Supporting ARM64 and Universal Binaries for Apple Arcade

Apple Arcade requires support for both ARM64 and x86-64 architectures on Macs. Learn how to support Macs with both of these architectures, and how to create merged binaries for Apple Arcade.

Choose your operating system:

Windows

macOS

Linux

With the introduction of Apple's M1 processor, Macs from 2021 onward have been manufactured using the same ARM64 architecture as iOS devices. Meanwhile, the previous generation of Intel-based Macs use an x86-64 architecture.

Although Apple provides an instruction translator called Rosetta2 to help support legacy applications, Apple Arcade requires developers to provide a single universal binary for games, with explicit support for both architectures. This ensures the best possible performance and stability on both generations of hardware.

This page provides the following resources for building Unreal Engine (UE) projects with this level of support:

  • Information about Unreal Engine's compatibility with both architectures.

  • Instructions on how to support both architectures separately.

  • Instructions on how to build universal binaries that support both architectures.

Prerequisites

The instructions on this page assume that you are building your projects using Xcode running on macOS. You should familiarize yourself with

[**Unreal Automation Tool**](ProductionPipelines/BuildTools/UnrealAutomationTool)
(UAT) and the BuildCookRun command before proceeding.

Compatibility Notes

Unreal Editor

As of late 2021, Unreal Editor does not support the ARM64 architecture used by M1 Macs and newer. Instead, it relies on the Rosetta2 translator.

Future versions of Unreal Engine will introduce direct support for M1 Macs, but in the meantime, you should expect a performance impact when running Unreal Editor on M1 Macs and newer.

Unreal Engine Projects

Although Unreal Editor currently runs with Rosetta2, Unreal Engine can output packaged builds for projects with support for ARM64.

Creating Binaries for ARM64 and x86-64

Creating Separate Binaries

To build binaries for each architecture, you need to use Unreal Automation Tool's BuildCookRun command to start a build and set the target architecture.

First, navigate to your Unreal Engine's install directory in your command line:

cd /Users/Current.User/Epic\Games/UE4.27

Then, execute RunUAT.sh with the BuildCookRun argument to start the build:

Engine/Build/BatchFiles/RunUAT.sh BuildCookRun -project=MyProject -platform=Mac -architecture=arm64 -build -cook -stage -deploy

Adding the -architecture= command to BuildCookRun will specify which architecture you are building for.

For example, the following command will create a build for ARM64:

-architecture=arm64

And the following command will build for x86:

-architecture=x86_64

The first time you build your project for each architecture will probably take longer than usual. After that, UAT caches cooked data, and subsequent builds will be faster.

You can build projects that support both x86-64 and ARM64 architectures by compiling their binaries separately, and distributing builds with those binaries to different machines as appropriate. However, you need to create merged, universal binaries for Apple Arcade, and having a universal binary is more convenient for distribution overall.

Creating Universal Binaries With UAT

To build a project with universal binaries, use the following as your architecture in BuildCookRun :

-specifiedarchitecture=arm64+x86_64

This will build a project that supports both ARM64 and x86-64 architectures. You can distribute these builds to either type of device, and they will use the appropriate binaries for their architecture automatically.

Help shape the future of Unreal Engine documentation! Tell us how we're doing so we can serve you better.
Take our survey
Dismiss