Currently browsing: Projects

Peach Maps – Searchable Apple Maps on your browser before official API is released

Two days ago I found out that Apple website featured an Apple Maps map to show this year’s WWDC location so I checked out its API and built a quick demo which allows you to search addresses and display them on Apple Maps: Peach Maps 🗺 (source code).

I added a search form which uses OpenStreetMap to get the results. The project only uses static files so it can be easily hosted on any server.

Introducing… MawKit

Recently I’ve released two iOS games (with Javier Rodríguez Vidal‘s and Víctor Grau Moreso‘s help). Both games use Cocos2d-x engine and a custom open source framework built on top of it named MawKit which I want to introduce in this post.

Why another framework?

We started developing Hop Raider last year’s November. At that moment there was a beta project called SDKBox focused on providing cross-platform plugins to Cocos2d-x but our experience was pretty frustrating: ads plugins which used outdated third-party APIs and spammy log-level, leaderboards/achievements plugins really buggy, almost no support for OS X, not-well documented plugins and features missing.

So we decided to develop our own solution, originally focused on offering a cross-platform (Android, iOS, OS X) implementation for ads and leaderboards/achievements, and called it MawKit. We developed the first version as we wrote Hop Raider and refactored it to make it open-source when we developed Blimp Journey.

It is written in C++, Java and Objective-C++ and offers callbacks to handle asynchronous operations, avoiding busy-waiting and global variables. MawKit is fully documented with Doxygen although we are working on improving Github’s documentation at the moment.

What does MawKit offer?

MawKit includes platform-specific implementation for features like:

  • Leaderboards and achievements (Google Play Games on Android and GameCenter on iOS/OS X).
  • Ads (Admob and AdColony on both iOS and Android – noop implementation for OS X as there is no oficial SDK for this platform).
  • In-app purchases.

As well as cross-platform utilities like:

  • Mathematical helpers (random number generator, ranges).
  • A simple key-value database with local persistence.
  • Additional FiniteTimeActions (move a node to the position of a different node, regardless it is static or in movement, shake a node, etc).
  • Logging utilities (prepending prefixes to the logged message to easily identify their priority)
  • Infinite parallax nodes (both vertical and horizontal).
  • Device utilities (get screen’s size, hardware performance and motion sensors coming soon).
  • Fabric‘s Answer (all platforms) and MixPanel (iOS) support.

Here are some nice snippets:

  • Storing money with KVDatabase:
  • Reporting new score:
  • Checking whether an achievement is unlocked:
  • Showing an ad:
  • Throwing a dice:
  • Moving a node to the position of another moving node (bonus: this snippet is part of Hop Raider):
  • Getting current language:

Ideas, suggestions, contributions…

… are welcomed as Github issues or pull requests.

 

 

App Store review frustrations

Today a Hop Raider‘s update was rejected and I remembered my latests experiences with App Store review. I decided to write about three of them and share my frustrations so neither I nor you feel alone when your app is rejected for apparently no good reason.

River Bunch pricing

River Bunch App Store statuses

Last year I was working on River Bunch, a game for iOS where you are a lizard who ha
s to protect its eggs, preventing some mosquitos from stealing them; an easy game for casual players. At some point in development I needed to transfer the game from an Apple Developer account to a different one. I look for the Transfer app button in iTunes Connect because I had previously seen it but I couldn’t find it then.

It turned out that the Transfer app button was enabled only in apps that where published on the AppStore at least once. River Bunch wasn’t and in fact it wasn’t ready to be published at that moment so I decided to submit it to the App Store as it was (a playable but unfinished game) with an incredibly high price (999$) so no one would download the App. As soon as it was published on the App Store I would initiate the transfer and took it down. Easy, right?

App Store review team didn’t like my approach and rejected River Bunch. The reason was they have questions about app’s metadata, specifically about pricing: they asked if I made a mistake putting that price. I explained the situation and was told to put the intended final price (free), resubmit it (waiting for review again) and then removing it from store quickly before no one downloaded the app.

Frustrating as transferring the app to the new Apple Developer account would have been a much simpler and quicker solution, but I was not offered that possibility. Another easy solution would have been just approving the app with that price but again it was not an option.

Placeholder AppExtra: another thing you can’t do without a previously binary approved is… deleting the app. Yeah, you can remove an app form iTunes Connect if you have a binary approved but if you were just playing around and registered apps you weren’t planning to publish later you’ll end up with placeholder icon and random names taking space in your iTunes Connect dashboard.

Caff picture in picture

Later last year I was working on a Caff update. It added, among other features, support for iOS 9 Picture in Picture playback on iPad. This feature required enabling Audio, AirPlay and Picture in Picture background mode. If this weren’t enabled then Picture in Picture won’t work outside the app, that is, you couldn’t be playing a video and using a different app of browsing your home screen.

App Store review team rejected the update because it was not clear why Caff had enabled Audio, AirPlay and Picture in Picture background mode if it played no audio, regardless the release notes highlighted newly added Picture in Picture support. Fortunately I appealed and explained the reason to have that background mode enabled. My explanation convinced review team and the update was finally approved.

Hop Raider in-app purchases

Hop Raider metadata rejection

My latest experience has been with Hop Raider. In next update I’ve added an in-app purchase to remove ads from the game (interstitial ads that randomly appear when you lose). Again, metadata rejected. Apparently App Store review team couldn’t find the Restore purchases button required to restore non-consumable items buyable in your app.

This one surprised me a lot because that button is right next to the Purchase remove ads button, clearly visible and is featured in the screenshot attached to the in-app purchase (required metadata in iTunes Connect).

I suspect that a fancy feature I added might have been not as great idea as I though it would have been: when player buys or restores the Remove ads in-app purchase the game won’t show Purchase remove ads nor Restore purchases buttons as all purchasable items have already been purchased. In an attempt to not confusing the player I have confused App Store review team.

For the time being I have appealed explaining where is the Restore purchases button and why it might disappear under some circumstances. I’ll update this post as soon as I get news.

Update: App Store review team accepted my explanation and approved this version.

Introducing Trakt.tv Browser

I got a 4th gen Apple TV Developer Kit last year in September but I was working full time on Caff and although I wanted to play with it I couldn’t wrote a single app for it before Christmas. Nevertheless I used it for a couple of months, mainly to play media content streamed from my NAS and I missed a way to add movies and TV show to my Trakt.tv watchlist directly from my Apple TV (there are a couple of ‐pretty good‐ media players which sync with Trakt.tv, but none of them allows you to add content to your watchlist).

So I wrote Trakt.tv Browser an extremely simple App that just does it: you can search movies and TV shows and add or remove them from your watchlist. I plan to update it with more features as I use it and find that they are useful but it is a hobby App for the moment so it will take me some time to publish any update.

Let me know any feature you’d like to see in a future update in the comments.