Mobile Apps and Web Solutions

My first app for Apple TV

My quest to get my Yeltzland (Halesowen Town FC) app on every platform continues apace, and I’ve just released a version for Apple TV.

It was my first time developing for tvOS, so it was fun project despite being of interest to a very limited audience.

Design challenges

tvOS and iOS share a lot the same frameworks under the covers, so it was quite easy to reuse existing code to fetch the data.

However designing a nice UI for the TV was more of a problem (for me!), and it took quite a few iterations to get to an interface I’m happy with.

tvOS screenshot of the app

Some key learnings were:

  • Horizontal scrolling of collections/tables makes much more sense on the TV than vertical
  • It’s really important to clearly highlight the currently selected cell, to aid navigation (which often isn’t easy with the over-sensitive Apple TV remote control)

Technical Notes

It’s really easy to develop the app in Xcode using exactly the same techniques as for iOS apps, so it was really easy to get up and running.

What is really good is wireless debugging directly on your Apple TV. I can’t imagine how painful on-device testing would have been if I had to connect my laptop via a wire.

Summary

I’m really pleased with the results, and as you can see from the screenshot above it actually looks pretty decent!

Installing the app

You can check out the app using the App Store link below - although to be honest I don’t really know how you link directly to an Apple TV app.

I think if you have the iOS app installed it might show up directly on your Apple TV. Alternatively search for “Yeltzland” in the App Store directly on the Apple TV.

The Yeltzland code is all open source, and can be viewed on GitHub.

N.B. This blog post has now moved to https://writingontablets.com

Introducing Miss Positive

Amazon Echos are slowly taking over our house. We’re up to 3 now, and mainly use them for tasks like:

  • Controlling the TV/Amp/Sky/AppleTV/BluRay/FireTV via our Logitech Harmony
  • Adding items to our shopping list in Todoist
  • Listening to music (Spotify) and the radio (BBC streams)
  • Setting timers while cooking (so much more reliable than Siri)

Voice assistants are still a long way from being great general purpose helpers, but for a subset of well-defined tasks like these they are fantastic!

Developing Skills for Alexa

I’ve already built a Halesowen Town Alexa Skill (of course!), which was a great learning experience. I’m hosting the NodeJS code for the skill on AWS Lambda, and doing it this way makes it pretty easy to get something up and running.

I was looking to build another skill - to be honest mainly to get a free Alexa hoodie from Amazon for any new skills published in December :)

An aside: Social Media Negativity

Going on Social Media these days can be a pretty depressing experience.

I’ve just about given up on Facebook, and although I get lots of good stuff from Twitter, it can be a pretty negative place - especially when the current divisive political climate on both sides of the Atlantic is being discussed.

Just Say Yes!

I also find during the cold Northern winters it’s easy to get a bit down.

A few years ago I embarked on my "Something New Every Day" project. This was possibly (and surprisingly) one of the hardest things I’ve ever done, but the main upside was I tried really hard to say yes to anything anyone suggested to do - any way of ticking off another new thing for the day!

I wanted some way to recreate this positive experience, so hence I built a simple new Alexa Skill called "Miss Positive"

All the skill (she?) does is answer any question you ask with a randomly selected positive answer.

Technically this was very easy to do of course, especially using the pre-written template for a fact-based quiz, but actually I’m really happy with the result. If I’m wavering on whether I should do something, I ask Miss Positive and she puts me right!

If you want to give Miss Positive a try, follow the instructions at this page

N.B. This blog post has now moved to https://writingontablets.com

Objective-C or Swift for new projects?

I’ve been crazy busy over the last few months - a good problem to have, but it means I’ve had no time to blog on here 🙁

I’ve been switching between loads of different technologies to build mobile apps during that time. I thought it might be interesting to share my experiences switching between Objective-C and Swift, and the pros and cons of each.

Objective-C

It’d been a while since I’d worked in Objective-C, but I took on a project for one of my clients to enhance and modernise a couple of their apps which hadn’t been touched in a while.

To be honest the original code was pretty awful - they’d been let down by some contractors in the past and it took me a while to get my head around how the app worked.

Objective-C is notorious ugly to look at, with all those square brackets in the method calling, but once you get used to it I find it pretty productive to use.

I think knowledge of iOS APIs is by far the most important thing when developing on iOS, not the particulars how to type the code to call the API methods required.

The biggest plus point for Objective-C is the speed and stability of Xcode and the compiler. After mostly doing Swift development in the last year or so, it was really nice to get fewer mysterious compiler problems.

I strongly suspect Apple still do most of their internal development using Objective-C, and until they move over wholesale to Swift there will be less internal pressure to improve Xcode to handle Swift more reliably.

The main downside was that more and more of the code examples out there on the web - especially for the more modern APIs - are now in Swift. Less opportunities for “Stack Overflow copy-and-paste” development 😊

Swift

Most of my own apps are written in Swift now, and I’ve been doing the usual summer updates to keep them up to date for iOS 11 - and this year also for the challenge of iPhone X and the notch.

I must admit I do like Swift, and in particular the way it forces you to think hard about nullability of objects. This enforced type safety can be a bit painful at times (all the “!” and “?”s) but I trulythink you end up with more reliable code in the end.

However, as I mentioned above, Xcode and the compiler are MUCH less reliable when using Swift. Quite often I’ve seen it do a poor job of recompiling changes, so you’re never 100% clear if you are seeing the latest code in the emulator. A restart of Xcode usually fixes it, but that’s a real productivity hit.

The Swift compiler is also feels noticeably slower than the Objective-C compiler. All those small delays soon add up.

Also Swift is still a bit of a moving target, and once again we have Swift 4 and changes to the language. These seem to be getting fewer over releases, but I really hope the language gets to some sort of stability soon.

So which language will I choose for new projects?

I think I’ll still choose Swift for any new projects when I have a choice. Apple have strongly signalled this is their preferred language going forward, and as a language I do prefer it to Objective-C.

However after a few months back using Objective-C, I’ve really enjoyed the stability and speed of the tools. Let’s hope the Swift tools can improve to a similar state soon.

N.B. This blog post has now moved to https://writingontablets.com

Refreshing the Daily Optimiser UI

Daily Optimiser is the first iOS app I ever wrote, and it’s been looking a little tired and out of date recently.

So last week I spent a few hours improving and modernising the UI, and I’m quite pleased with the results (there are some screenshots are at the end of the article).

I’ve tried to be more consistent and subtle with the use of font size and color to give the information a clear hierarchy.

What was more interesting was how much I’ve learnt in the last few years of doing iOS development. Looking back at the original code, it’s clear I was I had no clear idea how best to structure the code. I was also very inexperienced in autolayout, and used tables EVERYWHERE to build screens!

I’ve also made the app iOS11 only to take advantage of large titles in the UI, but from my analytics I can see hardly anyone is using the app any more, so it’s not going to aggravate a non-existent user base.

I must admit I don’t actually use Daily Optimiser, as I prefer Todoist over Reminders as my task organiser. However if you are looking for a simple app based around Calendars and Reminders to help you organise your day, why not give it a go?

Download on the App Store

Screenshots of Daily Optimiser 4.0

Daily Optimiser 4 Tasks Daily Optimiser 4 Calendar Daily Optimiser 4 Add task

N.B. This blog post has now moved to https://writingontablets.com

Why I put ads in my app

I recently released a version of my Count the Days Left app which included ads for the first time.

I thought long and hard before doing this, so I thought it might be interesting to document how I worked through this decision, as it’s pretty typical of the trade-offs independent software developers have to make.

How I make money

I’ve been a commercial software developer for nearly 30 years now (wow!), including over 10 years working at Microsoft (MSN/Bing/Skype).

Right now, I split my time between:

  • Contracting out my skills to businesses for fixed-term projects
  • Building mobile apps and websites for businesses
  • Developing my own iOS and Android apps for both pleasure and profit

In 2017 I’m trying to diversify my business more, so the 3 areas above contribute more equally to the bottom line.

Currently, by far the biggest part of my income is working on contracts for other people, and I’m trying to generate more independent streams of income so I can be more in control of both my time and where I work.

Why I built Count The Days Left

I built the app for a few reasons, but mainly:

  • I wanted to showcase my skills to generate potential business
  • I wanted this app for myself, and most of the alternatives in the App Store were either ugly or not quite what I wanted

For the first point, I’ve blogged extensively about how I’ve built the app, as well as open sourcing the code on GitHub so potential customers can see my work.

The app has been pretty successful in meeting these aims, and has definitely helped in generating business (although it’s hard to measure the actual monetary value of this).

As you’d expect from a simple and niche app, it doesn’t have masses of users - daily users are definitely in the hundreds rather than the thousands.

In fact, some of the features (showing the days left as an icon badge, the Today widget, plus the Watch complication and app) are designed so the users don’t actually need to open the app every day, but I’m pretty proud of how it’s turned out.

Monitising the app

For any iOS app, there are three main ways of making money from an app:

  1. Charging to buy the app
  2. Adding an in-app purchase or subscription, probably to unlock additional functionality in an otherwise free app
  3. Adding ads

Now, unfortunately I suspect there is very little chance I’d sell many copies if I decided to charge for the app. There are so many free competitors to this particular app, and even if my app is better than them - and obvioiusly I think it is :) - it’s very hard to see how many customers would agree.

People are now so used to getting high-quality free software, generally from venture capital backed companies who are happy to lose lots of money to capture large audiences in the hope of monitising that audience later. That makes it a very hard sell to convince people even to spend $0.99 on an app that might provide them with lots of value.

Personally I’m happy to pay for good software, especially from independent software developers who are doing great work.

However I completely understand why most people don’t think in that way, and as I can’t see the situation ever changing, for most consumer apps I can’t see there’s much point in even charging a very small amount.

Now this particular app only really does one thing (although hopefully it does it well!), so I can’t see any sensible way of adding “pro features” to be unlocked by an in-app purchase.

I guess I could try a patronage/shareware model, and ask for money to support the app? I’m not sure that would actually generate any money without some sort of persistent nagging which I don’t think I’d be happy with.

This probably gets to the nub of my problem with all of this discussion. I’m not sure if it’s a British thing, but the conflict between needing to get paid and somehow seeming to be only doing it work the money is complicated.

I do want people appreciate and enjoy the app, and somehow this should be separate from the dirty business of getting paid.

So this just leaves adding ads.

Tasteful Ads?

I didn’t want the app’s main screen to show ads at any time. I think its’ main selling point is it’s a tasteful and good-looking app (especially compared to some of my competitors), and slapping an ad there would completely negate that.

Therefore only other place left to put the ads is on the settings page, where you change the title, start and end dates of what you’re counting down to.

I’m reasonably happy with this compromise, although from a pure money-making point of view this page is not viewed very often, as the users only go thereevery time they start a new countdown.

I’m using Google to provide the ads via AdMob, and have customised them to be text-only and in a color that matches the rest of the app. At least in that way they are not too jarring, and fit in as well as I can make them.

As you can see from this example, the way the ad looks is OK (even though the content is frankly a bit shit)

Screenshot of the Ad

Is it worth it?

In the first week, I’ve made a few pennies - slight more than I expected, which was very little be honest!

However, I’m generally happy I’ve done this. I think it’s important all software developers get paid fairly for their work, so turning the tide against the idea all software should be free - even the the smallest way - is OK.

Probably.

Obviously giving Google even more data is not “free” for my customers, as they are now paying for the app with their information. I’m not 100% happy doing that, but as I’ve hopefully explained here, it’s a complicated trade-off.

Feel free to contact me via Twitter at @yeltzland if you have any thoughts on any of this.

N.B. This blog post has now moved to https://writingontablets.com