Multiple iOS devices (A8-A10 chips) failing to launch builds on Unity 6.3.2

Hello Unity Support Team,

We are reporting a critical issue encountered after upgrading our project to Unity 6.3.2. Our latest builds are failing to run on a specific range of older, but previously supported, iOS devices.

Issue Description

Upon updating from Unity 6.0 LTS to Unity 6.3.2 LTS, our game immediately crashes or fails to initialize on several iPad models. These same devices function correctly on builds from earlier Unity versions.

Affected Devices

We have confirmed the issue on the following hardware:

  • A8/A8X: iPad Mini 4, iPad Air 2

  • A9/A9X: iPad 5th Gen, iPad Pro 1st Gen (9.7" & 12.9")

  • A10/A10X: iPad 6th Gen, iPad 7th Gen, iPad Pro 2nd Gen

Technical Details

  • Unity Version: 6.3.2

  • Scripting Backend: IL2CPP

  • Graphics API: Metal (Graphics API selection is unavailable)

  • Observed Behavior: Black screen, then exit.

Our Questions for Support

  1. Support Status: Has Unity 6.3 officially dropped support for Apple A8 through A10 chipsets, or is the minimum iOS version requirement now higher than these devices can support?

  2. Known Regression: Is this a known issue with the 6.3.x branch regarding Metal compatibility on older hardware?

  3. Workaround: If support has not been dropped, are there specific Project Settings (e.g., Graphics Tier settings or Stripping levels) that we should adjust to restore compatibility?

We would appreciate clarification on whether we should treat this as a bug to be patched or as a permanent change in Unity’s hardware support roadmap.

Best regards,

Can from no-pact Game Studios

there is no actual useful information provided: what are the crash callstacks? what is in xcode console?

Hi Alexey,
We have crash reports coming from users with those devices, they are nearly all PowerVR powered devices, and we just wanted to know whether Unity dropped the support for those devices. I would provide you with further information, but as the player fails to launch, we cannot receive healty crash reports.

We have the following stack trace

Crashed: Job.Worker 0
0  libsystem_kernel.dylib         0xbf74 __pthread_kill + 8
1  libsystem_pthread.dylib        0x5fa4 pthread_kill + 208
2  libsystem_c.dylib              0x71708 abort + 104
3  libsystem_c.dylib              0x70b78 err + 266
4  Metal                          0x14ef54 bool MTLGetEnvCase<MTLErrorModeType>(char const*, MTLErrorModeType&, std::__1::vector<std::__1::pair<char const*, MTLErrorModeType>, std::__1::allocator<std::__1::pair<char const*, MTLErrorModeType>>> const&) (.cold.1) + 42
5  Metal                          0xa3e4 MTLReportFailure + 436
6  Metal                          0x9d48 _MTLMessageContextEnd + 856
7  Metal                          0x1c230 validateWithDevice(id<MTLDevice>, MTLRenderPipelineDescriptorPrivate const&) + 552
8  Metal                          0xa540 -[MTLRenderPipelineDescriptorInternal validateWithDevice:error:] + 92
9  AGXMetalA10                    0x413c0 AGX::UserCommonShaderFactory<AGX::G9::Encoders, AGX::G9::Classes, AGX::G9::ObjClasses>::createRenderPipeline(MTLRenderPipelineDescriptor*, AGXA10FamilyDevice*, unsigned long, MTLRenderPipelineReflection**, NSError**, void (id<MTLRenderPipelineState>, MTLRenderPipelineReflection*, NSError*) block_pointer) + 136
10 AGXMetalA10                    0x39878 -[AGXA10FamilyDevice newRenderPipelineStateWithDescriptor:error:] + 60
11 UnityFramework                 0x25061b8 (anonymous namespace)::CreateRenderPipeline(metal::PipeKey const&) + 1273 (GpuProgramsMetal.mm:1273)
12 UnityFramework                 0x2504500 CreateGraphicsPSOJobFunc(CreateGraphicsPSOJobData*) + 1334 (GpuProgramsMetal.mm:1334)
13 UnityFramework                 0x1dbd320 ujob_execute_job(ujob_control_t*, ujob_lane_t*, ujob_job_t*, ujob_handle_t, unsigned int) + 1124 (ujobs.cpp:1124)
14 UnityFramework                 0x1dbd5e0 lane_guts(ujob_control_t*, ujob_lane_t*, int, int, ujob_dependency_chain const*) + 1320 (ujobs.cpp:1320)
15 UnityFramework                 0x1dbe348 worker_thread_routine(void*) + 1331 (ujobs.cpp:1331)
16 UnityFramework                 0x21f9394 Thread::RunThreadWrapper(void*) + 117 (Thread.cpp:117)
17 libsystem_pthread.dylib        0x482c _pthread_start + 104
18 libsystem_pthread.dylib        0xcd8 thread_start + 8

Is there anything else I can provide you with?

creating renderpipeline descriptor fails (i assume you got it since validation layer should be enabled only when running from xcode). Check xcode output for more info usually the reason is written to the log above. Anyway, that sounds like you are using smth that is not supported by the device - hard to say without repro project. Try running on simulator? (it emulates very old gpu) and/or bug report with repro project right away

Yeah, will do that now, I will try on the emulator, I will keep you informed.

After updating to Unity version 6000.3.3f1 I get similar crashes also on older iPhone 7 (iOS 15.8.4)
The game works fine on newer iPhone models.

2026-01-15 01:47:10.852001+0400 BattleGang[671:21953] UnityIAP UnityEarlyTransactionObserver: Created
2026-01-15 01:47:10.855234+0400 BattleGang[671:21953] UnityIAP UnityEarlyTransactionObserver: Registered for lifecycle events
2026-01-15 01:47:11.052785+0400 BattleGang[671:22163] [[FirebaseCore]] 12.6.0 - [FirebaseCore][I-COR000005] No app has been configured yet.
2026-01-15 01:47:11.095209+0400 BattleGang[671:21953] Built from '6000.3/staging' branch, Version '6000.3.3f1 (ef04196de0d6)', Build type 'Development', Scripting Backend 'il2cpp'
2026-01-15 01:47:11.097238+0400 BattleGang[671:21953] MemoryManager: Using 'Default' Allocator.
[UnityMemory] Configuration Parameters - Can be set up in boot.config
    "memorysetup-allocator-temp-initial-block-size-main=262144"
    "memorysetup-allocator-temp-initial-block-size-worker=262144"
    "memorysetup-temp-allocator-size-background-worker=32768"
    "memorysetup-temp-allocator-size-job-worker=262144"
    "memorysetup-temp-allocator-size-preload-manager=262144"
    "memorysetup-temp-allocator-size-nav-mesh-worker=65536"
    "memorysetup-temp-allocator-size-audio-worker=65536"
    "memorysetup-temp-allocator-size-cloud-worker=32768"
    "memorysetup-bucket-allocator-granularity=16"
    "memorysetup-bucket-allocator-bucket-count=8"
    "memorysetup-bucket-allocator-block-size=4194304"
    "memorysetup-bucket-allocator-block-count=1"
    "memorysetup-main-allocator-block-size=16777216"
    "memorysetup-thread-allocator-block-size=16777216"
    "memorysetup-gfx-main-allocator-block-size=16777216"
    "memorysetup-gfx-thread-allocator-block-size=16777216"
    "memorysetup-cache-allocator-block-size=4194304"
    "memorysetup-typetree-allocator-block-size=2097152"
    "memorysetup-profiler-bucket-allocator-granularity=16"
    "memorysetup-profiler-bucket-allocator-bucket-count=8"
    "memorysetup-profiler-bucket-allocator-block-size=4194304"
    "memorysetup-profiler-bucket-allocator-block-count=1"
    "memorysetup-profiler-allocator-block-size=16777216"
    "memorysetup-profiler-editor-allocator-block-size=1048576"
    "memorysetup-temp-allocator-size-main=4194304"
    "memorysetup-job-temp-allocator-block-size=2097152"
    "memorysetup-job-temp-allocator-block-size-background=1048576"
    "memorysetup-job-temp-allocator-reduction-small-platforms=262144"
    "memorysetup-temp-allocator-size-gfx=262144"
-> applicationDidFinishLaunching()
Starting managed debugger on port 56000
Found 2 interfaces on host : 0) 169.254.5.152 1) 172.20.10.2
Player connection [4369614208]  Target information:

Player connection [4369614208]  * "[IP] 169.254.5.152 [Port] 55000 [Flags] 2 [Guid] 511718888 [EditorId] 1802669440 [Version] 1048832 [Id] iPhonePlayer(8,iPhone):56000 [Debug] 1 [PackageName] iPhonePlayer [ProjectName] Battle Gang" 

Player connection [4369614208]  * "[IP] 172.20.10.2 [Port] 55000 [Flags] 2 [Guid] 511718888 [EditorId] 1802669440 [Version] 1048832 [Id] iPhonePlayer(8,iPhone):56000 [Debug] 1 [PackageName] iPhonePlayer [ProjectName] Battle Gang" 

Started UDP target info broadcast (2) on [169.254.255.255:54997].
Input System module state changed to: Initialized.
[Physics::Module] Initialized fallback backend.
[Physics::Module] Id: 0xdecafbad
2026-01-15 01:47:15.145073+0400 BattleGang[671:21953] UnityIAP UnityEarlyTransactionObserver: Added to the payment queue
GfxDevice: creating device client; kGfxThreadingModeDirect
Initializing Metal device caps: Apple A10 GPU
Apple GPU Family: 3
MSL Version: 2.4
Has Float MSAA: 0
Has Float Filtering: 0
ReadWrite Texture Tier: 0
Initialize engine version: 6000.3.3f1 (ef04196de0d6)
[Physics::Module] Selected backend.
[Physics::Module] Name: PhysX
[Physics::Module] Id: 0xf2b8ea05
[Physics::Module] SDK Version: 4.1.2
[Physics::Module] Integration Version: 1.0.0
[Physics::Module] Threading Mode: Multi-Threaded
2026-01-15 01:47:17.328085+0400 BattleGang[671:21953] fopen failed for data file: errno = 2 (No such file or directory)
2026-01-15 01:47:17.328260+0400 BattleGang[671:21953] Errors found! Invalidating cache...
2026-01-15 01:47:17.430270+0400 BattleGang[671:22185] validateWithDevice, line 3718: error 'Render Pipeline Descriptor Validation
No valid pixelFormats set.
'
validateWithDevice:3718: failed assertion `Render Pipeline Descriptor Validation
No valid pixelFormats set.
'
dyld4 config: DYLD_INSERT_LIBRARIES=/Developer/usr/lib/libMainThreadChecker.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib
validateWithDevice:3718: failed assertion `Render Pipeline Descriptor Validation
No valid pixelFormats set.
'
Can't show file for stack frame : <DBGLLDBStackFrame: 0x335fcc1e0> - stackNumber:11 - name:CreateRenderPipeline. The file path does not exist on the file system: /Users/bokken/build/output/unity/unity/Runtime/GfxDevice/metal/GpuProgramsMetal.mm

This is what we see on XCode log with a iPad mini 4 iOS version 15.8.4

-> applicationDidFinishLaunching()
Found 2 interfaces on host : 0) 169.254.25.214 1) 192.168.100.152
Player connection [4311483776]  Target information:

Player connection [4311483776]  * "[IP] 169.254.25.214 [Port] 55000 [Flags] 2 [Guid] 3644641943 [EditorId] 1997988722 [Version] 1048832 [Id] iPhonePlayer(8,Asaf-Cans-iPad):56000 [Debug] 0 [PackageName] iPhonePlayer [ProjectName] Word Blocks" 

Player connection [4311483776]  * "[IP] 192.168.100.152 [Port] 55000 [Flags] 2 [Guid] 3644641943 [EditorId] 1997988722 [Version] 1048832 [Id] iPhonePlayer(8,Asaf-Cans-iPad):56000 [Debug] 0 [PackageName] iPhonePlayer [ProjectName] Word Blocks" 

Started UDP target info broadcast (2) on [169.254.255.255:54997].
[Physics::Module] Initialized fallback backend.
[Physics::Module] Id: 0xdecafbad
GfxDevice: creating device client; kGfxThreadingModeThreaded
Initializing Metal device caps: Apple A8 GPU
Apple GPU Family: 2
MSL Version: 2.4
Has Float MSAA: 0
Has Float Filtering: 0
ReadWrite Texture Tier: 0
Initialize engine version: 6000.3.2f1 (a9779f353c9b)
[Physics::Module] Selected backend.
[Physics::Module] Name: PhysX
[Physics::Module] Id: 0xf2b8ea05
[Physics::Module] SDK Version: 4.1.2
[Physics::Module] Integration Version: 1.0.0
[Physics::Module] Threading Mode: Multi-Threaded
2026-01-15 14:25:04.444440+0300 W********[6449:221832] fopen failed for data file: errno = 2 (No such file or directory)
2026-01-15 14:25:04.444645+0300 W********[6449:221832] Errors found! Invalidating cache...
2026-01-15 14:25:04.828334+0300 W********[6449:221804] validateWithDevice, line 3718: error 'Render Pipeline Descriptor Validation
No valid pixelFormats set.
'
validateWithDevice:3718: failed assertion `Render Pipeline Descriptor Validation
No valid pixelFormats set.
'
dyld4 config: DYLD_INSERT_LIBRARIES=/Developer/usr/lib/libMainThreadChecker.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib
validateWithDevice:3718: failed assertion `Render Pipeline Descriptor Validation
No valid pixelFormats set.
2026-01-15 14:25:04.828334+0300 WordBlocks[6449:221804] validateWithDevice, line 3718: error Render Pipeline Descriptor Validation
No valid pixelFormats set.

validateWithDevice:3718: failed assertion `Render Pipeline Descriptor Validation
No valid pixelFormats set.

dyld4 config: DYLD_INSERT_LIBRARIES=/Developer/usr/lib/libMainThreadChecker.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib
validateWithDevice:3718: failed assertion `Render Pipeline Descriptor Validation
No valid pixelFormats set.

yeah everything breaks - most likely some unsupported RT format (or maybe some logic error on our side). Bug report with repro project (you can drop case number here or dm me)

I’ve reverted the Unity Engine version back to 6.2 and I confirm that everything works fine, no crashes on older devices.

In the last 11 years I’ve encountered major engine bugs about 6 times, 3 of which happened in the last half a year.

To Unity folks - What is going on with your product? Are you using AI to generate the code? The few hundred thousand dollars that you trying to save actually backfires.
Me and I am pretty sure a lot of other developers have shipped bugged builds, which resulted with significantly higher losses.

And considering the fact that Unity actually makes money from other services too like Unity Ads, Cloud, Multiplayer, Vivox. Your company also had significantly higher losses than savings.

If you are a Unity Employee, please show this reply to your boss.

DO NOT MUTILATE UNITY ENGINE WITH AI!

I managed to replicate the issue on an quasi empty project. Shader Variant Collection built on 6.0 LTS doesn’t work on 6.3.2 LTS on older devices and produce the afromentioned problem. I will create the bug report with the example project, is there anything you would like me to add to the report?

can you drop bug id? Also

Shader Variant Collection built on 6.0 LTS doesn’t work on 6.3.2 LTS on older devices

oh this is interesting, most likely we missed “load old data” code path. So yeah, would definitely want to see repro project