Comment fonctionne réellement SpriteKit? Le code du framework est-il compilé dans l'application ou fait-il partie d'iOS lui-même? Je remarque qu'à chaque mise à jour majeure d'iOS, je me retrouve à devoir réécrire une tonne de code et à corriger des bugs dans mon jeu SpriteKit. Pourquoi cela?
Réponses
Trop de publicités?L'environnement d'exécution de SpriteKit se trouve sur le téléphone, et n'est pas une partie de votre application. Cela permet d'économiser de l'espace (sinon, chaque application contiendrait une copie de toutes les bibliothèques d'exécution qu'elles utilisent, entraînant une importante duplication) mais peut entraîner le genre de problèmes que vous rencontrez, où les mises à jour de l'exécution peuvent 'casser' des applications qui fonctionnaient auparavant.
Cela se produit lorsque vous appelez une fonction iOS (dans SpriteKit, UIKit etc.) votre code se branche vers un code stocké dans le téléphone lui-même. Si ce code change (avec une mise à jour iOS) et s'attend soudainement à un CGVector au lieu d'un CGPoint, ou un 3ème paramètre lors d'un appel de fonction, le programme échouera.
Certains compilateurs ont la capacité de 'lier' les bibliothèques d'exécution avec l'exécutable, rendant l'application plus résiliente aux mises à jour du système d'exploitation, mais cela peut avoir des effets secondaires, comme des programmes fonctionnant avec une exécution datant de plusieurs années (voire décennies pour certains codes avec lesquels j'ai travaillé) qui ne fonctionnent tout simplement plus (l'an 2000 a fourni des exemples de cela, avec d'anciennes versions de l'environnement d'exécution COBOL d'IBM sur les mainframes qui n'étaient pas conformes à l'an 2000) et mettre l'application à jour est un travail massif, comparé à devoir se mettre à jour pour une seule version incrémentielle de l'exécution.
Cela fait partie d'iOS. Vous pouvez utiliser le mode OpenGL précédent dans iOS 9.X en définissant le drapeau PrefersOpenGL=YES dans Info.plist, pour plus d'informations consultez https://stackoverflow.com/a/37768928/763355