We have a 2023 Mac mini with an Apple M2 Pro chip. The Mac has two displays connected. If a SpriteKit application has two windows on separate desktops, one of the windows can’t run animations.
You can easily replicate this issue with the following steps:
- Create a new macOS project in Xcode.
- Select the sample Game project with SpriteKit as the technology.
- Edit the fade duration in GameScene.swift to make the animated nodes live longer (e.g. 15 seconds).
- In AppDelegate.applicationDidFinishLaunching, add code to instantiate a second window:
let mainStoryboard = NSStoryboard.init(name: NSStoryboard.Name("Main"), bundle: nil)
if let newWindow = mainStoryboard.instantiateInitialController() as? NSWindowController {
newWindow.showWindow(self)
}
- Run the app. If both windows are on the same desktop, animations run correctly. If the windows are on separate desktops, then animations halt on the 1080p desktop, even though the SKView reports full frame rate.
You can also just check out the sample project from my github repo: https://github.com/lanephillips/SKTest
The issue does not occur if the application is built for Intel processors only and run on Apple Silicon under Rosetta.
We've seen this issue occur in both macOS 13 and 14. I've filed a report through Feedback Assistant, but I'm posting here in case someone else has seen this and has a workaround.