Delve into the world of graphics and game development. Discuss creating stunning visuals, optimizing game mechanics, and share resources for game developers.

Posts under General subtopic

Post

Replies

Boosts

Views

Activity

SpriteKit Continued Support
Hi! Question Could you provide some reassurance on the continued support for SpriteKit in the coming years? Trigger The deprecation of SceneKit at WWDC 2025 made me nervous. Context I use SpriteKit because: It can render any video AVFoundation can handle, which third-party engines don't do for several reasons including patents. This allows me to prototype UI that controls video with a game-like feel. It can render text and emojis through AttributedString, and text is hard. Thanks to a clear and well-exposed update loop, it can be integrated with libraries such as Core Image or Box2D. Example with Box2D here. It can draw dynamic shapes and paths with SKShapeNode, and visualize and respond to all the processing done at specific times during a frame. SKView is very handy to generate textures from nodes, and SKRenderer can be used to render a SpriteKit scene to video or sequence of images. This is possible thanks to multiple frameworks working together, including AVAssetWriter and IOSurface. Example of SpriteKit offline rendering here. Apple Alternatives When Apple announced the deprecation of SceneKit, I learned RealityKit in order to move my SpriteKit-based projects to RealityKit. RealityKit is interesting, but for 2D and 2.5D workflows I found several areas where SpriteKit remains significantly more practical: I had to lock physics to the XY plane, which could stress the engine and introduce unwanted overlap. Overlapping entities on a 2D plane was hard: ModelSortGroup did not provide the simple flexibility that SpriteKit zPosition provides. AFAIK there is no dynamic path/shape drawing in RealityKit. So drawing lines, visualizing physics and joints, rendering graph connections in the scene is not as easy as it is with SpriteKit shape nodes. SpriteKit is lighter and less power-hungry. Let me know if you need any more context or detail. Thank you!
1
2
111
2d
Are there details about what Rosetta functionality for "older unmaintained gaming titles" will be kept?
The developer documentation for Rosetta describing its end of support (https://developer.apple.com/documentation/apple-silicon/about-the-rosetta-translation-environment) says the following: Beyond this timeframe, we will keep a subset of Rosetta functionality aimed at supporting older unmaintained gaming titles, that rely on Intel-based frameworks. Are there details about which specific functionality this is? And as a concrete example, will parts of Rosetta that are needed by programs used to run and/or evaluate Windows games, such as WINE or CrossOver, remain supported?
1
2
132
2d
How do I control a SwiftUI TextField with a game controller?
I've coded a text-adventure game in SwiftUI. (My game has no graphics or sound effects.) My app already supports keyboard navigation; I would like to add support for game controllers on iPhone. I can't figure out how to do it. I especially can't see any way to allow controller users to enter text in a TextField. I've read https://developer.apple.com/documentation/gamecontroller/supporting-game-controllers and it's all about button events. There's no reference to SwiftUI at all in that documentation, or any input-method editing at all. The only mention of "keyboard" is about treating the keyboard itself as if it were a game controller providing button events. How do I implement this?
1
1
100
2d
How to use Reality Composer Pro 3?!
I guess this is not an actual video Group Lab. sigh Would love to see a dedicated Reality Composer Pro 3 session - even for those of use actual Vision Pro devs that didn't get the lucky golden ticket to the Apple Park event. You need to make these interactions available to us in person during WWDC week. That all being said... How do I go about baking lighting in RCP3? I cannot find anything in the documentation. Thanks!
2
0
110
2d
Game Mode for games run by game launcher apps
If you have a "launcher-type app" (a regular macOS app bundle) which is used to launch the actual game executable (a non-bundled executable, such as a Java game), Game Mode does not seem to work as desired in this case. If the launcher app has the appropriate LSSupportsGameMode and LSApplicationCategoryType set, the launcher app will activate Game Mode if fullscreened but the actual game will not (FB18026957). Is there a workaround for this? It also seems like the system hardcodes some apps to act as "game launcher apps" which do have the desired behavior - for example, if you have a sample app set to Steam's bundle identifier (or just use Steam to run the program) and have this architecture where it runs another executable which is the real game, then that game can inherit Game Mode, which is also supported by system logs in Console (note the "launcher" labelReason): default 17:11:05.008533-0400 gamepolicyd Found game GameProcess(Optional("java"), pid=33754, euid=501, labelReason=launcher, launchedBy=Steam) Is there a way to opt into or apply for this behavior for our own apps? I previously asked this on the forums but I'm also wondering if any new developments have occurred since then.
0
0
88
2d
Apple API "CGDisplayCopyAllDisplayModes provides resolution list which does not match with system resolution for the external monitors.
Our application is trying to read all resolutions of an external monitor. We have observed that, for the external monitor there is a mismatch in resolution list in our application and the resolution list in system settings. We are using the apple API "CGDisplayCopyAllDisplayModes" to read the resolutions.
2
0
1k
2w
Please, implement the new GameSave framework on tvOS
Hi, I have a game which is available on iOS and tvOS and the gameplay is basically the same on both platforms. I'd like to enable my players to seamlessly continue their play sessions on all available platforms. Unfortunately, the new GameSave framework is not available on tvOS and neither is the old GKSavedGame API. I'm asking you to enable the new GameSave framework in a future version of tvOS. Thank you. I've also reported via Feedback Assistant with Feedback Number: FB22791051
1
0
703
3w
New GameSave API unexpected behavior
Hi, I'm implementing the new iOS 26 GameSave API in my game and I'm seeing an unexpected behavior when I try to handle custom conflict resolution. Here's what happens: directoryState.conflictedVersions is nil when directoryState.state is GSSyncStateConflicted. According to the API docs, this should never happen because there is no way to resolve the conflict. Here's the setup: I have 2 devices. Device 1 - iPad 10G iOS 26.5, and Device 2 - iPhone SE 3G iOS 26.5 and I run the same code on both devices. I disable the WiFi on device 2 to create a conflict I open the directory using [GSSyncedDirectory openDirectoryForContainerIdentifier: nil] Run [dir finishSyncingWithCompletionHandler:] After the callback returns I check dir.directoryState.state If the state is GSSyncStateReady, GSSyncStateOffline, or GSSyncStateLocal I write some data in a file and close the dir. I re-enable the WiFi on Device 2 and run the same code Now, on Device 2 dir.directoryState.state is GSSyncStateConflicted, as expected, but dir.directoryState.conflictedVersions is NIL and there is no way to continue and resolve the conflict. I'm expecting dir.directoryState.conflictedVersions to contain an array of GSSyncedDirectoryVersion objects as described in the API docs. One interesting bit is that if I replace [dir finishSyncingWithCompletionHandler:] with [dir finishSyncing: window completionHandler:] the UI conflict resolution works as expected. I'm using Objective C to call the API, if that matters. I've also reported via Feedback Assistant with Feedback Number: FB22790831
0
0
514
3w
CGSetDisplayTransferByTable is broken on macOS Tahoe 26.4 RC (and 26.3.1) with MacBook M5 Pro, Max and Neo
The CGSetDisplayTransferByTable() is not working on the latest round of Mac hardware, namely the MacBook Neo (external display), MacBook M5 Pro (both built-in and external display) and possibly the M5 Max. All tested apps (BetterDisplay, MonitorControl, f.lux, Lunar) exhibit the very issue both in macOS Tahoe 26.3 and macOS Tahoe 26.4 RC. Tested on multiple Macs and installations on the MacBook Neo and MacBook M5 Pro. This issue breaks several display related macOS apps. Way to reproduce the issue using an affected app: Install the app BetterDisplay (https://betterdisplay.pro) Launch the app, open the app menu, choose Image Adjustments and try to adjust colors. Adjustments take no effect Way to reproduce the issue programmatically: Attempt to use the affected macOS API feature: https://developer.apple.com/documentation/coregraphics/cgsetdisplaytransferbytable(::::_:) Here are the FB numbers: FB22273730 (Filed this one as a developer on an unaffected MBP M3 Max) FB22273782 (Filed from an affected MBP M5 Pro running 26.4 RC, with debug info attached)
5
5
2.5k
3w
SwiftUI + SpriteKit interop: best practices for HUD overlays in a tile-based puzzle game?
Hey all, I'm building a tile-based puzzle game for iOS and have been experimenting with using SwiftUI for the HUD (score, timer, pause menu, settings sheet) layered on top of a SpriteView that hosts the actual gameplay scene. So far the integration has been smoother than I expected — SpriteView drops cleanly into a ZStack, and I can drive SwiftUI state from the SpriteKit scene via an ObservableObject shared between them. That said, I've run into a few rough edges that I'd love some input on. The biggest one is touch handling: when a SwiftUI overlay (like a semi-transparent pause button) sits over the SpriteView, taps near the edges of the button occasionally get swallowed by the underlying scene, even when the button's hit area looks correct in the view debugger. I've tried .contentShape(Rectangle()) and bumping the frame, which helps but doesn't fully eliminate it. Curious if anyone has landed on a reliable pattern here, especially for transient overlays like toast notifications that need to ignore touches everywhere except on the toast itself. The other thing I'm weighing is animation ownership. Right now, gameplay animations (tile slides, match effects) live in SpriteKit, and HUD animations (score pop, combo counter) live in SwiftUI with withAnimation. It works, but the two animation systems don't share a clock, so when I want a "tile matched → score increment" effect to feel synchronized, I end up dispatching from the SKScene back to the ObservableObject and hoping the frame timing lines up. Has anyone found a cleaner way to coordinate timing across the two, or is this just the cost of mixing the frameworks? Would also love to hear from anyone who has shipped a game with this hybrid setup — any gotchas around Scene Phase transitions, backgrounding, or memory pressure that bit you in production? Thanks!
0
0
989
May ’26
HidHide on MacOS
I was wondering if there's a method on MacOS to have my application hide a hid device such as a game controller and instead have the receiving game/application see my app's virtual controller? Is this possible via DriverKit or some other form of kernel level coding? On Windows we have a tool known as HidHide that hids a game controller from all other applications. Is it possible to implement such behavior into an app or is that system level?
6
0
2.5k
May ’26
Possibilities of Overclocking Apple Silicon
I've been testing Apple Silicon devices in their desktop configurations on the Mac Studio and now retired Mac Pro and it seems like they're greatly bottlenecked by their clock speeds. For reference here's my testing results. Testing Results: Mac Studio M2 Max • 32GBs RAM • 30 core GPU • 1TB Storage CPU Utilization • 60% • 20W CPU Temperature • 47ºC GPU Utilization • 100% • 20W GPU Temperature • 55ºC Fan Speed • 50% Workload Duration • 2hrs Another point is that the clock speed on the M2 Max's CPU is 3.5 GHz and on the GPU it is 1.44 GHz at max performance. Which the Mac Studio has no trouble pushing. My question is how do I push those clock speeds higher? Cause 1.44 GHz at 55ºC is evidence for extensive headroom. I'm sure there are tools internally for testing the upper limits of the silicon, but it makes no sense why it would be set so low the Mac Studio is at no worries of melting. Is there any way to push the performance of my Mac Studio? FB22713867 - Possibilities of Overclocking Apple Silicon
1
0
305
May ’26
Metal, Vulkan, OpenGL & Godot
Greetings! I'm preparing to publish an app in Apple Store. It's a 2D Audio app made in Godot, already published in Google Store.. As we know, OpenGL is considered deprecated since iOS 12 / 2018 .. However given the current state of Metal, or Vulkan integration in Godot, and with the idea of bringing the Best possible experience on iOS.. I'm not completely sure what will be the best API to use as primary option.. -As good as Metal, or even Vulkan work in Godot; the fact of the matter is, each API has its strong and weak points.. -Metal: Native on iOS, fully compliant and supported. However it has two weak points: Initial Compilation Freeze - +5 sec. Performance Hit, (although negligible for final user) app uses 25% more CPU (on my iPhone 12). Battery drain? -Vulkan: In godot, Vulkan > MoltenVk > Metal More complex translation layer, but interestingly gives slightly better Performance than Metal.. Initial Compilation doesn't cause Freeze, because is lazy/delayed and performed while the app is starting. Uses 25% less CPU than Metal and gives slightly more stable Framerate. (iPhone 12) However, given the extra complexity it could be more prone to error, or Compatibility Problems, which are known and have been reported with older iOS devices (iPads come to mind..) Right? -OpenGL: No Initial Compilation Needed Max Performance, No CPU munch Universally supported, (in theory?) works Perfectly on my iPhone 12 with iOS 26.3 and 26.4.2 And all in all, gives the best Performance and user experience. -And that's pretty much the situation! Since the graphics API of choice, will have an effect and directly translate to User experience... what's then the best one? -This will be the first app I Publish on Apple Store, so as you can imagine I want to Comply with Apple as much as possible; and bring iOS users the best possible experience. However each one of the APIs seem to have a negative aspect.. Metal: 5sec Compilation Freeze Vulkan: Compatibility Problems? OpenGL: "Deprecated" In practical terms, right now, OpenGL gives the best Performance, and the best User Experience.. So what to do? -The Android version is published in Google Store in OpenGL Compat mode. Works perfectly. Even tho OpenGL has been Deprecated on iOS for 7+ years, it has survived all along, with no announced removal date from Apple. And it seems to work perfectly and be fully operational up to the latest iOS 26 version.. right? Maybe Apple is maintaining it for stability and compatibility reasons, even if they're no longer actively developing it? Butthee "deprecated" label sounds alarming, as if support could drop any day.. So what will be the best choice in this situation? -Will an app built primarily for OpenGL, (with Metal fallback) be Rejected right away in Apple Store? -Otoh Vulkan (via MoltenVK) could be a middle term solution, second best Performance, no Compilation Freeze.. But yeah, the Compatibility aspect is important; and while considerable improvements have been made in Godot's implementation, the current status or possible outcome is harder to assess.. Both Metal and OpenGL seem safer options in that sense..
5
0
1.1k
Apr ’26
ScreenCaptureKit recording output is corrupted when captureMicrophone is true
Hello everyone, I'm working on a screen recording app using ScreenCaptureKit and I've hit a strange issue. My app records the screen to an .mp4 file, and everything works perfectly until the .captureMicrophone is false In this case, I get a valid, playable .mp4 file. However, as soon as I try to enable the microphone by setting streamConfig.captureMicrophone = true, the recording seems to work, but the final .mp4 file is corrupted and cannot be played by QuickTime or any other player. This happens whether capturesAudio (app audio) is on or off. I've already added the "Privacy - Microphone Usage Description" (NSMicrophoneUsageDescription) to my Info.plist, so I don't think it's a permissions problem. I have my logic split into a ScreenRecorder class that manages state and a CaptureEngine that handles the SCStream. Here is how I'm configuring my SCStream: ScreenRecorder.swift // This is my main SCStreamConfiguration private var streamConfiguration: SCStreamConfiguration { var streamConfig = SCStreamConfiguration() // ... other HDR/preset config ... // These are the problem properties streamConfig.capturesAudio = isAudioCaptureEnabled streamConfig.captureMicrophone = isMicCaptureEnabled // breaks it if true streamConfig.excludesCurrentProcessAudio = false streamConfig.showsCursor = false if let region = selectedRegion, let display = currentDisplay { // My region/frame logic (works fine) let regionWidth = Int(region.frame.width) let regionHeight = Int(region.frame.height) streamConfig.width = regionWidth * scaleFactor streamConfig.height = regionHeight * scaleFactor // ... (sourceRect logic) ... } streamConfig.pixelFormat = kCVPixelFormatType_32BGRA streamConfig.colorSpaceName = CGColorSpace.sRGB streamConfig.minimumFrameInterval = CMTime(value: 1, timescale: 60) return streamConfig } And here is how I'm setting up the SCRecordingOutput that writes the file: ScreenRecorder.swift private func initRecordingOutput(for region: ScreenPickerManager.SelectedRegion) throws { let screeRecordingOutputURL = try RecordingWorkspace.createScreenRecordingVideoFile( in: workspaceURL, sessionIndex: sessionIndex ) let recordingConfiguration = SCRecordingOutputConfiguration() recordingConfiguration.outputURL = screeRecordingOutputURL recordingConfiguration.outputFileType = .mp4 recordingConfiguration.videoCodecType = .hevc let recordingOutput = SCRecordingOutput(configuration: recordingConfiguration, delegate: self) self.recordingOutput = recordingOutput } Finally, my CaptureEngine adds these to the SCStream: CaptureEngine.swift class CaptureEngine: NSObject, @unchecked Sendable { private(set) var stream: SCStream? private var streamOutput: CaptureEngineStreamOutput? // ... (dispatch queues) ... func startCapture(configuration: SCStreamConfiguration, filter: SCContentFilter, recordingOutput: SCRecordingOutput) async throws { let streamOutput = CaptureEngineStreamOutput() self.streamOutput = streamOutput do { stream = SCStream(filter: filter, configuration: configuration, delegate: streamOutput) // Add outputs for raw buffers (not used for file recording) try stream?.addStreamOutput(streamOutput, type: .screen, sampleHandlerQueue: videoSampleBufferQueue) try stream?.addStreamOutput(streamOutput, type: .audio, sampleHandlerQueue: audioSampleBufferQueue) try stream?.addStreamOutput(streamOutput, type: .microphone, sampleHandlerQueue: micSampleBufferQueue) // Add the file recording output try stream?.addRecordingOutput(recordingOutput) try await stream?.startCapture() } catch { logger.error("Failed to start capture: \(error.localizedDescription)") throw error } } // ... (stopCapture, etc.) ... } When I had the .captureMicrophone value to be false, I get a perfect .mp4 video playable everywhere, however, when its true, I am getting corrupted video which doesn't play at all :-
2
0
881
Mar ’26
Code sharing between iOS and watchOS
What's the recommended pattern for sharing a complex SpriteKit game scene (and basic game code) between iOS and watchOS targets without code duplication, given the platform differences in input and rendering?
Replies
2
Boosts
2
Views
113
Activity
2d
SpriteKit Continued Support
Hi! Question Could you provide some reassurance on the continued support for SpriteKit in the coming years? Trigger The deprecation of SceneKit at WWDC 2025 made me nervous. Context I use SpriteKit because: It can render any video AVFoundation can handle, which third-party engines don't do for several reasons including patents. This allows me to prototype UI that controls video with a game-like feel. It can render text and emojis through AttributedString, and text is hard. Thanks to a clear and well-exposed update loop, it can be integrated with libraries such as Core Image or Box2D. Example with Box2D here. It can draw dynamic shapes and paths with SKShapeNode, and visualize and respond to all the processing done at specific times during a frame. SKView is very handy to generate textures from nodes, and SKRenderer can be used to render a SpriteKit scene to video or sequence of images. This is possible thanks to multiple frameworks working together, including AVAssetWriter and IOSurface. Example of SpriteKit offline rendering here. Apple Alternatives When Apple announced the deprecation of SceneKit, I learned RealityKit in order to move my SpriteKit-based projects to RealityKit. RealityKit is interesting, but for 2D and 2.5D workflows I found several areas where SpriteKit remains significantly more practical: I had to lock physics to the XY plane, which could stress the engine and introduce unwanted overlap. Overlapping entities on a 2D plane was hard: ModelSortGroup did not provide the simple flexibility that SpriteKit zPosition provides. AFAIK there is no dynamic path/shape drawing in RealityKit. So drawing lines, visualizing physics and joints, rendering graph connections in the scene is not as easy as it is with SpriteKit shape nodes. SpriteKit is lighter and less power-hungry. Let me know if you need any more context or detail. Thank you!
Replies
1
Boosts
2
Views
111
Activity
2d
Are there details about what Rosetta functionality for "older unmaintained gaming titles" will be kept?
The developer documentation for Rosetta describing its end of support (https://developer.apple.com/documentation/apple-silicon/about-the-rosetta-translation-environment) says the following: Beyond this timeframe, we will keep a subset of Rosetta functionality aimed at supporting older unmaintained gaming titles, that rely on Intel-based frameworks. Are there details about which specific functionality this is? And as a concrete example, will parts of Rosetta that are needed by programs used to run and/or evaluate Windows games, such as WINE or CrossOver, remain supported?
Replies
1
Boosts
2
Views
132
Activity
2d
Minigame support in GameKit?
My app contains hundreds of games, each of which would benefit from its own set of achievements, leaderboards, etc. Is there any hope for minigame support in GameKit?
Replies
1
Boosts
3
Views
124
Activity
2d
How do I control a SwiftUI TextField with a game controller?
I've coded a text-adventure game in SwiftUI. (My game has no graphics or sound effects.) My app already supports keyboard navigation; I would like to add support for game controllers on iPhone. I can't figure out how to do it. I especially can't see any way to allow controller users to enter text in a TextField. I've read https://developer.apple.com/documentation/gamecontroller/supporting-game-controllers and it's all about button events. There's no reference to SwiftUI at all in that documentation, or any input-method editing at all. The only mention of "keyboard" is about treating the keyboard itself as if it were a game controller providing button events. How do I implement this?
Replies
1
Boosts
1
Views
100
Activity
2d
How to use Reality Composer Pro 3?!
I guess this is not an actual video Group Lab. sigh Would love to see a dedicated Reality Composer Pro 3 session - even for those of use actual Vision Pro devs that didn't get the lucky golden ticket to the Apple Park event. You need to make these interactions available to us in person during WWDC week. That all being said... How do I go about baking lighting in RCP3? I cannot find anything in the documentation. Thanks!
Replies
2
Boosts
0
Views
110
Activity
2d
Game Mode for games run by game launcher apps
If you have a "launcher-type app" (a regular macOS app bundle) which is used to launch the actual game executable (a non-bundled executable, such as a Java game), Game Mode does not seem to work as desired in this case. If the launcher app has the appropriate LSSupportsGameMode and LSApplicationCategoryType set, the launcher app will activate Game Mode if fullscreened but the actual game will not (FB18026957). Is there a workaround for this? It also seems like the system hardcodes some apps to act as "game launcher apps" which do have the desired behavior - for example, if you have a sample app set to Steam's bundle identifier (or just use Steam to run the program) and have this architecture where it runs another executable which is the real game, then that game can inherit Game Mode, which is also supported by system logs in Console (note the "launcher" labelReason): default 17:11:05.008533-0400 gamepolicyd Found game GameProcess(Optional("java"), pid=33754, euid=501, labelReason=launcher, launchedBy=Steam) Is there a way to opt into or apply for this behavior for our own apps? I previously asked this on the forums but I'm also wondering if any new developments have occurred since then.
Replies
0
Boosts
0
Views
88
Activity
2d
iPhone Failed to pair Xbox One gamepad after updating to iOS 26.5
One of my users updated his iPhone 16 Pro to iOS 26.5, and Apple TV to tvOS 26.5, both of them unable to pair a Microsoft Xbox One (Model 1708) gamepad, before updating (updated from iOS 18.x) it works normally. He also got an old iPhone on iOS 16.7 which was working fine with that gamepad. Any one met the same issue? feedback no. FB22809309
Replies
1
Boosts
0
Views
1.9k
Activity
2w
Apple API "CGDisplayCopyAllDisplayModes provides resolution list which does not match with system resolution for the external monitors.
Our application is trying to read all resolutions of an external monitor. We have observed that, for the external monitor there is a mismatch in resolution list in our application and the resolution list in system settings. We are using the apple API "CGDisplayCopyAllDisplayModes" to read the resolutions.
Replies
2
Boosts
0
Views
1k
Activity
2w
Please, implement the new GameSave framework on tvOS
Hi, I have a game which is available on iOS and tvOS and the gameplay is basically the same on both platforms. I'd like to enable my players to seamlessly continue their play sessions on all available platforms. Unfortunately, the new GameSave framework is not available on tvOS and neither is the old GKSavedGame API. I'm asking you to enable the new GameSave framework in a future version of tvOS. Thank you. I've also reported via Feedback Assistant with Feedback Number: FB22791051
Replies
1
Boosts
0
Views
703
Activity
3w
New GameSave API unexpected behavior
Hi, I'm implementing the new iOS 26 GameSave API in my game and I'm seeing an unexpected behavior when I try to handle custom conflict resolution. Here's what happens: directoryState.conflictedVersions is nil when directoryState.state is GSSyncStateConflicted. According to the API docs, this should never happen because there is no way to resolve the conflict. Here's the setup: I have 2 devices. Device 1 - iPad 10G iOS 26.5, and Device 2 - iPhone SE 3G iOS 26.5 and I run the same code on both devices. I disable the WiFi on device 2 to create a conflict I open the directory using [GSSyncedDirectory openDirectoryForContainerIdentifier: nil] Run [dir finishSyncingWithCompletionHandler:] After the callback returns I check dir.directoryState.state If the state is GSSyncStateReady, GSSyncStateOffline, or GSSyncStateLocal I write some data in a file and close the dir. I re-enable the WiFi on Device 2 and run the same code Now, on Device 2 dir.directoryState.state is GSSyncStateConflicted, as expected, but dir.directoryState.conflictedVersions is NIL and there is no way to continue and resolve the conflict. I'm expecting dir.directoryState.conflictedVersions to contain an array of GSSyncedDirectoryVersion objects as described in the API docs. One interesting bit is that if I replace [dir finishSyncingWithCompletionHandler:] with [dir finishSyncing: window completionHandler:] the UI conflict resolution works as expected. I'm using Objective C to call the API, if that matters. I've also reported via Feedback Assistant with Feedback Number: FB22790831
Replies
0
Boosts
0
Views
514
Activity
3w
CGSetDisplayTransferByTable is broken on macOS Tahoe 26.4 RC (and 26.3.1) with MacBook M5 Pro, Max and Neo
The CGSetDisplayTransferByTable() is not working on the latest round of Mac hardware, namely the MacBook Neo (external display), MacBook M5 Pro (both built-in and external display) and possibly the M5 Max. All tested apps (BetterDisplay, MonitorControl, f.lux, Lunar) exhibit the very issue both in macOS Tahoe 26.3 and macOS Tahoe 26.4 RC. Tested on multiple Macs and installations on the MacBook Neo and MacBook M5 Pro. This issue breaks several display related macOS apps. Way to reproduce the issue using an affected app: Install the app BetterDisplay (https://betterdisplay.pro) Launch the app, open the app menu, choose Image Adjustments and try to adjust colors. Adjustments take no effect Way to reproduce the issue programmatically: Attempt to use the affected macOS API feature: https://developer.apple.com/documentation/coregraphics/cgsetdisplaytransferbytable(::::_:) Here are the FB numbers: FB22273730 (Filed this one as a developer on an unaffected MBP M3 Max) FB22273782 (Filed from an affected MBP M5 Pro running 26.4 RC, with debug info attached)
Replies
5
Boosts
5
Views
2.5k
Activity
3w
SwiftUI + SpriteKit interop: best practices for HUD overlays in a tile-based puzzle game?
Hey all, I'm building a tile-based puzzle game for iOS and have been experimenting with using SwiftUI for the HUD (score, timer, pause menu, settings sheet) layered on top of a SpriteView that hosts the actual gameplay scene. So far the integration has been smoother than I expected — SpriteView drops cleanly into a ZStack, and I can drive SwiftUI state from the SpriteKit scene via an ObservableObject shared between them. That said, I've run into a few rough edges that I'd love some input on. The biggest one is touch handling: when a SwiftUI overlay (like a semi-transparent pause button) sits over the SpriteView, taps near the edges of the button occasionally get swallowed by the underlying scene, even when the button's hit area looks correct in the view debugger. I've tried .contentShape(Rectangle()) and bumping the frame, which helps but doesn't fully eliminate it. Curious if anyone has landed on a reliable pattern here, especially for transient overlays like toast notifications that need to ignore touches everywhere except on the toast itself. The other thing I'm weighing is animation ownership. Right now, gameplay animations (tile slides, match effects) live in SpriteKit, and HUD animations (score pop, combo counter) live in SwiftUI with withAnimation. It works, but the two animation systems don't share a clock, so when I want a "tile matched → score increment" effect to feel synchronized, I end up dispatching from the SKScene back to the ObservableObject and hoping the frame timing lines up. Has anyone found a cleaner way to coordinate timing across the two, or is this just the cost of mixing the frameworks? Would also love to hear from anyone who has shipped a game with this hybrid setup — any gotchas around Scene Phase transitions, backgrounding, or memory pressure that bit you in production? Thanks!
Replies
0
Boosts
0
Views
989
Activity
May ’26
HidHide on MacOS
I was wondering if there's a method on MacOS to have my application hide a hid device such as a game controller and instead have the receiving game/application see my app's virtual controller? Is this possible via DriverKit or some other form of kernel level coding? On Windows we have a tool known as HidHide that hids a game controller from all other applications. Is it possible to implement such behavior into an app or is that system level?
Replies
6
Boosts
0
Views
2.5k
Activity
May ’26
Possibilities of Overclocking Apple Silicon
I've been testing Apple Silicon devices in their desktop configurations on the Mac Studio and now retired Mac Pro and it seems like they're greatly bottlenecked by their clock speeds. For reference here's my testing results. Testing Results: Mac Studio M2 Max • 32GBs RAM • 30 core GPU • 1TB Storage CPU Utilization • 60% • 20W CPU Temperature • 47ºC GPU Utilization • 100% • 20W GPU Temperature • 55ºC Fan Speed • 50% Workload Duration • 2hrs Another point is that the clock speed on the M2 Max's CPU is 3.5 GHz and on the GPU it is 1.44 GHz at max performance. Which the Mac Studio has no trouble pushing. My question is how do I push those clock speeds higher? Cause 1.44 GHz at 55ºC is evidence for extensive headroom. I'm sure there are tools internally for testing the upper limits of the silicon, but it makes no sense why it would be set so low the Mac Studio is at no worries of melting. Is there any way to push the performance of my Mac Studio? FB22713867 - Possibilities of Overclocking Apple Silicon
Replies
1
Boosts
0
Views
305
Activity
May ’26
Metal, Vulkan, OpenGL & Godot
Greetings! I'm preparing to publish an app in Apple Store. It's a 2D Audio app made in Godot, already published in Google Store.. As we know, OpenGL is considered deprecated since iOS 12 / 2018 .. However given the current state of Metal, or Vulkan integration in Godot, and with the idea of bringing the Best possible experience on iOS.. I'm not completely sure what will be the best API to use as primary option.. -As good as Metal, or even Vulkan work in Godot; the fact of the matter is, each API has its strong and weak points.. -Metal: Native on iOS, fully compliant and supported. However it has two weak points: Initial Compilation Freeze - +5 sec. Performance Hit, (although negligible for final user) app uses 25% more CPU (on my iPhone 12). Battery drain? -Vulkan: In godot, Vulkan > MoltenVk > Metal More complex translation layer, but interestingly gives slightly better Performance than Metal.. Initial Compilation doesn't cause Freeze, because is lazy/delayed and performed while the app is starting. Uses 25% less CPU than Metal and gives slightly more stable Framerate. (iPhone 12) However, given the extra complexity it could be more prone to error, or Compatibility Problems, which are known and have been reported with older iOS devices (iPads come to mind..) Right? -OpenGL: No Initial Compilation Needed Max Performance, No CPU munch Universally supported, (in theory?) works Perfectly on my iPhone 12 with iOS 26.3 and 26.4.2 And all in all, gives the best Performance and user experience. -And that's pretty much the situation! Since the graphics API of choice, will have an effect and directly translate to User experience... what's then the best one? -This will be the first app I Publish on Apple Store, so as you can imagine I want to Comply with Apple as much as possible; and bring iOS users the best possible experience. However each one of the APIs seem to have a negative aspect.. Metal: 5sec Compilation Freeze Vulkan: Compatibility Problems? OpenGL: "Deprecated" In practical terms, right now, OpenGL gives the best Performance, and the best User Experience.. So what to do? -The Android version is published in Google Store in OpenGL Compat mode. Works perfectly. Even tho OpenGL has been Deprecated on iOS for 7+ years, it has survived all along, with no announced removal date from Apple. And it seems to work perfectly and be fully operational up to the latest iOS 26 version.. right? Maybe Apple is maintaining it for stability and compatibility reasons, even if they're no longer actively developing it? Butthee "deprecated" label sounds alarming, as if support could drop any day.. So what will be the best choice in this situation? -Will an app built primarily for OpenGL, (with Metal fallback) be Rejected right away in Apple Store? -Otoh Vulkan (via MoltenVK) could be a middle term solution, second best Performance, no Compilation Freeze.. But yeah, the Compatibility aspect is important; and while considerable improvements have been made in Godot's implementation, the current status or possible outcome is harder to assess.. Both Metal and OpenGL seem safer options in that sense..
Replies
5
Boosts
0
Views
1.1k
Activity
Apr ’26
Can Apple please add Nintendo Switch 2 Pro Controller support? This is a very popular controller.
Hi Apple, Can you please add support for the Nintendo Switch 2 Pro Controller? The first one is supported but the Switch 2 has been out nearly a year now and a lot of people want to use these controllers with macOS and iOS. Can you please consider adding support? Thank you.
Replies
1
Boosts
0
Views
661
Activity
Apr ’26
Noob ios 26 for game mobile legend só lag 🤮🤮
Why you don’t fix that ?
Replies
1
Boosts
0
Views
504
Activity
Apr ’26
Deaf friend
I just wonder what to do futures iPhone will change update
Replies
1
Boosts
0
Views
379
Activity
Apr ’26
ScreenCaptureKit recording output is corrupted when captureMicrophone is true
Hello everyone, I'm working on a screen recording app using ScreenCaptureKit and I've hit a strange issue. My app records the screen to an .mp4 file, and everything works perfectly until the .captureMicrophone is false In this case, I get a valid, playable .mp4 file. However, as soon as I try to enable the microphone by setting streamConfig.captureMicrophone = true, the recording seems to work, but the final .mp4 file is corrupted and cannot be played by QuickTime or any other player. This happens whether capturesAudio (app audio) is on or off. I've already added the "Privacy - Microphone Usage Description" (NSMicrophoneUsageDescription) to my Info.plist, so I don't think it's a permissions problem. I have my logic split into a ScreenRecorder class that manages state and a CaptureEngine that handles the SCStream. Here is how I'm configuring my SCStream: ScreenRecorder.swift // This is my main SCStreamConfiguration private var streamConfiguration: SCStreamConfiguration { var streamConfig = SCStreamConfiguration() // ... other HDR/preset config ... // These are the problem properties streamConfig.capturesAudio = isAudioCaptureEnabled streamConfig.captureMicrophone = isMicCaptureEnabled // breaks it if true streamConfig.excludesCurrentProcessAudio = false streamConfig.showsCursor = false if let region = selectedRegion, let display = currentDisplay { // My region/frame logic (works fine) let regionWidth = Int(region.frame.width) let regionHeight = Int(region.frame.height) streamConfig.width = regionWidth * scaleFactor streamConfig.height = regionHeight * scaleFactor // ... (sourceRect logic) ... } streamConfig.pixelFormat = kCVPixelFormatType_32BGRA streamConfig.colorSpaceName = CGColorSpace.sRGB streamConfig.minimumFrameInterval = CMTime(value: 1, timescale: 60) return streamConfig } And here is how I'm setting up the SCRecordingOutput that writes the file: ScreenRecorder.swift private func initRecordingOutput(for region: ScreenPickerManager.SelectedRegion) throws { let screeRecordingOutputURL = try RecordingWorkspace.createScreenRecordingVideoFile( in: workspaceURL, sessionIndex: sessionIndex ) let recordingConfiguration = SCRecordingOutputConfiguration() recordingConfiguration.outputURL = screeRecordingOutputURL recordingConfiguration.outputFileType = .mp4 recordingConfiguration.videoCodecType = .hevc let recordingOutput = SCRecordingOutput(configuration: recordingConfiguration, delegate: self) self.recordingOutput = recordingOutput } Finally, my CaptureEngine adds these to the SCStream: CaptureEngine.swift class CaptureEngine: NSObject, @unchecked Sendable { private(set) var stream: SCStream? private var streamOutput: CaptureEngineStreamOutput? // ... (dispatch queues) ... func startCapture(configuration: SCStreamConfiguration, filter: SCContentFilter, recordingOutput: SCRecordingOutput) async throws { let streamOutput = CaptureEngineStreamOutput() self.streamOutput = streamOutput do { stream = SCStream(filter: filter, configuration: configuration, delegate: streamOutput) // Add outputs for raw buffers (not used for file recording) try stream?.addStreamOutput(streamOutput, type: .screen, sampleHandlerQueue: videoSampleBufferQueue) try stream?.addStreamOutput(streamOutput, type: .audio, sampleHandlerQueue: audioSampleBufferQueue) try stream?.addStreamOutput(streamOutput, type: .microphone, sampleHandlerQueue: micSampleBufferQueue) // Add the file recording output try stream?.addRecordingOutput(recordingOutput) try await stream?.startCapture() } catch { logger.error("Failed to start capture: \(error.localizedDescription)") throw error } } // ... (stopCapture, etc.) ... } When I had the .captureMicrophone value to be false, I get a perfect .mp4 video playable everywhere, however, when its true, I am getting corrupted video which doesn't play at all :-
Replies
2
Boosts
0
Views
881
Activity
Mar ’26