Title:
SpriteKit FPS drops significantly on iOS 26.3.1 when touching screen, even in a minimal scene
Summary:
On a real device running iOS 26.3.1, FPS drops significantly in a very simple SpriteKit scene when touching or moving a finger on the screen.
This happens even with a minimal setup where update(_:), touchesBegan, and touchesMoved are not overridden.
Because the issue reproduces in a minimal scene, I suspect a performance regression in SpriteKit and/or iOS rather than in app-specific logic.
Environment:
OS: iOS 26.3.1
Device: iPhone 12
Xcode: 26.3
Build Configuration: Release
Framework: SpriteKit
FPS measurement: SKView.showsFPS = true
Steps to Reproduce:
Present a minimal SpriteKit scene.
Enable SKView.showsFPS = true.
Add only a very small number of nodes to the scene.
Do not override update(_:), touchesBegan, or touchesMoved.
Repeatedly tap the screen or move a finger around.
Actual Result:
The scene stays around 60 FPS when idle.
FPS drops significantly when touching or moving a finger on the screen.
The drop appears to get worse as the node count increases.
The issue still reproduces even if touchesMoved is empty or not overridden at all.
Expected Result:
A minimal scene like this should remain close to 60 FPS even while touching the screen.
At minimum, FPS should not drop this much when the app does not perform meaningful touch handling.
Notes:
Time Profiler does not point to a clear heavy app-specific function; instead, frame time worsens during touch interaction.
Since this also reproduces in a minimal scene, I do not believe the root cause is only in my game logic.
Similar reports exist describing SpriteKit framerate drops on recent iOS versions, including cases where the issue appears in very simple scenes.
Minimal Reproducible Code:
import SpriteKit
final class TestScene: SKScene {
override func didMove(to view: SKView) {
backgroundColor = .black
scaleMode = .resizeFill
let textures = [
SKTexture(imageNamed: "title1"),
SKTexture(imageNamed: "title2"),
SKTexture(imageNamed: "title3"),
SKTexture(imageNamed: "title4"),
SKTexture(imageNamed: "title5"),
]
let node = SKSpriteNode(texture: textures[0])
node.position = CGPoint(x: size.width * 0.5, y: size.height * 0.5)
addChild(node)
let anim = SKAction.animate(
with: textures,
timePerFrame: 8.0 / 60.0,
resize: false,
restore: false
)
node.run(.repeatForever(anim))
}
}
import UIKit
import SpriteKit
final class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let skView = SKView(frame: view.bounds)
skView.showsFPS = true
skView.showsNodeCount = true
skView.ignoresSiblingOrder = true
skView.preferredFrameRate = 60
view.addSubview(skView)
let scene = TestScene(size: skView.bounds.size)
skView.presentScene(scene)
}
}
Topic:
Graphics & Games
SubTopic:
SpriteKit
0
0
43