Unreal 5.8.1 or 5.8.2 on macOS 27 with Xcode 27 won’t complete a build of the Game profile via UBA or through the create packaged build option within the editor. Fails at step ‘Touch UBT generated tiles’ with Bad File Descriptor. Editor builds without issues.
What Type of Bug are you experiencing?
Platform Other
Steps to Reproduce
Attempt to build Game in either DebugGame, Development or Shipping profile
Expected Result
Game .app bundle is created without errors
Observed Result
Fails at step ‘Touch UBT generated tiles’ with Bad File Descriptor which seems to be a generated script in /var/folders/fy/qk7h6txd4q3400xh3ts0_dsc0000gn/T/SchemeScriptAction-xxxxxx.sh
It also outputs a base64 encoded string into the log;
{“type”:{“workspace”:{}}}
As a follow-up to this post. If I download the source version of UE 5.8.2 and attempt to compile it for macOS, every time it reaches a point where it creates an app bundle for the Editor or Game, the same error is presented. So it seems to be a general issue with the build pipeline when creating app bundles on macOS 27 with Xcode 27.
Confirming this issue on macOS 27, Xcode 27, UE 5.8.2, using Modern Xcode IOS build.
Build fails at the “Touch UBT generated tiles” scheme pre-action script with zero output. No error, no log line from the script itself, just “BUILD FAILED” and “Failed to finalize the .app with Xcode”.
Granting disk access to dotnet or other Unreal tools didn’t help. Also tried disabling UBA, disabling Spotlight indexing, and running the build scripts with elevated permissions - no change.
Building from Xcode project directly works fine. “Touch UBT generated tiles” pre-action runs without issue there. It fails when building via terminal / Editor. But building through Xcode doesn’t cook content, so you first need at least one successful terminal/Editor build to get cooked content before Xcode builds are actually usable.
The only workaround I found: fully wipe Binaries, Saved and Intermediate (project + plugins), Xcode/DerivedData and delete the generated .app before every build. A clean build from terminal lets the pre-action script run. Just deleting the .app isn’t enough. Even with a full wipe it’s not 100% reliable, but it’s the only thing that consistently helps.
And there’s no way to run Xcode 26 on macOS 27…
UPD: for iOS SDK 27 you also need bUseSceneBasedLifecycle enabled, otherwise you get a crash. And to actually use it you need to rebuild the ApplicationCore and Launch Engine modules with that flag - without the rebuild you just get a black screen instead of a crash.
Thanks a lot for the quick fix and for linking the commit!
One follow-up: any plans for the bUseSceneBasedLifecycle requirement on an Xcode 27 build? Without it enabled, the IOS build crashes. But enabling it alone isn’t enough. IOSSceneDelegate only gets compiled in if ApplicationCore is rebuilt with UE_IOS_SCENE_LIFECYCLE, so on an installed engine you get a black screen instead (Info.plist points to a class that was never built). Would be great if this shipped enabled by default for Xcode 27, or as part of the precompiled binaries in a hotfix.
Wanted to give a heads-up before this turns into a bunch of separate reports
It is a topic we are discussing internally. You can still build with Xcode26.6 with macOS27 via UE Editor, RunUAT or ushell, even if you can not open Xcode26 directly. Building with Xcode26 avoids the crash on iOS27 devices.
Before it can be enabled by default, QA will need to test it across multiple projects to confirm there’s no regressions.
If you’ve installed the engine source through the Launcher, the UBT .sln project is already there (/UE_5.8/Engine/Source/Programs/UnrealBuildTool).
You can just add those couple of lines with the fix, rebuild it, and copy the binaries from the UBT project (“obj” folder) into the engine’s Binaries folder.
I do this a lot, actually: instead of dealing with a source build, I just rebuild the specific engine modules I’ve changed and swap their binaries into the Launcher engine
The switch to using UIScene lifecycle has made it into the github dev-5.8 repo here. Still no guarantee it will be in the next 5.8 hotfix as it can always be reverted, but you can merge it into your own engine build if you do not want to wait. Cheers.