Call me “old school”. It wouldn’t be inaccurate. I prefer to think of myself as a visual thinker. I like maps. I like architectural diagrams and schematics. They provide context and outline relationships between entities. I like documentation. So, with that said here’s the technical specifications for the IllumiMaze app.
Technology Overview: The technology behind this app includes:
Maze Files: XML structures parsed and imported into SQLite
Tech Documentation: OmniGraffle and Numbers
App Structure
The first diagram is an outline of the structure of the app. This is where my preference for visual diagrams is most obvious. Outlined here are all the app’s major and minor screens, any relationships between them and how they interact with the app’s major routines and utilities.
The key block details types of information, entities, and functions. Not all the app’s routines are shown here. There are a number of minor routines like the “build.settings” and “config.lua” files, among others, that don’t really need to be shown here (unless you’re more obsessive compulsive than I am!)
I find diagrams like these extremely helpful when returning to an app after an extended period of time to make updates, enhancements or bug fixes. It makes it easier to see and trace through the app’s structure to pinpoint where to dive back into the code and how updates to one area may affect another.
The second set of diagrams below describe the database schema used by the app. It preserves the state of the game play allowing the player to start, pause and restart a maze. It also records the number of times a maze has been played and whether or not the player successfully solved the maze.
The first time a maze is selected for play the maze’s definition is loaded from an XML file into the database. This happens just once. This mechanism allows additional mazes to be designed and added to the app as simple XML files and loaded as needed.
The Control table is a common feature I add to every app. It often holds the player’s preferences. More importantly it holds the current version of the database. If changes are ever needed to the database they can be made as the app starts and runs its initialization routine. This routine checks the current version of the database and will update the database – structure and/or data – as needed if the database is not up-to-date.