Game crashes with iOS 26 Beta

Hi everybody!

I see our (released) game started crashing on devices running the iOS 26 public beta. I know that beta OS versions can be unstable, but we want to be prepared in case we need to change things on our end. We are using a source build of Unreal 5.5.

The crash happens immediately at startup and the crash dump points to some regex functionality and the underlying memory allocation.

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: SIGNAL 6 Abort trap: 6
Terminating Process: <omitted> [4606]

Triggered by Thread:  0


Thread 0 Crashed:
0   libsystem_kernel.dylib        	0x00000001ec7e30cc __pthread_kill + 8 (:-1)
1   libsystem_pthread.dylib       	0x0000000226e527e8 pthread_kill + 268 (pthread.c:1721)
2   libsystem_c.dylib             	0x000000019f476f1c abort + 124 (abort.c:122)
3   libc++abi.dylib               	0x0000000226d73808 __abort_message + 132 (abort_message.cpp:66)
4   libc++abi.dylib               	0x0000000226d777e8 __cxa_guard_acquire + 256 (cxa_guard.cpp:39)
5   <omitted>                        0x0000000100940dc8 FMemory::Malloc(unsigned long, unsigned int) + 4214216 (FMemory.inl:25)
6   libicucore.A.dylib            	0x00000001a1625118 uregex_open + 172 (uregex.cpp:127)
7   Foundation                    	0x0000000195f6ede8 -[NSRegularExpression initWithPattern:options:error:] + 308 (NSRegularExpression.m:132)
8   Foundation                    	0x0000000195f6158c -[NSString(NSRegularExpressionSupport) _stringByReplacingOccurrencesOfRegularExpressionPattern:withTemplate:options:range:] + 164 (NSStringRegex.m:57)
9   <omitted>      					0x00000001009d7198 FIOSPlatformMisc::IsEntitlementEnabled(char const*) + 4829592 (IOSPlatformMisc.cpp:1546)
10  <omitted>      					0x00000001008b9120 FApplePlatformMemory::BaseAllocator() + 3658016 (ApplePlatformMemory.cpp:355)
11  <omitted>      					0x0000000100947c30 FMemory_GCreateMalloc_ThreadUnsafe() + 4242480 (UnrealMemory.cpp:346)
12  <omitted>      					0x0000000100940de0 FMemory::Malloc(unsigned long, unsigned int) + 4214240 (FMemory.inl:25)
13  MLAssetIO                     	0x00000001f56c5258 google::protobuf::internal::OnShutdownRun(void (*)(void const*), void const*) + 372 (message_lite.cc:575)
14  MLAssetIO                     	0x00000001f56c5090 _GLOBAL__I_000102 + 80 (generated_message_util.cc:0)
15  dyld                          	0x0000000193dea428 invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const + 444 (Loader.cpp:2540)
16  dyld                          	0x0000000193dea6ac invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const + 324 (MachOAnalyzer.cpp:2443)
17  dyld                          	0x0000000193dd2d34 invocation function for block in mach_o::Header::forEachSection(void (mach_o::Header::SectionInfo const&, bool&) block_pointer) const + 312 (Header.cpp:2550)
18  dyld                          	0x0000000193dcf7a4 mach_o::Header::forEachLoadCommand(void (load_command const*, bool&) block_pointer) const + 208 (Header.cpp:1073)
19  dyld                          	0x0000000193dd2ecc mach_o::Header::forEachSection(void (mach_o::Header::SectionInfo const&, bool&) block_pointer) const + 124 (Header.cpp:2535)
20  dyld                          	0x0000000193dead4c dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const + 516 (MachOAnalyzer.cpp:2409)
21  dyld                          	0x0000000193deaea4 dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const + 172 (Loader.cpp:2532)
22  dyld                          	0x0000000193debe8c dyld4::PrebuiltLoader::runInitializers(dyld4::RuntimeState&) const + 44 (PrebuiltLoader.cpp:937)
23  dyld                          	0x0000000193deca88 dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, dyld3::Array<dyld4::Loader const*>&, dyld3::Array<dyld4::Loader const*>&) const + 308 (Loader.cpp:2607)
24  dyld                          	0x0000000193deca28 dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, dyld3::Array<dyld4::Loader const*>&, dyld3::Array<dyld4::Loader const*>&) const + 212 (Loader.cpp:2597)
30  dyld                          	0x0000000193dec884 dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_0::operator()() const + 180 (Loader.cpp:2618)
31  dyld                          	0x0000000193dec77c dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const + 716 (Loader.cpp:2614)
32  dyld                          	0x0000000193dea828 dyld4::APIs::runAllInitializersForMain() + 300 (DyldAPIs.cpp:4063)
33  dyld                          	0x0000000193dde184 dyld4::prepare(dyld4::APIs&, mach_o::Header const*) + 3232 (dyldMain.cpp:998)
34  dyld                          	0x0000000193dcdac8 start + 6252 (dyldMain.cpp:1453)

Anyone else seeing issues with Unreal on iOS 26?

Thanks,
Bernie

Checking the callstack again, it looks like a deadlock causes this crash. I tried disabling the entitlements check inside FIOSPlatformMisc::IsEntitlementEnabled and this makes the game start properly.

So now I’ll try to find the proper fix for this.

Alright, so the proper fix is to cherry-pick this commit that addresses changes in iOS 26 and ensures the engine allocation initialization works.

https://github.com/EpicGames/UnrealEngine/commit/9937d9f9ccb544bac6ff7db819c3930f224206a8