TakeFlight — A Bird Life
CH Studios · Apple Developer Academy Challenge · Team of 5
Overview
TakeFlight is a survival simulation game where you play as a bird trying to live a full life on Belle Isle in Detroit. Manage hunger, avoid predators, collect nest materials, find a mate, hatch and raise baby birds, and ultimately escape the island. Built as an Apple Developer Academy challenge by a team of 5 — two engineers, two designers, and a project manager — it features a complete open-world game loop with five minigames running across interconnected systems. It's live on the App Store.
The Challenge
Games are among the most technically complex iOS apps to build. The Academy challenge required a complete, polished product under time pressure, with a cross-functional team working across engineering and design simultaneously. The engineering challenge was building five distinct minigame scenes — each with their own physics, timers, and input modes — that could transition seamlessly in and out of a single persistent open world without losing game state.
The Team
| Role | Name | Responsibilities |
|---|---|---|
| iOS Engineer | George Clinkscales Jr. | Hunger system, HUD components, item pickup and respawn, draining bar views, ViewModel bridge |
| iOS Engineer | Jaiden Henley | SpriteKit architecture, all minigame scenes, predator AI, camera system, GameKit achievements, SwiftData persistence |
| UI/UX Designer | Dorien Harris | Visual design, art direction, UI components |
| UI/UX Designer | Zoe Talley | Visual design, asset creation, UX flow |
| Project Manager | Ashlee Cunningham | Sprint planning, team coordination, delivery |
Engineering Contributions
- SpriteKit architecture split across 15 extension files. Each file owns one concern — camera, animation, baby, nest, predator, transitions, map, items, contacts. Avoided a monolithic scene class by organizing every system into its own focused extension.
- Exponential-damping camera system. Frame-rate independent camera follow using the formula 1 - exp(-stiffness × deltaTime). Includes a 20-point dead zone to eliminate jitter on small movements and boundary clamping to keep the camera inside the map.
- Per-nest independent baby timer system. Each nest stores its own spawn timestamp in SpriteKit userData. The update loop reads each nest's timer independently so multiple nests can coexist with different hunger percentages simultaneously.
- SwiftData full game persistence. Player position, camera position, nest location, baby state, inventory, and all gameplay flags persist across app restarts via a SwiftData GameState model. The game resumes exactly where it was left.
- Predator AI with directional sprite flipping. Predators move on randomized vertical or horizontal patrol paths. Direction is tracked via per-frame position delta stored in userData and rotation is applied in didEvaluateActions — after SKAction movement is resolved — so facing direction is always accurate.
- Male bird three-behavior wandering AI. Fly forward along current heading, turn at a random angle, or follow a circular UIBezierPath — chosen randomly and chained recursively via closure callbacks.
- Minigame scene transition system. Each transition saves player and camera position, pauses the incoming scene, shows SwiftUI onboarding instructions, then unfreezes the scene via a closure when the user taps Start. Returning from a minigame restores the saved state and checks win conditions.
- Hunger HUD and draining bar views. Frame-rate independent hunger drain using a time accumulator. Three separate draining bar components — hunger, predator proximity, and baby count — each driven by ViewModel published properties and animated independently.
- Item pickup with double-tap prevention and respawn scheduling. Items are renamed immediately on pickup to prevent race conditions, then respawn at their original position after a timed SKAction sequence.
- Game Center achievements. Eight achievements including building a nest, mating, raising a baby, and completing the escape. Reported via async GameKit calls with progress tracking.
The Five Minigames
Predator Escape
Timing-bar reaction game. Tap to land a moving needle in a shrinking safe zone. Failure triggers the game over screen with a terminal-aesthetic death report.
Feed Yourself
Catch falling food while avoiding spiders. Supports three input modes: touch, keyboard arrow keys, and CoreMotion accelerometer tilt. Hunger bar refills on completion.
Build a Nest
Memory and drag-and-drop puzzle using the four collected materials — stick, leaf, spiderweb, dandelion. Completing it places a nest at the nearest tree base in the overworld.
Feed Baby Birds
Swipe rope physics to drop food into a moving catcher beneath each nest. Each baby has an independent 2-minute hunger timer visible as a color-coded progress bar.
Leave the Island
Flappy Bird-style escape through obstacle gaps with a 15-second countdown. Completing it triggers the win screen, a Game Center achievement, and the end of the game loop.
Tech Stack
| Technology | Purpose |
|---|---|
| SwiftUI | All menus, HUD overlays, status bars, inventory, onboarding sheets, and game over screens |
| SpriteKit | Open world scene, physics engine, all five minigame scenes, particle effects, animations |
| SwiftData | Full game state persistence — position, inventory, nest, baby, and all gameplay flags |
| GameKit | Game Center authentication, leaderboards, and eight achievement milestones |
| GameController | Keyboard and external controller support for menus and minigames |
| CoreMotion | Accelerometer tilt input for the Feed Yourself minigame |
| AVFoundation | Spatial audio and sound effects throughout |
Outcome
TakeFlight shipped to the App Store as part of the Apple Developer Academy challenge program. It features a full save and resume system, eight Game Center achievements, keyboard and controller support for iPad, a complete contextual tutorial system, and polished audio and haptic feedback throughout. It remains one of the most technically complex projects built during our time at the Academy — a complete game engine, five physics-based minigames, and a persistent open world, all built by two engineers under challenge time constraints.