Description
Pack of reusable code containing solutions for:
(specific details for each item ahead on this page)
- Ads manager (easily extensible, includes Vungle, AppLovin, RevMob, TapJoy, Chartboost and Playhaven, recently updated, on July/2016, to their newest SDKs)
- Event System and "related" (includes features for showing generic dialogs, news delivery, local notifications, player rewarding campaigns (in-game gifts) and app review request).
- Game Configuration/Versioning System(several features, including encryption and remote update management)
- User Data Manager
- Game Center Manager
- Sound Manager
- In App Purchase manager
- Timer and "Call Scheduling" system
- Additional code utility functions and macros
Skills
- Objective-C
- SDK Integration (OpenAL, iOS IAP, Flurry, Vungle, AppLovin, RevMob, TapJoy, Chartboost and Playhaven)
Environment
- XCode
- MacOSX
- Perforce
- Pivotal Tracker
- Time Doctor
Role
Game Programmer at Awesome Wicked Games (Canada)
Team
Sole-programmer on this project (company team detailed on "Maze Thief" page)
Participation Period
July, 2013 to May, 2014 having shared workload with "Maze Thief".
Project Status
It was integrated to about 30 released AWG games and sold to several other companies (as fully open code).
The story behind
After getting choked with the huge time spent by the company coders on integrating and maintaining ads provider APIs for more than 50 games released on App Store, I have conceived and proposed a generic and reusable "Ads Management System" (features explained below on this page). The company CEO, who was not a coder, got afraid about this not worthing the investment, so I compromised myself with charging less than a half of the time spent on this system until it pays itself by saving time on integrations for 4 different games. In a few months after the first functional version was released this system ended up integrated to about 30 of the company games and was heavily advertised and sold to customers that would buy our codes. Only the "Ads Manager" could reduce to less than 5% the amount of code previously needed to the integrate the supported ads providers to a game. This system ended up growing to include other features, becoming the "Reusable Code Pack" (internal name), advertised as "Systems Manager" to costumers.
Main Responsibilities
- Identifying common code needs between the company projects and writing clean, reusable and extensible code, with "extra commented" interfaces, to be used within the team and also sold to external customers.
- Write clean integration and usage tutorials/documentation with updated revision history for each one of the reusable systems implemented, including video tutorials for some of them.
- Assist the AWG team on integrating and using the "Reusable Code Pack"
- Providing e-mail support for some customers who bought the "Reusable Code Pack"
Main Programming Tasks Performed
- Ads manager: this system abstracts specific providers through a generic "AdsProvider" interface, making the AdsManager class able to manage multiple providers. After an easy integration, requiring very few lines of code, all the customization settings were made via a plist file. Placement options include pre-caching, timer features, randomness features, several ads types (as supported per each provider), replacement of ads that fail to load, etc.. A new provider could be added by just implementing the AdsProvider interface and by just draging and dropping the code folder all the new providers and SDK updates would be applied at once to a project already having the AdsManager integrated.
- Event System and "related": Much more than a common event manager, it supports event definition and triggering through plist settings together to automatic event counting and timing. All that makes easy to program, via plist files, several actions to happen for accumulated player actions. On top of this system, the "Reusable Code Pack" already comes with features for showing generic dialogs, news delivery, local notifications, player rewarding campaigns (in-game gifts) and app review requesting.
- Game Configuration/Versioning System: Abstract plist file loading from the bundle, app temp directory and/or server, already dealing also with decryption, game versioning and generation of encrypted files for the bundle and server sides. Also, after we update the game configuration plists it can generate a light server side config file that contains only changed settings to be automatically merged with stored plists at the players devices, updating the game to the newest version with no need to submit new builds to App Store (or to TestFlight during production). Every configuration of the game benefits from this system, including those related with the Event System and the Ads Manager.
- User Data Manager: provides basic features for loading and saving encrypted user data to the app documents folder, containing extra code tricks for "cheating" prevention.
- Game Center Manager: manages the player achievements being integrated with the User Data Manager. It abstracts the Game Center APIs and makes achievement getting and setting reduced to one line of code. Also, it assures achievement synchronization between the user data and the Game Center server, in such way the coder using this manager doesn't need to care about the player being offline or not.
- Sound Manager: (based on the OpenAL library) by passing sound file names, it allows playing one music file at time and several sound effects at a time (looping or not), managing the sound related objects creation and destruction, avoiding duplicated objects and offering global controls for stopping all sounds effects and for turning sound effects and music on and off.
- In App Purchase manager: Abstract a lot of the complexity for the iOS IAP API, automatically managing the available products and reducing to one line of code the most relevant operations (including purchase restoring). Just one handler function was required to handle simplified outcome statuses. Also, it includes receipt validation for preventing against frauds.
- Timer and "Call Scheduling" system: Provides time utilities, properties and macros and act like the NSObject method peformSelector:withObject:afterDelay, but offering the possibility of pausing and resuming calls, allowing the gameplay to be easily and properly paused.
- Additional code utility functions and macros: LOTs of generic and reusable utilities, many of them are used by the reusable code pack internally. Main stuff are: parsing helper macros, data structure utilities, easy iOS alert dialog prompting, internet connection checking, device model and characteristics checking facilities, 2D math operations, file handling operations, dictionary handling utilities, encryption, etc..