Tested versions
- Reproducible in 4.7.stable and 4.7.1.stable iOS export templates
- Not reproducible in 4.6.stable
System information
macOS 15.7.7, Xcode 26.3 (17C529), iOS SDK 26.2, iPad Pro 11" (4th gen), Godot 4.7.1.stable, Mobile renderer
Issue description
Linking an exported iOS project fails with two undefined symbols:
Undefined symbols for architecture arm64:
"_SDL_IsIPad", referenced from: SDL.ios.template_debug.arm64.o in libgodot.a
"_SDL_IsAppleTV", referenced from: SDL.ios.template_debug.arm64.o in libgodot.a
ld: symbol(s) not found for architecture arm64
The libgodot.a shipped in the iOS template defines 869 SDL symbols, but not these two, they are the only SDL symbols in the archive left undefined. Upstream they live in SDL_uikitvideo.m, which isn't part of Godot's SDL build since only the joystick subsystem is compiled. Both the debug and release xcframeworks are affected.
This looks like it comes from #114316 (SDL3 joystick driver for iOS, merged for 4.7). CI builds the static library but never links an iOS app, linking only happens at export time, so the missing symbols pass CI.
Steps to reproduce
- Export any project for iOS with 4.7.1 templates, "Export Project Only"
- Build for an arm64 device in Xcode
- Linking fails with the symbols above
This can be confirmed without exporting anything, straight from the installed template:
nm libgodot.ios.debug.xcframework/ios-arm64/libgodot.a | grep -c ' T _SDL_IsIPad' # 0
nm -u libgodot.ios.debug.xcframework/ios-arm64/libgodot.a | grep -c '_SDL_IsIPad' # 1
Providing the two functions in the exported Xcode project makes it link, and the app runs on device with gamepad paths behaving normally:
#import <UIKit/UIKit.h>
#include <stdbool.h>
bool SDL_IsIPad(void) { return UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad; }
bool SDL_IsAppleTV(void) { return false; }
Minimal reproduction project (MRP)
Not needed, any project exported with the official 4.7.1 iOS templates reproduces it, and the nm check above confirms it on the shipped template alone.
Tested versions
System information
macOS 15.7.7, Xcode 26.3 (17C529), iOS SDK 26.2, iPad Pro 11" (4th gen), Godot 4.7.1.stable, Mobile renderer
Issue description
Linking an exported iOS project fails with two undefined symbols:
The
libgodot.ashipped in the iOS template defines 869 SDL symbols, but not these two, they are the only SDL symbols in the archive left undefined. Upstream they live inSDL_uikitvideo.m, which isn't part of Godot's SDL build since only the joystick subsystem is compiled. Both the debug and release xcframeworks are affected.This looks like it comes from #114316 (SDL3 joystick driver for iOS, merged for 4.7). CI builds the static library but never links an iOS app, linking only happens at export time, so the missing symbols pass CI.
Steps to reproduce
This can be confirmed without exporting anything, straight from the installed template:
Providing the two functions in the exported Xcode project makes it link, and the app runs on device with gamepad paths behaving normally:
Minimal reproduction project (MRP)
Not needed, any project exported with the official 4.7.1 iOS templates reproduces it, and the
nmcheck above confirms it on the shipped template alone.