Ben Dodson

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

‘No results found’ on iTunes Artwork Finder

My iTunes Artwork Finder has proven very popular over the last couple of years. The issue with popularity is that the amount of correspondence increases. In the past two years, the top requests via email have been:

  1. Support for a specific country
  2. Asking for artwork of a specific show or film

I fixed the first a little while ago by automatically listing all of the iTunes countries but the second continues to be a constant issue in my inbox.

The way the finder works is to use the iTunes Search API to find the item you are interested in and then retrieve the artwork. This basically means that if the item isn’t on iTunes1, this tool won’t find the artwork for you. If you email me asking for a specific show or movie cover, I can’t help you.2

To try and limit the amount of email I get like this, I put in a disclaimer on the website. This got buried at the bottom of the page when I had a redesign so now I’ve added a note within the results.

"No results found" on iTunes Artwork Finder

Hopefully that should work!

  1. It might that a film hasn’t been released yet, the TV show is only on Netflix, or there is some other reason why iTunes doesn’t stock the film, show, or album you are looking for. ↩︎

  2. I will generally use Subler or Google Image Search if the iTunes Artwork Finder comes up blank. ↩︎

The problem with Allow Full Access on iOS 8 keyboards

I’ve never had a desire to change the stock keyboard on iOS. When the announcement was made at WWDC 2014, I thought that it was an interesting feature, but not one I would ever want to use. That changed when I saw the teaser page for PopKey, a keyboard that allowed you to paste animated GIFs straight into your conversations. That made me think about keyboards in a different way and how developers might create interesting keyboards that aren’t just improved ways of typing1.

As it turns out, PopKey isn’t very good. It doesn’t have search, watermarks the images, requires you to create an account and give over your phone number, and it was beaten by Riffsy which is actually better2.

Anyway, the problem I’ve seen over and over again is that these keyboards require “Full Access”. This is a feature that basically enables the keyboard to talk to its host app and to the internet. The reason you might want this for a keyboard is that it might do auto-correct (iOS 8 keyboards do not have access to the Apple auto-correct algorithms) and therefore does some processing in an app or in the cloud. With Riffsy and PopKey, this is obviously required in order that it can download the GIFs from the internet. The real issue isn’t that it requires this access, but that Apple puts up this message when you enable it:

Allow Full Access dialogue on iOS 8

“This could include sensitive information such as your credit card number or street address” - could they make that sound any scarier?

I’ve seen numerous people tweeting at PopKey asking them why it requires this access and how they won’t use the app until that requirement is turned off (which obviously won’t work - it needs internet access). I engaged a few in conversation and, even after I explained how it worked, the message I got back was “I don’t trust it”. I’ve even chatted to a few iOS developers who refuse to install a GIF keyboard because of that warning!

The basic problem is that the alert message you see is almost too scary and doesn’t give enough information. It was obviously written for what Apple expected; text keyboards. I’m not sure of a complete solution but as a start it needs to make it clearer that only things you type in that keyboard can be (potentially) seen by the developer. You don’t type anything in a GIF keyboard so the developers, if they are logging everything, can only see what stupid images you are sending. In addition, 3rd party apps can block custom keyboards from showing on sensitive screens (i.e. when entering your master password in 1Password or entering your pin in a banking app) and password fields automatically disable 3rd party apps (try it in Safari to see).

It is developers that will suffer for this. End users are already up in arms about privacy and demanding keyboards not use this feature whilst clients don’t necessarily understand what is going on and just see the negative feedback. I’ve been approached by a number of prospective clients to build these keyboards and so far I’ve put them off by showing them the ‘Full Keyboard Access’ search on Twitter.3

It seems to me to that Apple are treating the keyboard as a power feature and expect people to understand how it works under the hood. Seeing as some security savvy developers are cautious about installing these things, I think Apple has a lot of improvements to make in the way keyboards are installed, especially if it is to avoid negative fallout from end users who think that developers can steal your credit card number with an emoji keyboard. It’s good to be cautious about these things, but at the moment people are completely paranoid due to the installation process.

  1. That is if you call swiping an improvement. Sidenote: I hate that since iOS 8 a lot of people misspell the verb ‘swipe’ as ‘swype’ (as in “I can’t swype through this page in your app”) ↩︎

  2. It irritates me that PopKey is the more well known keyboard though. This is entirely due to the fact that it put up a really nicely designed teaser page in advance and has got a lot of press coverage. I think it is really bad they still use the tagline “The world’s first animated GIF keyboard” when it clearly wasn’t and has so many flaws compared to the app that came first. That it is featured by Apple in the Best New Apps section is a great shame. ↩︎

  3. For a while I tried to educate people as to how a GIF keyboard can’t read your iMessages. I gave up after a while. ↩︎

Showing TODO as a warning in a Swift Xcode project

I rarely use comments when I’m coding1. I do make one exception though; using // TODO: and // FIXME: to highlight pieces of code I need to revisit at a later date. The advantage of doing this is that the lines then show up in the jump bar popover in bold text with one-click access to the exact line:

TODO comments in the Xcode jump bar

The issue I have with this is that it is very easy to forget about them unless you are using the jump bar frequently. I used to log them in my todo manager, Things, but that duplicates the workload. It would be much more useful if those errors were flagged in some way…

Jeffrey Sambells wrote a post on how to flag these comments as Xcode warnings but that only applies for Objective-C. With a slight tweak, here is a run script build phase for flagging TODO: and FIXME: as warnings in a Swift project:

TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"

The result is an unmissable warning whenever you run your project.

TODO warnings in an Xcode Swift project

I don’t know about you, but I feel more compelled to clean up these yellow warnings than ticking things off in a todo list.

Swift 4.2 Update (18th September 2018)

It is now possble with Swift 4.2 to do something similar to the above without the need for a script build phase:

#warning("Some warning text")
#error("Some error text")

With #warning() and #error() you can now generate warnings and errors in code without the need for comments or a build phase. You may prefer to use comments still in which case the above still works with iOS 12 / Xcode 10 but this language-level support may be more beneficial in some situations.

  1. If your code needs commenting, it isn’t clear enough. Refactor until it is. If it doesn’t make sense because of semantics, rethink your naming conventions. ↩︎

Donating blood

I’ve been donating blood for just over 10 years and went for my quarterly donation yesterday. If you don’t donate already, please consider finding your nearest donor session and donating - most donations are done with a mobile team and are likely to be in a village hall or similar. It is a fairly quick and painless process and the National Blood Service is always in need of regular supplies for transplants and cancer treatment1. Not only do you get to save lives and have your blood screened for anything dangeous, you also get a cup of tea and some biscuits afterwards.

Take a look at the National Blood Service website to learn more and find your nearest donor session.

  1. Especially if you have a rare blood type. I’m AB- which has the smallest amount of stock in the national blood bank↩︎

Private lives

This weekend the news broke that Brooks Newmark had resigned from the government due to a sting by the Sunday Mirror. A journalist posed as a young female Conservative activist and they ended up flirting via Whatsapp with him eventually sending some lewd photos.

To my mind, this is a fairly simple case of entrapment with a journalist pretending to be somebody in order to get a gossip story for a newspaper. This does not require a resignation and is a further indication of what is wrong with our politics; MPs are not held to account the same as regular people.

If you worked on the checkout in ASDA and you started flirting with someone on Whatsapp despite being married, you don’t have to resign when everybody finds out. However, you do have to resign if you take money from the till1.

So it should be for MPs. They are regular people and they shouldn’t have to give up their career for stupid things they have done in their private lives that are totally legal. The argument “he lied to his wife so what stops him lying to voters” is idiotic; unless there is proof that his private life is affecting his work, then it is certainly not in the public interest.

If an MP or any other public figure is doing something illegal, then it is fair to hold them to account. It is not fair to use their private life especially if they have been manipulated into it.

  1. Well, you’d be sacked actually. ↩︎

IslandBreak

I’m happy to announce that an app I worked on earlier this year has finally gone live on the App Store; IslandBreak.

IslandBreak for iPhone

IslandBreak is a smart travel guide for the Bahamas with a complete list of restaurants, bars, historical sites, hotels, beaches, and tours.

The app was interesting to work on due to the need for a completely offline experience. This wasn’t limited to just the points of interest and itineraries (which feature a huge amount of beautiful high-resolution photos) but also the map; this was a requirement so that tourists don’t have to use their data plans, particularly in an area which has very poor mobile reception1. Getting a full map of the islands complete with multiple zoom levels and the experience you expect on iOS was difficult, but works really well. In addition, I built an online CMS so that the app content can be updated remotely without going through the App Store approval process.

You can check it out by downloading from the App Store (currently priced at $0.99) or visiting islandbreakapp.com

  1. I speak from experience. I’ve been to the Bahamas a few times and proposed to my wife there; we had to wait until we were back in Florida before we could share the news! ↩︎

iOS using internal reference name for IAP

Today I noticed a slightly worrying bug in iOS. In-App Purchases seem to be using the internal reference name rather than the localized display name. As an example here is my config for one of the consumable IAPs in WallaBee:

iTunes Connect Edit IAP Language

iTunes Connect Edit IAP Summary

The reference name is ‘v1.1 25000 Honeycombs’1 and the display name for UK English is ‘pack of 25000 honeycombs’. This means the purchase screen ends up looking like this:

iOS 8 IAP Display Name incorrect

Hardly ideal.

I double checked the In-App Purchase Configuration Guide and it still states that:

In the Reference Name field, enter an internal name for the product.

I’ve not been able to see this in other apps as most people will use the same display name and reference name. I’ve reported a bug with the Apple Bug Reporter Filed as 18454842.

You may want to check your own IAPs to make sure the reference name looks ok until this gets fixed. You can change them without going through App Review (as they aren’t supposed to be visible to end users).

Update (26th September 2014): Tony McBride emailed me to say that he was experiencing the same issues on iOS 7 building against the iOS 7 SDK. I’ve confirmed it is happening in WallaBee v1.4.1 (built with iOS 8 SDK) running on iOS 7. Looks like it may be an App Store issue rather than an iOS 8 issue. I’ve updated this post to remove references to it being a solely iOS 8 problem.

  1. In case you are wondering why, I forget exactly. I think there were different packs in v1.0 which we then increased in v1.1 - some of the increases overlapped (i.e. 15000 became 25000) and so I had to use a different name. Prepending the version seemed to be a sensible choice as nobody would see it. ↩︎

How not to deliver a speech

Yesterday, Ed Miliband delivered his speech to the Labour Party conference but embarrassingly left out a large portion about one of the most important topics of this decade; the budget defecit1.

I’ve given quite a few speeches in the past and often give out advice to people (mainly developers) who are preparing to give a presentation or some form of pitch. The two key pieces of advice I always give out are:

  1. Don’t write your speech
  2. Don’t use notes.

In my opinion, you should never write a speech out in full. To do this means you are then locked in and can’t adapt to a changing situation. This is especially true if you are doing a speech in which you have to follow someone, something goes wrong2, or you are talking about things that could change. Additionally, I don’t believe in using notes. Nobody wants to see their presenter looking down at a little card, or worse, a mobile phone. If you are going to use notes, keep them discreetly on a table and only consult them whilst your audience is applauding or laughing (if they are doing neither, change your speech). They should also be only the loosest of bullet points to keep you on track.

Ed made a mistake by breaking both of these rules badly. He wrote a speech but then made changes at the 11th hour (about the Scottish referendum) making it harder to memorise; he also (very stupidly) distributed the speech in advance so it was obvious when he had left something out. Finally, he had notes printed on thin paper through a clear table; easy for anybody with a camera (i.e. the national press in the front row at a political conference) to see and know when you’ve missed something.

There are a couple of exceptions to these rules:

  • If you are doing a presentation which includes some form of slideshow software, this is a lot easier as the bullet point skeleton is already written for you. You don’t need any notes, just be sure to scan over the upcoming slide whilst you are talking and be ready to speak around that subject. Never repeat what is written on a slide (which should be sparse) unless it is a quote. Any presentation by Apple is a great example of how to do this incredibly well.

  • If you are delivering a eulogy, these rules do not apply. You should have it written in full and printed to read from. Never give a eulogy from memory.

The key thing with any speech or presentation is to sound authentic. To do that, I believe you have to connect directly with an audience and not rely on remembering huge passages of text. It is much easier to have a few loose bullet points in your mind and then flesh it out as you are presenting.

In the end, a speech is simply a one-way conversation with multiple people. Imagine you are telling a friend about the thing you are speaking on and everything should fall into place easily. If you try to remember an essay, then the speech will be difficult to remember, uncomfortable to watch, and far more likely to go wrong.

  1. You could say he had a defecit in his speech *rimshot* ↩︎

  2. My favourite example of this is the original iPhone launch. Towards the end of the presentation, Steve Job’s ‘clicker’ broke so he couldn’t advance the presentation. Whilst he was waiting for it to be fixed, he told a brilliant anecdote about Steve Wozniak jamming televisions when they were younger. The whole delivery was natural and unscripted and he was able to recover straight back to talking about predicted market share - you can’t do that when you are leaning heavily on memory nor a text-heavy presentation. ↩︎

The illusion of choice

In the last week, I’ve tried to purchase two things that made me question the way in which choices are presented to us whilst purchasing. It also made me think about how we market our in app purchases within WallaBee.

The first choice I questioned was Disney Infinity 2.0, the latest version of the sandbox game that lets you mix and match Disney characters in a toy box environment. At launch, there are only 2 ways to get the game; buying the Marvel Superheroes Starter Pack (£57)1 which includes 3 figures and a play set piece (which gives you several hours of themed game play) or the Disney Toybox Pack (£55) which comes with just 2 figures and 2 game discs (which give you power ups). Both sets come with a USB base to place your characters on and the actual videogame software (on disc) which gives you the Toy Box mode. The issue here is that the Marvel pack comes with an extra character and a play set piece2 which will give you much more than just the toy box for only £2 extra. My second issue is that there is no upgrade path for those like me that already have a lot of the original Disney Infinity stuff. I already have a USB base and 17 characters so I really only need the videogame disc in order to get the new toy box mode up and running; I could then buy something like the Guardians of the Galaxy Playset Pack (£28) which gives you a playset piece and 2 characters to use within it.

As it stands, there is no way to get the software either on its own or in a digital form which seems crazy in this day and age. Nearly all of my Xbox One games are the digital versions because I hate having to swap the discs to play a game (especially when it is only reading it to unlock the DRM - the actual game is installed onto the hard drive so the disc is used purely for authentication).

I’ll most likely end up buying the Marvel version as it just makes financial sense even though I’m not that interested in the characters or the playset.

The second purchase that I’ve questioned was the new iPhone 6 models. The pricing3 looks like this for the iPhone 6 Plus:

  • 16GB: £619
  • 64GB: £699
  • 128GB: £789

Notice anything strange? Each storage capacity was doubled from the iPhone 5S except the 16GB model which stays the same. This leads to a very disjointed price list as the gap between the 16GB and the 64GB is only £80 and there is no 32GB model - it makes no sense that you would choose the 16GB over the 64GB especially when you consider that the iPhone 6 models have far better cameras and can do things like 240fps and time lapse videos which will eat that up (not to mention the @3x resolution bumping up the size of every app as they get updated).

For the last 2 years I’ve had 16GB iPhone models and it has become apparent that they are just not big enough (as many people found when trying to upgrade to iOS 8 over the air). I regularly have to delete my music cache to save space or offload photos and videos. I would have been happy paying a bit extra for a 32GB (or having the base model doubled) but in the end I went for 64GB on both phones as I just don’t see 16GB being a workable size.

So why do companies do this? In the case of Disney Infinity, I think they just want to cover their backs and try to stop anybody buying the game without the USB base and some characters as otherwise the game won’t work. My wife suggested they could make the game available as a digital download but just put a warning that you need to have some bits from the previous game; from experience I know that nobody reads those warnings. With the iPhone 6, I can only imagine that they really want people to buy the 64GB model and so by starting at 16GB they are basically showing you a bad option in the hope you’ll buy the better model. This has an extra benefit that they can say “starting at £619” when they know most people will go to the £699 model.

We do something very similar in WallaBee with our packs of honeycombs (our freemium currency). Here is a quick list of the packs we sell along with their price4 and the percentage of sales5 each one has:

  • 25000hc - £7.99 - 81%
  • 20000hc - £6.99 - 1%
  • 15000hc - £5.49 - 12%
  • 5000hc - £2.49 - 3%
  • 2500hc - £1.49 - 2%
  • 1000hc - £0.69 - 1%

As you can see, the 25000hc pack is overwhelmingly the most popular. This may be because it has a “most popular” banner attached to it on the purchase page but I think it is picked the most because it is the best value when you look at a strict honeycombs to pence conversion (we don’t do any additional benefits like adding some other currency or benefit on the higher packages - they are literally you get what you buy).

The point I’m getting is that we could probably scrap all but the 25000hc and 15000hc packs without negatively affecting sales, but then there would be less choice available to our players. We did drop a 10000hc pack a while ago when we were experimenting with a grid based sales page; it was the least popular option and we wanted just 6 items to keep the design even. I’m not sure if minimising the amount of options further would be good as it means making people compromise as in the case of Disney Infinity and the iPhone 6; I’ll buy the options they are pushing me too but I won’t feel good about it.

An interesting counterpoint to this is the way in which we sell locks within WallaBee. Locks allow you to protect items you drop from being taken by other people and we sell them in packs of 10 for £0.69. Many players have asked us to sell them in packs like honeycombs so that we could do a range of options for each budget but the reason we keep them at a single price point is that they are massively popular; in fact, they are our most purchased in app purchase6. Whilst selling a pack of 50 or a 100 might generate more sales, it would mean that a £0.69 in app purchase would no longer be most popular. Why is that important? On the App Store, you can see the top in app purchases for a game and it is my feeling that showing a £0.69 item at the top of that list rather than a £7.99 one looks better to new players who are often sceptical about how much money a freemium game is going to try and take from them.

I’m pretty pleased with the way that we do real world transactions in WallaBee but we are going to be making a big drive for what we like to call “ethical freemium” in the future with several big changes. One of the things we don’t do now and never will is sell huge packs at prices like £64.99 - I see this in many freemium games and it is just gross (as well as looking bad in the “top in app purchases” screen on the App Store). Something I have often toyed with for those that do want to make larger purchases, such as those who want to buy multiple lock packs, is to add some form of payment processing on our website that is separate to the App Store; that way, players could buy as many locks as they want without affecting our top purchases list.

When it comes down to it, choice is simply an illusion. Most of the time, you are being cajoled into making a specific purchase. In the case of Disney Infinity and the iPhone 6, it seems pretty obvious. With WallaBee, we’ve experimented both with offering choice (as in our honeycomb packs) and offering no choice (with our locks). It’s hard to say which works best but I think I prefer having a single option to choose from rather than being given several but being subliminally pushed to a chosen option. Maybe I should remove those superfluous honeycomb packs after all.

  1. There is a “Collector’s Edition” as well at £110 but it is essentially the same thing with more characters. ↩︎

  2. The play sets are basically movie tie-in games in that you can only use characters from that series within them and you’ll get around 5-10 hours of story driven gameplay. It means that Disney can release a new game within Disney Infinity without having to redistribute the base software (you just buy one of these pieces that goes on the USB board). ↩︎

  3. This is for an unlocked iPhone 6 Plus in the UK. Obviously with a carrier and a plan the cost would be different. ↩︎

  4. The price differs around the world based on tiers that Apple sets up - they scale beautifully in USD but look less obvious in GBP. ↩︎

  5. Data from 22nd August 2014 to 22nd September 2014. ↩︎

  6. This is the IAP that most people buy; it isn’t the one that makes the most money (that would be the 25000hc pack) ↩︎

Font Finder Featured

A few years ago, I wrote an extension for Firefox called Font Finder. It was a basic utility that let you highlight any text in a website and immediately get detailed font information such as family, leading, line-height, etc. It’s been downloaded half a million times and had great reviews.

I stopped using Firefox a long time ago and so when it came to update the app a developer named Andy Portmen asked if he could continue to work on the extension. He published an update in July which bought the extension up-to-date with the latest version of Firefox and Font Finder has now been featured by Mozilla!

If you’re a designer that uses Firefox, be sure to check it out. My thanks to Andy for keeping Font Finder alive for those users who have found it useful over the years.

« Older Entries Newer Entries »