SDL: Fixed build when using an older Xcode SDK

From 6f3d0b3cdb38f89f86a31e2dcb05ffc02cb262f4 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Tue, 21 Jan 2025 17:23:08 -0800
Subject: [PATCH] Fixed build when using an older Xcode SDK

Fixes https://github.com/libsdl-org/SDL/issues/12048
---
 src/joystick/apple/SDL_mfijoystick.m |  4 +---
 src/video/uikit/SDL_uikitpen.m       | 29 ++++++++++++++++++++++++++--
 2 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/src/joystick/apple/SDL_mfijoystick.m b/src/joystick/apple/SDL_mfijoystick.m
index 23d6b23f80535..811a9f1ae7606 100644
--- a/src/joystick/apple/SDL_mfijoystick.m
+++ b/src/joystick/apple/SDL_mfijoystick.m
@@ -50,9 +50,7 @@
 
 #include <objc/message.h>
 
-/* remove compilation warnings for strict builds by defining these selectors, even though
- * they are only ever used indirectly through objc_msgSend
- */
+// Fix build errors when using an older SDK by defining these selectors
 @interface GCController (SDL)
 #if !((__IPHONE_OS_VERSION_MAX_ALLOWED >= 140500) || (__APPLETV_OS_VERSION_MAX_ALLOWED >= 140500) || (__MAC_OS_X_VERSION_MAX_ALLOWED >= 110300))
 @property(class, nonatomic, readwrite) BOOL shouldMonitorBackgroundEvents;
diff --git a/src/video/uikit/SDL_uikitpen.m b/src/video/uikit/SDL_uikitpen.m
index 622513c24d37a..520968163d476 100644
--- a/src/video/uikit/SDL_uikitpen.m
+++ b/src/video/uikit/SDL_uikitpen.m
@@ -28,6 +28,31 @@
 
 #include "../../events/SDL_pen_c.h"
 
+// Fix build errors when using an older SDK by defining these selectors
+#if !defined(SDL_PLATFORM_TVOS)
+
+@interface UITouch (SDL)
+#if !(__IPHONE_OS_VERSION_MAX_ALLOWED >= 170500)
+@property (nonatomic, readonly) CGFloat rollAngle;
+#endif
+@end
+
+@interface UIHoverGestureRecognizer (SDL)
+#if !(__IPHONE_OS_VERSION_MAX_ALLOWED >= 160100)
+@property (nonatomic, readonly) CGFloat zOffset;
+#endif
+#if !(__IPHONE_OS_VERSION_MAX_ALLOWED >= 160400)
+- (CGFloat) azimuthAngleInView:(UIView *) view;
+
+@property (nonatomic, readonly) CGFloat altitudeAngle;
+#endif
+#if !(__IPHONE_OS_VERSION_MAX_ALLOWED >= 170500)
+@property (nonatomic, readonly) CGFloat rollAngle;
+#endif
+@end
+
+#endif // !SDL_PLATFORM_TVOS
+
 static SDL_PenID apple_pencil_id = 0;
 
 bool UIKit_InitPen(SDL_VideoDevice *_this)
@@ -142,11 +167,11 @@ extern void UIKit_HandlePenHover(SDL_uikitview *view, UIHoverGestureRecognizer *
 static void UIKit_HandlePenAxesFromUITouch(SDL_uikitview *view, UITouch *pencil)
 {
     float rollAngle = 0.0f;
-    #if !defined(SDL_PLATFORM_TVOS)
+#if !defined(SDL_PLATFORM_TVOS)
     if (@available(iOS 17.5, *)) {
         rollAngle = (float) [pencil rollAngle];
     }
-    #endif
+#endif
 
     SDL_Window *window = [view getSDLWindow];
     const CGPoint point = [pencil locationInView:view];