Which of Apple's game technologies can I use?
Writing this down here because I didn’t see an easy reference to it anywhere and I just took the time to figure it out.
I’m starting a new game-ish thing and figuring out what I want to build it in. What technologies can I use? In particular, I’m looking at:
I personally still own:
- an iPad 2 running iOS 9 (oh how I wish I could roll that back to iOS 6)
- an iPhone 4 running iOS 7
- my daily iPhone 6 running iOS 10
- and at work I have an iPad 1 running iOS 5 (so much nicer to use than the iPad 2).
My iMac and MacBook Pro are both on El Capitan. The iMac’s too old for Sierra, and I don’t want my daily computers on different operating systems. As far as Apple’s game related technologies go, El Capitan is the equivalent of iOS 9.
Why go as far back as that iPhone 4? My 6 year old son likes to use it. I could also suck it up and start doing Android dev and support his Kindle, but… eh.
So here’s a quick breakdown of what’s supported on those devices.
No Swift, no SpriteKit, no SceneKit, no GameplayKit. GLKit’s good here. I’ll need to use Xcode 6.4 to compile for it. Apple’s GLEssentials example works just fine on that iPad 1, although I’m only hitting about 21 frames per second on it, even when compiled for release.
Swift up to version 2.3, I think. It doesn’t look like I can still target iOS 7 using Xcode 8, so I’m limited to what’s supported in Xcode 7.3.1. No SceneKit or GameplayKit. GLKit works fine, of course.
SpriteKit’s initial release is supported, which means:
- The scene graph
- Texture atlases
- Core Image filters
- Particle systems (with editor support)
- Really basic editor in Xcode
I don’t have a device that’s limited to or running this version, but I’ll include it for completeness. Xcode 8.2.1 still supports iOS 8, so Swift 3 is an option. It also introduced SceneKit, so there’s a 3D engine in there. I don’t know anything about SceneKit beyond that it does 3D, so I can’t speak more about that. (I sure as heck don’t have the time for 3D at the moment. :D)
Still no GameplayKit here. New stuff in SpriteKit:
- GLSL Fragment Shaders
- Can render SceneKit stuff into SpriteKit sprites
- The editor in Xcode 8.2.1 is much, much better than the one in Xcode 6.4.
GameplayKit finally comes into play here, giving us some handy tools:
- Deterministic random number generators. (e.g. you can create N generators and seed/use them independently.)
- An Entity/Component system
- State machines
- Useful AI bits
Most of GameplayKit is straightforward to write yourself, but it’s nice to have well-tested, proven implementations of that stuff.
- Positional audio
- Camera nodes
- Reference nodes, which make editing levels in Xcode much cleaner/faster.
GameplayKit also gets some integration with SpriteKit:
- Link your scene nodes to your entities
- Create pathfinding graphs from your scene’s node bounds, physics bodies, and textures.
I’ve probably missed some stuff up there, but this is the stuff I’m likely to care about.
Part of me’s tempted to go the raw OpenGL (or at least GLKit) route: gives me the most control, and I can add whatever I feel is missing, etc. It’s a huge time sink though, and at best I only have about an hour a day for personal projects right now, so it makes more sense to lean on these things when they’re available.
I’m kind of iffy about using Swift: I’d like to use it, but if I want to target my iPhone 4 I have to use Swift 2.3, and it feels silly to start a new project on what’s already an obsolete version.
I guess that leaves me two real options:
- Support the iPhone 7, use the original SpriteKit release and Objective-C.
- Target iOS 9, use SpriteKit and GameplayKit with Swift 3.