(átneveztem a topicot Xcode-ra, mert nem hiszem, hogy verziónként lenne értelme egy-egy új topiknak.)
Van egy projektem. Xcode 9 alatt hoztam létre és most Xcode 10-et használok még macOS10.13.6-on. Ez a projekt SpriteKit alapú. iOS 10-ig van a kompatibilitás visszafelé. Még kiadás előtt áll, de a tesztek nagy részét iOS11-en és iOS12-n futtattam mostanában, de korábban nézegettem néha iOS 10 szimulátorral is.
Ezt a projektet lemásoltam, mert ugyanerre épül majd a második projektünk is. Pontosabban új projektet hoztam létre és csak a releváns fájlokat másoltam át.
A lényeg, hogy az új projekt nevében van egy “-” jel. Hónapokkal a létrehozása és iOS 11 tesztek sokasága után leteszteltem az új projektet iOS10-en. És elhasalt már az elején a Scene betöltésénél.
Amikor létrehozom a SpriteKit alapú iOS játékot, akkor létrehozza az alap GameScene swift és sks fájlokat, valamint a GameViewController.swift fájlt. Ez utóbbiban semmit sem írtam át, még az eredeti kód van. A GameScene fájlnál meg nem változtattam meg az osztály nevét, tehát ugyanúgy GameScene a neve az osztálynak, mint eleinte.
A lényeg, hogy a GameViewController.swift elhasalt induláskor ennél a sornál:
if let sceneNode = scene.rootNode as! GameScene? {
Már eleve ez a sor is furcsa, miért oldották meg így, miért nem ez van:
if let sceneNode = scene.rootNode as? GameScene {
(Bár ennek persze az az előnye, hogy mindig crashel az app és felhívja a fejlesztők figyelmére hogy ott van a hiba és nem pedig csak az van, hogy szürke háttér van mindenkinek és nem indul el egyáltalán az app, és a fejlesztők meg néznek bambán, hogy miért nem tölti be a GameScene osztályt, amikor semmi sincs elírva és iOS11-en pedig jó…)
De ez most nem lényeg. A lényeg az, hogy több napig szívtam mire rájöttem, hogy a target nevében lévő “-” karakter miatt hasal el a kód. Kerestem neten megoldást, de azon kívül, hogy másnak is volt ilyen gondja, nem derült ki hogy mit lehet tenni. Írták néhányan, hogy egy új projektet kezdtek és úgy megoldódott (aztán persze lehet a projekt neve nem ugyanaz lett és ezért működött).
Én is csak úgy jöttem rá, hogy létrehoztam egy új “asdf” nevű targetet (nem új projektet), ami nem hasalt el kezdéskor. Majd elkezdtem átalakítani az eredeti Targethez képest (info plist, Build Phase, Build Settings, stb…) és egy idő múlva ez is elhasalt. Akkor kezdtem átnézni egyesével, hogy melyik módosítás az, ami kinyírja. És akkor jöttem rá, hogy amikor “-” jel van a target nevében, akkor elhasal a kód.
Szóval kb 2 napba telt mire rájöttem, hogy ez egy Apple bug, amit bármikor tudok reprodukálni. Persze be is jelentettem a bugreportnál. Kíváncsi leszek, hogy lesz-e belőle bármi, mert amit még nem tudok az az, hogy rendszer szinten van-e probléma vagy csak az Xcode fordítójában.