Bug im SpriteKit-Mustercode von Apple (Xcode 8)

Wenn Sie in Xcode ein neues Projekt vom Typ iOS/Game/Spritekit oder tvOS/Game/SpriteKit erstellen, dann richtet Xcode wie üblich einige Musterdateien ein. Diese enthalten bereits ein ausführbares Programm, das ‚Hello World‘ anzeigt. Nicht ungewöhnlich, würde man meinen.

So sieht die App aus, die aus dem SpriteKit-Mustercode erstellt wird. Ein wenig trist, ohne Animation oder Interaktion ...
So sieht die App aus, die aus dem SpriteKit-Mustercode erstellt wird. Ein wenig trist, ohne Animation und Interaktion …

Ungewöhnlich ist allerdings, dass dieses Hello-World-Projekt zwei Szenen-Dateien und fast 100 Zeilen Code umfasst, der über die leere Schablone hinausgeht. Was macht der Code?

Der Code macht nichts, weil die Datei GameViewController.swift einen kleinen Fehler enthält. In der Methode viewDidLoad steckt die Zeile:

if let scene = SKScene(fileNamed: "GameScene") {    // falsch

In dieser Zeile müssen Sie SKScene durch GameScene ersetzen:

if let scene = GameScene(fileNamed: "GameScene") {   // richtig

Kurze Erklärung: Die falsche Code-Zeile erzeugt ein SKScene-Objekt, dessen Inhalt in der Datei GameScene.sks gespeichert wurde. Der in der GameScene.swift-Datei formulierte Code bleibt wirkungslos, weil ja kein GameScene-Objekt erzeugt wurde.

Der korrigierte Code lädt ebenfalls das aus GameScene.sks resultierende Objekt, verbindet es dieses Mal aber korrekt mit der GameScene-Klasse (die von SKScene abgeleitet ist). Der eigene Code in GameScene.swift erwacht zum Leben …

Wenn Sie das Testprogramm jetzt nochmals ausführen und mit dem Finger über den Bildschirm streichen, erscheinen lauter rotierende Vierecke, die nach kurzer Zeit wieder verschwinden. Der Effekt sieht ausgesprochen nett aus:

Bei der korrigierten Fassung markieren rotierende Rechtecke Berührungen am Bildschirm. Sieht doch gleich viel besser aus!
Bei der korrigierten Fassung markieren rotierende Rechtecke Berührungen am Bildschirm. Sieht doch gleich viel besser aus!

Wo programmiert wird, passieren Fehler, und wenn ich programmiere, vermutlich eher mehr. Kein Grund zur Schadenfreude also. Wenn mich nicht gerade Apple-Mitarbeiter mit ihren App-Store-Richtlinien quälen würden …

Also, mein Vorschlag: Vor der Freigabe von Xcode 8.1 einfach mal alle mitgelieferten Beispielprogramme bzw. Code-Schablonen vom App-Store-Team begutachten lassen ;-)

Update 17.8.2017: Es hat sich herausgestellt, dass nicht der Template-Code fehlerhaft war sondern ein Detail in den SpriteKit-Bibliotheken. In aktuellen Beta-Versionen von iOS 11, tvOS 11 und macOS 10.13 ist das Problem behoben. Sofern Sie in Xcode 9 ein SpriteKit-Projekt auf Basis des Template-Codes erstellen und auf den neuesten iOS/tvOS/macOS-Versionen testen, funktioniert alles wie es soll. Apple-Developer-Mitglieder können hier den Bug-Report nachlesen.

2 Gedanken zu „Bug im SpriteKit-Mustercode von Apple (Xcode 8)“

  1. Vielen Dank für den Hinweis,
    leider lassen sich Ihre Spritekite Beispieldateien auch nicht kompilieren :
    ../swift-for-kids-1/spritekit1/ios-hello-spritekit/GameViewController.swift:31:17: Method does not override any method from its superclass

    1. Einfach Editor/Convert/To Current Swift Syntax ausführen.

      Die Beispieldateien zu den Swift-for-Kids-Blogs habe ich mit einer frühen Beta entwickelt. Wenn ich dazu komme, werde ich eine aktualisierte Fassung machen.

Kommentare sind geschlossen.