[UE 5.8.3][Editor] Apple Silicon Mac: the Mac libimobiledevice tools are x86_64-only, so the editor logs a failed idevice_id launch every 10 seconds when Rosetta is not installed

Summary

Every executable and dylib in Engine/Extras/ThirdPartyNotUE/libimobiledevice/Mac/ in the installed UE 5.8.3 is x86_64 only: lipo -archs prints x86_64 for all 28 files. The Mac editor runs native arm64. On an Apple Silicon Mac without Rosetta 2, the iOS device-detection thread (FDeviceQueryTask in IOSTargetPlatformControls) fails to launch idevice_id on every poll. The editor log then gets this pair every 10 seconds, for as long as the editor runs:

LogHAL: Warning: FMacPlatformProcess::CreateProc: posix_spawn("/Users/Shared/Epic Games/UE_5.8/Engine/Extras/ThirdPartyNotUE/libimobiledevice/Mac/idevice_id") failed (86, Bad CPU type in executable)
LogHAL: Warning: Failed to launch Tool. (/Users/Shared/Epic Games/UE_5.8/Engine/Extras/ThirdPartyNotUE/libimobiledevice/Mac/idevice_id)

That was 1,240 lines in one 103-minute session. iOS device detection cannot work at all on such a Mac. Rosetta 2 is not installed by default on Apple Silicon, and Apple has said it will scale Rosetta back after macOS 27.

The polling never stops because of a second bug, which I am reporting separately.

This is not new. In 5.6.1 the same failed launch was a fatal error at editor startup: Unreal 5.6.1 Mac version downloaded from the Epic Games launcher crashes on launch after completing 10% initializing in the popup modal
5.8.3 downgrades it to a warning but still ships x86_64-only binaries.

Suggested fix: ship arm64 (or universal) builds of the Mac libimobiledevice tools and dylibs. Users in that thread have been replacing idevice_id with Homebrew’s arm64 build, ad-hoc signed.

Separately, QueryDevices ignores the return value of FPlatformProcess::ExecProcess (IOSDeviceHelper.cpp line 376). A launch that fails for a wrong architecture will fail on every later poll too. So the code could turn detection off with a single warning, as its existing “executable missing” branch (line 359) already does.

What Type of Bug are you experiencing?

Platform Mobile

Steps to Reproduce

  1. Use an Apple Silicon Mac without Rosetta 2. To check, arch -x86_64 /usr/bin/true fails with “Bad CPU type in executable”.
  2. Install Xcode with the iOS platform, so the IOS target platform reports its SDK as installed. The device poll does not start without it.
  3. Open any project in the UE 5.8.3 editor from the launcher.
  4. Watch the Output Log, or ~/Library/Logs/Unreal Engine/<Project>Editor/<Project>.log.
  5. To see the cause, run lipo -archs "/Users/Shared/Epic Games/UE_5.8/Engine/Extras/ThirdPartyNotUE/libimobiledevice/Mac/"*. It prints x86_64 for every file.

Expected Result

idevice_id runs natively, and with no iOS device connected nothing is logged.

Observed Result

The warning pair above repeats every 10 seconds ([DeviceDiscovery] AppleRescanRate=10 in BaseEditor.ini) for the whole session.

Renaming idevice_id stops it. GetLibImobileDeviceExe then returns an empty path, so QueryDevices logs one “idevice_id (iOS device detection) executable missing. Turning off iOS/tvOS device detection.” warning and stops polling. That takes effect on the next poll, with no editor restart.

Tested on UE 5.8.3 (launcher build, CL 58210709), macOS 27.0.1, Xcode 27.1 (iOS 27.1 SDK), Apple Silicon, no Rosetta.

Affects Versions

5.8

Platform(s)

Mac

Additional Notes

The other tools in that folder are reached only after idevice_id succeeds: ideviceinfo and idevicepair for each listed device, and idevicesyslog and itcpconnect for a connected one. So they cannot fail on this path until idevice_id itself works. Once it does, they are x86_64-only as well.