For Divino Classical Education, we drew upon our code base from our three other apps and developed some new skills as well. We learned Size Classes, how to make the code very robust, implementation of In-App Purchases and how to design a CollectionView. To create a compelling learning experience, more than 80 percent of the development hours for this App were for content creation. There are 9 Easter Eggs per category with interesting and fun stories for all ages.
Below are some of programming details.
Easter Eggs and CollectionViews
Inspired by Pokémon GO, we wanted to make learning even more fun, so we added Easter Eggs. First we programmed the logic for finding an Easter Egg. And then we needed an efficient way to present a grid of the Easter Eggs, aka IQ-Dex items. The UICollectionView was ideal for that. So as additional categories are added, the IQ-Dex page is easy to update.
This was the first app where we used Apple size classes. We built the app originally for the newer model iPhones. However, the edge cases needed customization. So we used Size Classes (custom presentation and font sizes for particular device categories).
In particular, due to the much larger size of the iPad an iPad Pro, we had to modify our constraints and Stack Views so that the user experience worked well on those devices too.
Consumable In-App Purchases – Buy Hints
We wanted this app to be available for interested users without cost. However, it is easier to learn by using hints so that you have time to memorize the correct answer before the screen disappears. So for Divino Classical Education we added consumable in App Purchases as an option.
Building the code was tough enough, but purchase options require the additional step of working with Apple for Certificates.
Also, In-App Purchases cannot be tested in Simulator, so we had to create a special user profile to test the purchases on actual devices.
In all cases of our In-App Purchases we are compliant with the Apple Developer terms and conditions.
Due to the complexity and quantity of content in Divino Classical Education, we had to make sure that we optimized the code. For example, we used:
- if-let constructions for robustness, so that variables would not end up with a nil value
- removed “self.” whenever possible
- accounted for various threads and timers and built in checks to prevent errors
- lots of testing and corrections, especially to handle the edge cases
- favored immutability, choosing “let” over “var” whenever possible
At the time of this publication, the app has not had any crashes as shown by data collected by Apple.
What’s Next for Divino Classical Eduction
We are working on additional categories to add to the App. Next up is the History module.