Skip to content

GameController macOS xcode27.0 b1

Alex Soto edited this page Jun 9, 2026 · 1 revision

#GameController.framework

diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCControllerElement.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCControllerElement.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCControllerElement.h	2026-04-18 22:55:18
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCControllerElement.h	2026-05-29 23:30:06
@@ -11,31 +11,42 @@
 NS_ASSUME_NONNULL_BEGIN
 
 /**
- Elements on a GCDevice can be used for system gestures. The system gesture state represents how input is handled in the app
- for a controller element that is bound to a system gesture.
- 
- @example The Options button on an extended gamepad can be bound to take a screenshot with a long press. This occurs outside of
- the control of the app. If a user presses the Options button, the system gesture recognizer will run by default. If a long press is detected,
- input will not be forwarded to your app (your application won't see the Options button was pressed at all). If a long press is not detected,
- input will be forwared to your app, with a delay.
- 
- If you do not want any delay in receiving input for this element, you have two options
- - Set the preferred state of the element to GCSystemGestureStateAlwaysReceive. The system gesture recognize will run
- concurrently with input being sent to your app. This removes input delay, but can lead to system gestures being triggered
- simulatenously with in-app actions.
- - Set the preferred state of the element to GCSystemGestureStateDisabled. This will disable the system gesture recognizer - your app
- will receive full control of the input for this element.
- 
- @see GCControllerElement.boundToSystemGesture
- @see GCControllerElement.preferredSystemGestureState
+ *  Elements on a GCDevice can be used for system gestures, such as showing the
+ *  Game Overlay or taking a screenshot of gameplay.
+ *
+ *  The system gesture state represents an app preference to utilize a button
+ *  with an attached system gesture for an app-specific purpose.  For example,
+ *  a game streaming app may want to forward the button state to the remote
+ *  device.
+ *
+ *  @example
+ *  The Options button on an extended gamepad can be bound to take a screenshot
+ *  with a long press. This occurs outside of the control of the app. If a user
+ *  presses the Options button, the system gesture recognizer will run by
+ *  default.  If a long press is detected, input will not be forwarded to your
+ *  app (your application won't see the Options button was pressed at all).
+ *  If a long press is not detected, input will be forwarded to your app, with a
+ *  delay.
+ *
+ *  This behavior may not be desirable in certain applications, such as those
+ *  that forward controller input to a remote gaming device (which may have its
+ *  own screenshot function).  The app can set the `preferredSystemGestureState`
+ *  of the element to `.Disabled`.  This requests the system disable its gesture
+ *  recognizer - giving the app full control of the input for the element.
+ *
+ *  @see GCControllerElement.preferredSystemGestureState
  */
 typedef NS_ENUM(NSInteger, GCSystemGestureState) {
-    /** System gesture recognizers will run before input is sent to app, this is the default state */
+    /** System gesture recognizers will run before input is sent to app, this
+     *  is the default state */
     GCSystemGestureStateEnabled = 0,
-    /** Input is sent to app and processed by system gesture recognizers simultaneously */
-    GCSystemGestureStateAlwaysReceive,
-    /** System gesture recognizers will not run at all. Input is passed directly to app */
-    GCSystemGestureStateDisabled
+    /** System gesture recognizers will not run at all.  Input is passed
+     *  directly to the app. */
+    GCSystemGestureStateDisabled = 2,
+    /** Input is sent to app and processed by system gesture recognizers
+     *  simultaneously.  This is no longer recommended - prefer `.Disabled`
+     *  instead. */
+    GCSystemGestureStateAlwaysReceive API_DEPRECATED_WITH_REPLACEMENT("GCSystemGestureStateDisabled", macos(11.0, 27.0), ios(14.0, 27.0), tvos(14.0, 27.0), visionos(1.0, 27.0)) = 1,
 } NS_SWIFT_NAME(GCControllerElement.SystemGestureState) API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
 
 /**
@@ -57,26 +68,6 @@
 @property (nonatomic, readonly, getter = isAnalog) BOOL analog;
 
 /**
- Check if the element is bound to a system gesture.
- Defaults to NO for most elements.
- 
- @see preferredSystemGestureState
- @see GCSystemGestureState
- */
-@property (nonatomic, readonly, getter = isBoundToSystemGesture) BOOL boundToSystemGesture API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
-
-/**
- The preferred system gesture state for this element.
- Defaults to GCSystemGestureStateEnabled for most elements
- 
- @note This is merely the preferred system gesture state - it is not guaranteed to be respected by the system.
- @note It is highly recommended to leave this set to the default value, however there may be situations (for example, game
- streaming apps) where it is preferrable to disable system gestures.
- @see boundToSystemGesture
- */
-@property (nonatomic, readwrite) GCSystemGestureState preferredSystemGestureState API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
-
-/**
  The element's SF Symbols name, taking input remapping into account.
  
  @note In almost all instances, you should use this over unmappedSfSymbolsName in your UI.
@@ -109,6 +100,32 @@
  
  */
 @property (nonatomic, copy, readonly) NSSet<NSString *> *aliases API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
+
+
+#pragma mark System Gestures
+
+/**
+ *  Check if the element is bound to a system gesture.
+ *
+ *  Defaults to NO for most elements.
+ *
+ *  @see preferredSystemGestureState
+ */
+@property (nonatomic, readonly, getter = isBoundToSystemGesture) BOOL boundToSystemGesture API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
+
+/**
+ *  The preferred system gesture state for this element.
+ *
+ *  This is merely the preferred system gesture state - it is not guaranteed to
+ *  be respected by the system.  It is highly recommended to leave this set to
+ *  the default value, however there may be situations (for example, game
+ *  streaming apps) where it is preferrable to disable system gestures.
+ *
+ *  Defaults to `GCSystemGestureStateEnabled`.
+ *
+ *  @see GCSystemGestureState
+ */
+@property (nonatomic, readwrite) GCSystemGestureState preferredSystemGestureState API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
 
 @end
 
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCControllerHomeButtonSettingsManager.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCControllerHomeButtonSettingsManager.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCControllerHomeButtonSettingsManager.h	1969-12-31 19:00:00
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCControllerHomeButtonSettingsManager.h	2026-05-21 10:44:57
@@ -0,0 +1,84 @@
+//  
+//  GCControllerHomeButtonSettingsManager.h
+//  GameController
+//
+//  Copyright © 2026 Apple Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import <GameController/GCExtern.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSInteger, GCControllerHomeButtonSettingsAction) {
+    /** The controller home button action could not be accessed. */
+    GCControllerHomeButtonSettingsActionUnavailable = 0,
+    /** The controller home button action opens the current application. */
+    GCControllerHomeButtonSettingsActionOpenCurrentApplication = 1,
+    /** The controller home button action performs some other action. */
+    GCControllerHomeButtonSettingsActionOther = NSIntegerMax,
+    /** Controller home button actions are disabled. */
+    GCControllerHomeButtonSettingsActionDisabled API_AVAILABLE(macos(27.0)) API_UNAVAILABLE(ios, tvos, visionos) = -1,
+} NS_SWIFT_NAME(GCControllerHomeButtonSettingsManager.Action) API_AVAILABLE(macos(27.0), ios(27.0), visionos(27.0)) API_UNAVAILABLE(tvos);
+
+/**
+ *  A hint passed to `-openControllerHomeButtonSettingsForActivity:` that
+ *  indicates the reason the app is requesting to open the Home button settings.
+ */
+typedef NS_ENUM(NSInteger, GCControllerHomeButtonSettingsActivity) {
+    /** Customize the action that occurs in response to long press of the
+     *  Home button. */
+    GCControllerHomeButtonSettingsCustomizeActionActivity NS_SWIFT_NAME(customizeAction) = 1,
+    /** Disable the system Home button actions while this app has focus. */
+    GCControllerHomeButtonSettingsCustomizeOverridesActivity NS_SWIFT_NAME(customizeOverrides),
+} NS_SWIFT_NAME(GCControllerHomeButtonSettingsManager.Activity) API_AVAILABLE(macos(27.0), ios(27.0), visionos(27.0)) API_UNAVAILABLE(tvos);
+
+
+/**
+ *  Access the game controller system Home button settings.
+ *
+ *  macOS, iOS, and visionOS allow the user to assign an action that launches a
+ *  chosen application to a long press of the Home button (the logo button on
+ *  PlayStation and Xbox controllers).  The \c GCControllerHomeButtonSettingsManager
+ *  class allows your application to partially inspect the user's currently
+ *  configured action, and to open the system game controller settings screen
+ *  where the user can modify the action.
+ *
+ *  @note
+ *  Performing operations on `GCControllerHomeButtonSettingsManager` is only
+ *  permitted while a game controller is connected.
+ */
+API_AVAILABLE(macos(27.0), ios(27.0), visionos(27.0)) API_UNAVAILABLE(tvos)
+@interface GCControllerHomeButtonSettingsManager : NSObject
+
+- (nullable instancetype)initWithQueue:(nullable dispatch_queue_t)queue;
+- (nullable instancetype)init;
+
+/**
+ *  A block that is called after shortcut settings change.
+ *
+ *  This block is called on the queue that the
+ *  `GCControllerHomeButtonSettingsManager` was initialized with.
+ */
+@property (atomic, copy, nullable) dispatch_block_t settingsDidChangeHandler;
+
+/**
+ *  Opens the Settings app to the screen in game controller settings where
+ *  the user can change the controller shortcut action.
+ *
+ *  @return
+ *  YES if the Settings app was opened, NO if it could not be opened and
+ *  \p error contains additional information.  This function returns immediately
+ *  after attempting to open the Settings app.
+ */
+- (BOOL)openControllerHomeButtonSettingsForActivity:(GCControllerHomeButtonSettingsActivity)activity error:(NSError * __autoreleasing *)error;
+
+/**
+ *  Get the current controller Home button action.
+ */
+- (GCControllerHomeButtonSettingsAction)readControllerHomeButtonActionWithError:(NSError * _Nullable __autoreleasing * _Nullable)error NS_REFINED_FOR_SWIFT;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDevice.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDevice.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDevice.h	2026-04-18 23:37:26
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDevice.h	2026-05-21 10:44:58
@@ -6,6 +6,7 @@
 //
 
 #import <Foundation/Foundation.h>
+
 #import <GameController/GCProductCategories.h>
 
 @class GCPhysicalInputProfile;
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDeviceHaptics.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDeviceHaptics.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDeviceHaptics.h	2026-04-18 23:37:25
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDeviceHaptics.h	2026-05-21 10:44:57
@@ -6,62 +6,54 @@
 //
 
 #import <Foundation/Foundation.h>
+
 #import <GameController/GCExtern.h>
+#import <GameController/GCDeviceHapticsLocality.h>
 
 @class CHHapticEngine;
 
 NS_ASSUME_NONNULL_BEGIN
 
-/**
- A GCHapticsLocality represents the locations of haptic actuators on a controller. You can create a haptic engine with a given
- GCHapticsLocality, and any patterns you send to that engine will play on all specified actuators.
- 
- ```
- CHHapticEngine *engine = [controller.haptics createEngineWithLocality:GCHapticsLocalityDefault];
- ```
- 
- @see GCDeviceHaptics
-*/
-typedef NSString* GCHapticsLocality NS_TYPED_ENUM API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
-GAMECONTROLLER_EXPORT GCHapticsLocality const GCHapticsLocalityDefault API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0)); // guaranteed to be supported
-GAMECONTROLLER_EXPORT GCHapticsLocality const GCHapticsLocalityAll API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0)); // guaranteed to be supported
-GAMECONTROLLER_EXPORT GCHapticsLocality const GCHapticsLocalityHandles API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
-GAMECONTROLLER_EXPORT GCHapticsLocality const GCHapticsLocalityLeftHandle API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
-GAMECONTROLLER_EXPORT GCHapticsLocality const GCHapticsLocalityRightHandle API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
-GAMECONTROLLER_EXPORT GCHapticsLocality const GCHapticsLocalityTriggers API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
-GAMECONTROLLER_EXPORT GCHapticsLocality const GCHapticsLocalityLeftTrigger API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
-GAMECONTROLLER_EXPORT GCHapticsLocality const GCHapticsLocalityRightTrigger API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
-
 GAMECONTROLLER_EXPORT const float GCHapticDurationInfinite API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
 
+
 API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0))
 @interface GCDeviceHaptics : NSObject
 
-/**
- The set of supported haptic localities for this device - representing the locations of its haptic actuators.
- 
- @note GCHapticsLocalityDefault and GCHapticsLocalityAll are guaranteed to be supported - and they may be equivalent.
- 
- @see GCHapticsLocality
-*/
-@property (nonatomic, strong, readonly) NSSet<GCHapticsLocality> *supportedLocalities;
-
+#ifdef __APPLE_BLEACH_SDK__
 - (instancetype)init NS_UNAVAILABLE;
+#endif
 
 /**
- Creates and returns a new instance of CHHapticEngine with a given GCHapticsLocality. Any patterns you send to this engine will play on
- all specified actuators.
+ *  The set of supported haptic localities for this device - representing the
+ *  locations of its haptic actuators.
+ *
+ *  @note
+ *  `GCHapticsLocalityDefault` and `GCHapticsLocalityAll` are guaranteed to be
+ *  supported - and they may be equivalent.
+ *
+ *  @see GCHapticsLocality
+ */
+@property (copy, readonly) NSSet<GCHapticsLocality> *supportedLocalities;
 
- @note Often times, it is best to use GCHapticsLocalityDefault. Engines created with the default locality will give users an expected
- haptic experience. On most game controllers, this will cause your haptic patterns to play on the handles. If you want to play different
- experiences on different actuators (for example, using the left handle actuator as a woofer and the right actuator as a tweeter), you can
- create multiple engines (for example, one with a GCHapticsLocalityLeftHandle locality and another with a GCHapticsLocalityRightHandle
- locality).
- 
- @see CHHapticEngine
- @see GCHapticsLocality
+/**
+ *  Creates and returns a new instance of `CHHapticEngine` with a given
+ *  `GCHapticsLocality`.  Any patterns you send to this engine will play on
+ *  all specified actuators.
+ *
+ *  Often times, it is best to use `GCHapticsLocalityDefault`.  Engines created
+ *  with the default locality will give users an expected haptic experience.
+ *  On most game controllers, this will cause your haptic patterns to play on
+ *  the handles. If you want to play different experiences on different
+ *  actuators (for example, using the left handle actuator as a woofer and the
+ *  right actuator as a tweeter), you can create multiple engines (for example,
+ *  one with a `GCHapticsLocalityLeftHandle` locality and another with a
+ *  `GCHapticsLocalityRightHandle` locality).
+ *
+ *  @see CHHapticEngine
+ *  @see GCHapticsLocality
  */
-- (CHHapticEngine * _Nullable)createEngineWithLocality:(GCHapticsLocality)locality;
+- (nullable CHHapticEngine *)createEngineWithLocality:(GCHapticsLocality)locality;
 
 @end
 
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDeviceHapticsLocality.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDeviceHapticsLocality.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDeviceHapticsLocality.h	1969-12-31 19:00:00
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDeviceHapticsLocality.h	2026-05-21 10:44:57
@@ -0,0 +1,37 @@
+//  
+//  GCDeviceHapticsLocality.h
+//  GameController
+//
+//  Copyright © 2025 Apple Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ *  A GCHapticsLocality represents the locations of haptic actuators on a
+ *  device.  You can create a haptic engine with a given GCHapticsLocality,
+ *  and any patterns you send to that engine will play on all specified
+ *  actuators.
+ *
+ *  ```
+ *  CHHapticEngine *engine = [controller.haptics createEngineWithLocality:GCHapticsLocalityDefault];
+ *  ```
+ *
+ *  @see GCDeviceHaptics
+ */
+typedef NSString* GCHapticsLocality NS_TYPED_ENUM API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
+
+GAMECONTROLLER_EXPORT GCHapticsLocality const GCHapticsLocalityDefault API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0)); // guaranteed to be supported
+GAMECONTROLLER_EXPORT GCHapticsLocality const GCHapticsLocalityAll API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0)); // guaranteed to be supported
+
+GAMECONTROLLER_EXPORT GCHapticsLocality const GCHapticsLocalityHandles API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
+GAMECONTROLLER_EXPORT GCHapticsLocality const GCHapticsLocalityLeftHandle API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
+GAMECONTROLLER_EXPORT GCHapticsLocality const GCHapticsLocalityRightHandle API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
+
+GAMECONTROLLER_EXPORT GCHapticsLocality const GCHapticsLocalityTriggers API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
+GAMECONTROLLER_EXPORT GCHapticsLocality const GCHapticsLocalityLeftTrigger API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
+GAMECONTROLLER_EXPORT GCHapticsLocality const GCHapticsLocalityRightTrigger API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0));
+
+NS_ASSUME_NONNULL_END
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDevicePhysicalInput.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDevicePhysicalInput.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDevicePhysicalInput.h	2026-04-18 22:15:08
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDevicePhysicalInput.h	2026-05-21 09:01:16
@@ -70,6 +70,7 @@
  handler should repeatedly call \c -nextInputState until it returns \c nil to
  drain the pending input states from the queue.
  
+ ```
     physicalInput.inputStateQueueDepth = 20;
     physicalInput.inputStateAvailableHandler = ^(__kindof id<GCDevicePhysicalInput> physicalInput) {
         id<GCDevicePhysicalInputState, GCDevicePhysicalInputStateDiff> nextInputState;
@@ -97,12 +98,15 @@
             }
         }
     };
+ ```
  */
 @property (atomic, copy, nullable) void (^inputStateAvailableHandler)(__kindof id<GCDevicePhysicalInput> physicalInput);
 
 /**
- The maximum number of input states to buffer.  If your application does not
- drain the pending input states in the queue before this limit is reached, older
+ The maximum number of input states to buffer.
+ 
+ If your application does not call `-nextInputState` to drain the pending
+ input states in the queue before this limit is reached, older
  input states will be discarded - resulting in your application "missing" input
  state changes.
  
@@ -117,6 +121,20 @@
  when there are no more input states pending.
  */
 - (nullable __kindof id<GCDevicePhysicalInputState, GCDevicePhysicalInputStateDiff>)nextInputState;
+
+/**
+ Returns the buffered input state that best aligns with the provided spatial
+ accessory anchor timestamp.
+ 
+ @param timestamp
+ The timestamp obtained from `ar_accessory_anchor_get_timestamp` for a spatial
+ accessory anchor.
+ 
+ @return
+ The buffered accessory input state that most closely aligns with the provided
+ spatial accessory anchor timestamp.
+ */
+- (nullable __kindof id<GCDevicePhysicalInputState>)inputStateForSpatialAccessoryAnchorTimestamp:(NSTimeInterval)timestamp API_AVAILABLE(visionos(27.0)) API_UNAVAILABLE(macos, ios, tvos);
 
 
 
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDeviceType.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDeviceType.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDeviceType.h	1969-12-31 19:00:00
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCDeviceType.h	2026-05-21 10:44:57
@@ -0,0 +1,47 @@
+//  
+//  GCDeviceType.h
+//  GameController
+//
+//  Copyright © 2024 Apple Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ *  A class representing a type of spatial accessory.
+ */
+
+API_AVAILABLE(visionos(27.0)) API_UNAVAILABLE(macos, ios, tvos)
+
+@interface GCDeviceType : NSObject <NSCopying>
+
+/**
+ *  Create a device type for an identifier.
+ *
+ *  This initializer returns nil if the system doesn’t know the device type for
+ *  \a identifier.
+ */
++ (nullable instancetype)deviceTypeWithIdentifier:(NSString *)identifier;
+
+- (instancetype)init NS_UNAVAILABLE;
+
+/**
+ *  A localized description of the device type.
+ */
+@property (readonly, nullable) NSString *localizedDescription;
+
+@end
+
+
+@interface GCDeviceType (CommonTypes)
+
+/**
+ *  A device type that represents any spatial accessory.
+ */
+@property (readonly, class) GCDeviceType *spatialAccessoryType API_AVAILABLE(visionos(27.0)) API_UNAVAILABLE(macos, ios, tvos);
+
+@end
+
+NS_ASSUME_NONNULL_END
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCRacingWheel.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCRacingWheel.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCRacingWheel.h	2026-04-18 23:37:25
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCRacingWheel.h	2026-05-21 10:44:57
@@ -6,7 +6,9 @@
 //
 
 #import <Foundation/Foundation.h>
-#import <GameController/GameController.h>
+
+#import <GameController/GCExtern.h>
+#import <GameController/GCDevice.h>
 
 @class GCRacingWheelInput;
 
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCSpatialAccessory.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCSpatialAccessory.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCSpatialAccessory.h	1969-12-31 19:00:00
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GCSpatialAccessory.h	2026-05-21 10:44:57
@@ -0,0 +1,77 @@
+//  
+//  GCSpatialAccessory.h
+//  GameController
+//
+//  Copyright © 2025 Apple Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import <GameController/GCExtern.h>
+#import <GameController/GCDevice.h>
+
+@class GCDeviceType;
+@class GCDeviceHaptics;
+@protocol GCDevicePhysicalInput;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ Use these constants with NSNotificationCenter to listen to connection and disconnection events.
+ 
+ Use GCSpatialAccessoryDidConnectNotification for observing connections of spatial accessories.
+ Use GCSpatialAccessoryDidDisconnectNotification for observing disconnections of spatial accessories.
+ 
+ Connections and disconnections of spatial accessories will also be reflected in the accessories array
+ of the GCSpatialAccessory class.
+ 
+ The 'object' property of the notification will contain the GCSpatialAccessory that was connected or disconnected.
+ 
+ @see NSNotificationCenter
+ @see GCSpatialAccessory.accessories
+ */
+GAMECONTROLLER_EXPORT NSString * const GCSpatialAccessoryDidConnectNotification API_AVAILABLE(visionos(27.0)) API_UNAVAILABLE(macos, ios, tvos);
+GAMECONTROLLER_EXPORT NSString * const GCSpatialAccessoryDidDisconnectNotification API_AVAILABLE(visionos(27.0)) API_UNAVAILABLE(macos, ios, tvos);
+
+
+API_AVAILABLE(visionos(27.0)) API_UNAVAILABLE(macos, ios, tvos)
+@interface GCSpatialAccessory : NSObject <GCDevice>
+
+/**
+ *  Tests the conformance of the receiver to the provided device type.
+ */
+- (BOOL)conformsToDeviceType:(GCDeviceType *)type;
+
+/**
+ *  Gets the input profile for the device.
+ */
+@property (readonly, strong, nullable) id<GCDevicePhysicalInput> input;
+
+/**
+ *  Gets the haptics for the device, if supported.
+ *
+ *  Use this property to create CHHapticEngine instances according to your needs.
+ *
+ *  @note
+ *  Haptics are a drain on the devices's battery, and can be distracting when
+ *  used excessively.
+ */
+@property (readonly, strong, nullable) GCDeviceHaptics *haptics;
+
+@end
+
+
+@interface GCSpatialAccessory (Discovery)
+
+/**
+ Get the collection of spatial accessories currently connected to the system.
+ 
+ @see GCSpatialAccessoryDidConnectNotification
+ @see GCSpatialAccessoryDidDisconnectNotification
+ */
+@property (readonly, class) NSArray<GCSpatialAccessory*> *spatialAccessories;
+
+
+@end
+
+NS_ASSUME_NONNULL_END
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GameController.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GameController.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GameController.h	2026-04-18 23:37:23
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GameController.framework/Headers/GameController.h	2026-05-21 10:44:56
@@ -17,6 +17,8 @@
 
 #import <GameController/GCDevice.h>
 
+#import <GameController/GCDeviceType.h>
+
 #import <GameController/GCDevicePhysicalInput.h>
 #import <GameController/GCPhysicalInputElement.h>
 #import <GameController/GCPhysicalInputSource.h>
@@ -36,6 +38,9 @@
 #import <GameController/GCDeviceLight.h>
 #import <GameController/GCDeviceBattery.h>
 
+#import <GameController/GCDeviceHaptics.h>
+#import <GameController/GCDeviceHapticsLocality.h>
+
 #import <GameController/GCControllerElement.h>
 #import <GameController/GCControllerAxisInput.h>
 #import <GameController/GCControllerButtonInput.h>
@@ -69,6 +74,7 @@
 #import <GameController/GCDirectionalGamepad.h>
 
 #import <GameController/GCController.h>
+#import <GameController/GCSpatialAccessory.h>
 #import <GameController/GCStylus.h>
 
 #import <GameController/GCKeyboard.h>
@@ -79,7 +85,7 @@
 #import <GameController/GCSteeringWheelElement.h>
 #import <GameController/GCGearShifterElement.h>
 
-#import <GameController/GCDeviceHaptics.h>
+#import <GameController/GCControllerHomeButtonSettingsManager.h>
 
 #import <GameController/GCEventViewController.h>
 #if __has_include(<GameController/GCVirtualController.h>)

Clone this wiki locally