Ben Dodson

Freelance iOS, macOS, Apple Watch, and Apple TV Developer

Introducing "Blind Bags"

Ever since I was little, I’ve loved collecting. As far as I can remember, the first thing I collected seriously was Gogo’s Crazy Bones when I was at school in the 90s1. They came in blind bags so the first couple of times you bought them you’d get all new stuff but then, as your collection got more complete, the chances of getting something you already owned increased. This mode of selling seems to have really caught on over the past few years and I find myself collecting a number of things that work this way, primarily Disney Infinity Power Discs and LEGO Minifigures.

Whilst trying to sort through my Disney Infinity collection last week, I did a quick search on the App Store and found only one app that hadn’t been updated for a while and was a bit basic. After having several weeks away from coding whilst being on jury duty, I thought it might be fun to get back into the swing of things over the weekend by building a basic prototype app to solve my collecting need but also pick up a few new skills along the way. Thus, “Blind Bags” was born:

The app is fairly basic in that it lists all of the series of power discs available and then lets you tap through to see a list view showing which ones you own and which ones you don’t (as denoted by whether they are slightly-transparent or not). You can hold your finger down on a disc to change its state making for a quick way of logging new additions to the collection. If you tap on an item, you go through to a bigger detail view which gives you a bit of description text and allows you to enter a number of spares if applicable:

The spares piece is particularly important as you can then build up a list of which items you have spares of and how many:

Finally, everything is synced online which allows me to generate a basic page showing which discs I’m missing and which discs I have available to trade:

The best bit of all of this is that the entire project took just 4 hours2 thanks to using Parse. I was able to get their SDK integrated quickly into a new app (using Swift 1.2) and begin prototyping within 20 minutes which is pretty cool as I’ve never used it before. From there, it was a simple case of building some basic UICollectionViews and some CRUD functionality. Parse also has a PHP SDK so within a few minutes I had a basic page which allowed me to output the data that the app was saving. Whilst there is no fallback for loss of connection, etc, at the moment (this is just a prototype after all) these are all things that could be added fairly easily.

The final step was to get a domain name3 and purchase a site template4 to build a basic landing page showing off a few screenshots of the app and giving anybody interested the chance to register their email address.

At the moment the app is solely geared towards one thing for one user but it could easily be expanded outwards into a full service for other collectors to use. Using Parse and a cheap site template, I’ve been able to get a prototype app up and running and a decent landing page in just 4 hours. If there is enough interest, I think 2 days of work is all that is needed to migrate the database to a different hosting solution5 and release it as a full app most likely using a subscription model.

If you’re interested, check out the Blind Bags site and add your email address to get notified as more details become available.

  1. Although, now I think of it, I also collected Pogs and (believe it or not) Panini Football Stickers! ↩︎

  2. Of which at least 1 hour was choosing a font. ↩︎

  3. Obviously I had to go for one in a similar pattern to and and settled for ↩︎

  4. Seriously, templates make this so much easier. I’ve not done any serious HTML work in years and I can’t be bothered getting things working on mobile let alone Internet Explorer. For just $13, I was able to get a fully responsive template full of animations along with the original PSDs so I could quickly integrate promo shots. The site was up and running in under an hour with the majority of that time being me writing copy and choosing the right screenshots. ↩︎

  5. I think Parse is great for prototyping but I wouldn’t use it for a live app - for one thing the relational database just isn’t powerful enough for the kind of queries I’d like to do. ↩︎

Three years of WallaBee

Today I’m celebrating three years since WallaBee was released into the world. Originally conceived as an extension to the item collecting side of Gowalla, it launched in February 2012 as a completely standalone game with beautiful artwork and a very dedicated group of players. Since then it has won awards and grown far beyond what I originally anticipated.

It hasn’t been an easy (or cheap1) journey, but today we have a large player base and we’ve stuck to the principles I laid out when I first launched the game:

We are focussed on a single thing; items. We have a location database and we allow players and developers to add to this database but it’s not our key focus. We are fundamentally not a check-in service.

We don’t just want to build a community of players, we also want to build a community of developers. If you build something on our platform, we’ll promote it.

The most important thing, the item that is at the core of who we are, is that we are dedicated to the player. We promise to listen, adapt, and make changes that the community wants rather than just blazing our own trail. We will never fundamentally change our product on a whim when we know that it’s not what our community wants. We built this app because it’s the app we wanted to use. We will never deviate from that course or that core belief.

If there is just one thing I could choose about WallaBee that I’m proud of, it would be that we stuck to those initial promises. We haven’t taken any external funding nor done things simply to boost user numbers or revenue. Every decision we make is based on a simple philosophy: do we like it?

Over the coming months, we’re going to be launching a lot of new things which will grow WallaBee from one game to a global brand. Even so, we won’t change from those core beliefs.

  1. For anybody wondering about the financials of such a game, you need at least $30000 to get started and you will lose a lot of money for the first 18 months (great artists and servers are both expensive and necessary). I started WallaBee on the basis that if it wasn’t break even by year 2 then we’d shut it down. Happily, we’ve been turning a profit since September 2013. ↩︎

IAP and icons in the 'Featured' section of the App Store

Apple did something slightly different with their weekly update of the Featured section of the App Store today that is bound to get people talking: they singled out Apps without In-App Purchases:

Pay Once and Play on the App Store

This section contains a number of great games that have no IAP within them. Unfortunately this section is hidden by the first few slides in the top banner the most prominent of which is for King of Thieves, a new freemium game by ZeptoLab (of Cut The Rope fame):

King of Thieves on the App Store

What I find particularly distasteful about this is that it is a timer-filled game in which the top IAP costs £401 and is obviously the complete opposite of what Apple are trying to achieve with the above campaign.

In any case, I noticed some other interesting editorial decisions this week all based in the What’s New section.

ABC App Icons

Is it just me or does that say A B C?

7 App Icons

Two apps placed next to each other using a number 7 for their icon.

M App Icons

Two apps placed next to each other using an M in a circle for their icon.

Tick App Icons

Two apps placed next to each other using a tick for their icon.

It seems strange that with so much choice in the App Store, Apple chose to feature so many apps with similar icons and then place them directly next to each other. I can’t remember the last time I found a truly good app on the front page of the App Store (that wasn’t featured elsewhere beforehand) but I really hope they find a way to improve App Store discovery soon2.

  1. What is worse is that if you view the King of Thieves app in the App Store, the section called “In-App Purchases” isn’t listed so you can’t see these IAPs until you download the game. With WallaBee, we keep our prices intentionally low and you can see that reflected in that list. I’m not sure why King of Thieves is exempt from this. It looks like this was just a timing issue - as of now, there are two IAPs listed (the cheapest) so I’m assuming that this is simply a “most popular” list that gets slowly populated over time. ↩︎

  2. On which note, the App Store joined Pinterest today and added a feature called App Pins that allows users to install apps without leaving the app - I’m not sure why this is being pitched as a new thing as this kind of modal App Store pane has been available to developers since iOS 7… ↩︎

Xcode 6 Essentials

I’m happy to announce that a book I worked on as a technical reviewer is now available; Xcode 6 Essentials by Jayant Varma. The book works as a good overview of Xcode 6 and the Swift language and is suitable for both OS X and iOS developers. My role was to ensure technical accuracy and to make sure that all of the code samples work as expected.

Xcode 6 Essentials

You can get it now in both print and eBook formats from Packt Publishing.

SKProduct localized price in Swift

I’m currently working on a Swift project which uses In App Purchasing (IAP). One of the many pitfalls of IAP is displaying the cost of a product in the correct format; all too often developers use the default US formatting leading to apps showing prices of $0.99 in the UK. Gross!

You may think you can use the locale of the device to format the number and you’d be correct apart from the user may be using an App Store in a different locale to that of their device (i.e. a UK account but they have their device sent to French if that is their primary language). The SKProduct object that iTunes returns has a locale attached so it is fairly simple to format the price with that in order to get the localized version:

import StoreKit

extension SKProduct {
    func localizedPrice() -> String {
        let formatter = NSNumberFormatter()
        formatter.numberStyle = .CurrencyStyle
        formatter.locale = self.priceLocale
        return formatter.stringFromNumber(self.price)!

The above is a simple Swift extension (also available on GitHub) which, if it is in your project, will automatically be available on any SKProduct object (similar to using Categories in Objective-C). If we assume we have an SKProduct called product, we can now run:

NSLog("The price of this product is \(product.localizedPrice())")
// Example output: The price of this product is £0.99

It’s amazing how many apps either don’t display the price of an IAP in advance or display it in the wrong locale. Don’t let your app be one of them.

Update, July 2018: I’ve updated this script so that it is now an optional string property and written in Swift 4.

import StoreKit

extension SKProduct {
    var localizedPrice: String? {
        let formatter = NumberFormatter()
        formatter.numberStyle = .currency
        formatter.locale = priceLocale
        return formatter.string(from: price)


Usage is much the same although it is no longer a function and you are responsible for unpacking the optional string:

NSLog("The price of this product is \(product.localizedPrice ?? "")")
// Example output: The price of this product is £0.99

Yosemite WiFi Workaround: Airport Express and USB Ethernet Adapter

Like many people, Yosemite has been a total killer for my WiFi. I finally broke down over the weekend when my WiFI was disconnecting every 10 seconds or so1. There is now a workaround available but it requires losing the ability to AirDrop which I use frequently. I’ve eventually fixed it with a long winded solution which I thought I’d share, but first a little backstory…

My WiFi is completely Apple-centric. I have an Airport Extreme (the newest 802.11ac model) and nothing but Apple computers. There are a couple of Apple TVs in the house and a few Airport Express’ for AirPlaying music. A little while ago I detailed how Yosemite was erroneously connecting through an Airport Express causing serious slowdown; the solution I had at that time was to separate my WiFi into 5GHz and 2.4GHz channels (with all AirPlay on 2.4 and all devices on 5). That was the setup.

Now, I’ve had to revert to doing this for my work computer:

Fixing Yosemite with an Airport Express and USB Ethernet cable

That’s right, I’ve had to plug in a USB Ethernet adapter and use a LAN cable to an Airport Express operating as a wireless bridge! As far as Yosemite is concerned, that’s a LAN connection and so it doesn’t drop out continuously. Problem solved!

There was one issue though; that Apple USB Ethernet adapter (which they still sell) doesn’t work in Mavericks yet alone Yosemite. To fix it, you need to download the drivers for the chip it is built on (helpfully available from ASIX), restart Yosemite, then manually add a USB Ethernet connection within Network in System Settings.

It’s all working like a charm, complete with full AirDrop support and no dropped connections. My new Retina iMac is coming today2 so I’m hoping that it having an 802.11ac chip will forgoe the need for this ridiculous workaround. At the very least I’ll be able to leave out the ethernet adapter!

  1. When I buy a house rather than rent, the first thing going in will be a gigabit LAN throughout. WiFi isn’t good enough for a media server and work machine. ↩︎

  2. “Out For Delivery”. Feels like I’ve been waiting forever! ↩︎

Dishwasher tablets and app competition

This week I bought some new dishwasher tablets online that happened to be on offer. When they arrived, their packaging had a banner at the top saying ‘switch & see the difference’ which got me thinking about app competition.

I noticed it today when I loaded the dishwasher after breakfast. Where I usually rinse the plates, I instead put them straight in so I could test if these tablets really were any better. When I unloaded the dishes and found them not as clean as usual, I immediately thought not to buy those tablets again. The strange thing about the above is that it was a totally subconcious decision both to forgo rinsing and to blame the new tablets rather than my change of habit.

This relates to app competition as it shows something which is hardwired in us; a competitor must be much better in order to affect a change. If your app is competing by having the same features or slightly more features, that might not be enough to make your competitors customers switch.

When I look at competitors for WallaBee, the main one is PackRat, a collecting game that runs on Facebook. Whilst we have better artwork and features, it is still a struggle to make people switch as there isn’t necessarily a killer reason for them to make that switch. That’s the task I’m focussing on now. I need to go that extra mile to get players to change to my game; I need to wash their non-rinsed plates.

Speeding up your DNS

Following on from my post last week about speeding up my home network, I noticed that my connection has still been quite slow when viewing websites. I have a steady 72Mbps down / 19Mbps up connection so that wasn’t the issue which narrowed it down to being either something wrong with my laptop or my DNS.

A little while ago, I found a great little app called namebench which searches through all kinds of DNS providers to find you the best speed. It was created by some Google engineers during their 20% time and works on OS X, Windows, and Linux. I usually use it as soon as I get a new machine but I’d forgotten to run it following my update to Yosemite which involved a fresh install. As it turns out, my home BT DNS is terrible and namebench managed to find some BT DNS servers that were 245% faster! Now my browser is flying along and it feels like I have a totally new connection.

I’d thoroughly recommend giving namebench a try - it’s totally free and takes around 15 minutes but you may end up with a much faster connection at the end of it.

Issues with Airport Express, Airport Extreme, and OS X Yosemite

I finally fixed a problem today that has been plaguing me for the past couple of weeks. For some reason, my MacBook Pro was getting a pitiful internet speed (around 1Mbps on an 80Mbps connection). Sometimes restarting my Airport Extreme router would fix the problem but it would slow down to a crawl a few minutes later. If I moved downstairs (near the router), then suddenly the speed would be much more acceptable.

After spending some time looking at my wireless network settings, I realised I was connecting to an 802.11n network. This is odd as I have a new 802.11ac Airport Extreme. It turns out the culprit was an Airport Express I put in my bedroom which I use purely for Airplay to a set of speakers. It is one of the newer models that supports 802.11n and it was joined to, but not extending, my wireless network from the Airport Extreme. For some reason, and I’m fairly sure it is a change in Yosemite, my MacBook was connecting to that Airport Express via the 802.11n despite the fact it wasn’t an extended network and it was obviously slower than the 802.11ac router which is only slightly further away. This slashed my connection speed by roughly 90% as everything was routed through the bridged connection.

The solution I’ve put in place was to give the 5GHz network a different name on my Airport Extreme. I’ve configured all of my Airport Express cards and Apple TVs to connect to the 2.4GHz network and all my regular devices connect to the 5GHz. There is now no danger of my MacBook accidentally connecting to an extended network but AirPlay still works like a dream.

If you notice you’ve got a slower connection since upgrading to Yosemite, it might be worth taking a look if any AirPlay devices are to blame!

October LEGO Updates

I’ve been meaning to write a couple of LEGO updates this month as there is so much cool stuff being unveiled. In the end I decided to do it as one big post…

Slave I

A video was released from the LEGO Design team showing off the latest UCS Star Wars set coming in January; Boba Fett’s iconic ship Slave I.

This looks like an absolutely fantastic set with a lot of cool features, the standard UCS stand, and (best of all) a Han Solo frozen in Carbonite!1 The Slave I is showing on the LEGO Website as being available on 1st Jan 2015 and consists of 1996 pieces. UCS sets like this are usually made available to VIP members a couple of weeks before but I’m not sure if that will happen with it being Christmas.

Speaking of Christmas…

Christmas LEGO

All of the LEGO Christmas sets are now available including Santa’s Workshop. Throughout October there are double points for VIP members and if you spend over £50 you get an exclusive Toy Workshop. I’m quite tempted by the workshop and a few baubles for the tree!

LEGO Santa's Workshop

The Hobbit

Today saw the release of 4 new sets in ‘The Hobbit’ series. These range from the small Witch-king Battle to the largest Hobbit set yet with The Lonely Mountain (complete with Smaug). As with the previous 5 sets, there is something about these I’m just not keen on. I loved the Lord of the Rings sets so much that I bought all of them but there’s something about The Hobbit which doesn’t grab me in the same way. The Lonely Mountain set is also very expensive (most likely to cover the cost of Smaug) at £99.99 for less than 900 pieces.

LEGO The Hobbit: The Lonely Mountain

Jurassic (Park) World

One of the more exciting announcements last week is that Universal have confirmed LEGO will be a licensing partner for Jurassic World, the new Jurassic Park movie due next year. When I collected the LEGO Dino series a few years ago, I thought it would be much better as a licensed Jurassic Park set and it seems that dream has come true. I’m hoping this will go hand in hand with a Jurassic Park LEGO game from Telltale with all 4 films. If the sets go down well, I’m fairly sure they’ll do some of the classic scenes from the original 3 films.

Blocks Magazine

Finally, Blocks magazine (which I’ve raved about before) becomes a monthly magazine starting next week. If you order an annual subscription, they’re sending out a really cool minifigure of the editor complete with a tiny pilot issue of the magazine. Mine arrived today and I can’t wait for the magazine to come next week!

Blocks Magazine Subscription Limited Edition Minifigure

That pretty much sums up the exciting LEGO announcements so far this month. My LEGO room still in the process of being setup after moving house and I have these sets to finish:

  1. This was originally in 9516 Jabba’s Palace and almost tempted me into buying that incredibly overpriced set (I’m glad I didn’t in the end) ↩︎

« Older Entries Newer Entries »