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.
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:
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.
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
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.