Posts

  • Introducing Minli

    Minli is a single-screen, message-based app that promotes frequent, but brief engagements. When you first launch the app you’ll meet Min Li and be given an introduction and onboarding, but it’s all in flow. Once you’re setup, Min will start teaching you, and quizzing you.

    Continue reading →
  • Two Random Apps

    How often have you heard someone say "it's like Tinder, but for X"? I hear this both from people who use apps, and people who make them. I remember when I launched Coverless, someone once described it to me as "Tinder for books".

    This got me thinking - what else could I make that is like Tinder, but for a different market? Or even more generally, if you took a mash-up of two different apps, what would you be inspired to build?

    Continue reading →
  • Do We Rate Paid Apps Higher?

    As a developer, I'm interested in the marketing and psychology of pricing apps in the store. At the volumes that most of us sell, a $0.99 price tag is never going to allow us to quit the day job. However, does this token amount of money encourage higher App Store ratings? People who pay for an app are not merely kicking the tires - these downloads are carefully considered and are therefore less likely to disappoint.

    In an effort to understand if charging for an app benefits ratings, I sampled the current top 200 free and paid iOS apps in the UK store and checked the distribution of the ratings.

    Continue reading →
  • Adoption of iOS 9's App Transport Security Feature

    App Transport Security is a feature that improves the security of connections between an app and web services. The feature consists of default connection requirements that conform to best practices for secure connections. Apps can override this default behavior and turn off transport security.1

    If you're building your iOS App with the latest dev tools (Xcode 7), your App will automatically be opted in to App Transport Security, which essentially means that for your network requests to succeed, the following must be true for each of your endpoints:

    • The server must support at least Transport Layer Security (TLS) protocol version 1.2.
    • Connection ciphers are limited to those that provide forward secrecy.
    • Certificates must be signed using a SHA256 or greater signature hash algorithm, with either a 2048-bit or greater RSA key or a 256-bit or greater Elliptic-Curve (ECC) key.

    One month since the public launch of this feature, I was interested to know how many developers had not opted out of this new feature. To get a rough idea, I sampled the current top 200 free iOS apps in the UK store and checked.

    Here are the results:

    Continue reading →
  • Big Changes to Apple's Push Notification Service

    For anybody who is currently using push notifications in their Apps, be aware that there are three big changes on their way later this year. Unlike many WWDC announcements, these changes affect every version of iOS and OS X, not just iOS 9 and OS X El Capitane.

    There are three big changes to discuss:

    1. Push Notification Actions
    2. APNS Token Size
    3. Providers API

    Let's go through each one by one.

    Continue reading →
  • Turbulence for TestFlight

    At WWDC 2015, Apple announced that they had acquired TestFlight and excited us developers by explaining how the woes of provisioning profiles will be no more, and the 100 device limit will be bolstered to a 1,000 user limit.

    However, now that we are being ushered to use the iTunes Connect service exclusively after Apple announced an aggressive 1-month sunset period of TestFlightApp.com, it's not all sunshine and roses. Here are some of the concerns I have, which I have sent to Apple and TestFlight; any responses I've received are inline.

    [^1]: Given Apple's unfair advantage here (e.g. removing the provisioning headaches), I fully expect to be back eventually.

    Continue reading →
  • Make animations for WATCH using iPhone

    Whether it's as subtle as a [hamburger button][1] or as significant as a brand new [user interface][2], animations have been one of the strongholds of iOS App development. A major reason for this is that due to the legwork Apple have put into their UIKit and CoreAnimation libraries, adding these animations has been cheap and easy to implement by developers[^1]. With parameters to control properties of the animation (e.g. duration, easing, delay, repeat count, auto reverse) as well as many Apple-provided controls that are animatable out-of-the-box (e.g. frame, background colour, alpha, transform), we have been truly spoiled. How could any of us now work on a platform that wasn't as generous as this?

    Continue reading →
  • Treat Unintended Warnings as Errors

    When you're faced with difficult circumstances whilst coding, it's often more productive to skip over the troublesome section, perhaps implementing some hack, and then return to it later when circumstances change. Usually these sections of code are marked with the word TODO and Xcode will add a nice little marker in the class overview for you.

    However, all too often, these TODOs are forgotten about and become part of the production code! Now new features take precedence and allocating resources to repay this technical debt is the lowest priority. The problem is that TODOs are not obnoxious enough — they are merely shy, easy-going residents that are too easily ignored.

    Continue reading →
  • Weekend Project: ALDColorBlindEffect

    Last week I attended a workshop on raising awareness about accessible technology. With Apps, Apple have done a huge amount to make accessibility work fantastically out of the box for their standard controls. However, as soon as you deviate away from those controls, or introduce your own copy that references shapes or colours, things begin to degrade.

    Nearly 5% of Brits suffer from some form or colour vision deficiency^1, yet there do not seem to be any useful tools for developers or testers to inspect Apps at runtime.

    To rectify this, I've created a simple class called ALDColorBlindEffect that you can drop into your existing project.

    I've just finished analysing my own App, and as you can see from this video, I have a bit of work to do!

    Continue reading →
  • I Rewrote My App

    In June 2011, I published a very simple looking App that displayed departure boards for London Underground trains. Here are some screenshots of how it looked (on an iOS 6 simulator).

    Aside from showing the departure times, the App also gave status information about station and line disruptions. The crowning jewel of UI was the "Line View" that shows the which stations a train has and will call at, along with the timings.

    Continue reading →
  • Review: objClean

    objClean is a third-party tool that integrates with your iOS and Mac App Xcode projects to help enforce a standard code style. Many IDEs have this feature builtin, but unfortunately, Xcode 5 isn't one of them - perhaps the upcoming update in June will rectify this?

    The Survey

    To get started with objClean, you'll need create a configuration file by completing [the objClean survey][1]. The survey is only 40 multiple choice questions, but if you're in a bind you can download the StackOverflow version, or the version that is the total average of everybody who has taken the survey. This alone is a great resource to inform you of what the current community standards currently are.

    Continue reading →
  • Review: iOS Core Animation: Advanced Techniques

    Due to [the on-going bug with CATiledLayer in iOS 7][1], I was motivated to reimplement it myself. Of course I then realised that I actually knew very little about what a CALayer was and how it worked. I know that my view is backed by a layer, and I know that if I want rounded corners or a border or perhaps a drop shadow (which defaults to drop the wrong way?!) I can use the layer property for this. But to subclass it, and then recreate CATiledLayer? I haven't got a clue. So I decided to find a book on the topic, and I found Lockwood's iOS Core Animation: Advanced Techniques.

    Continue reading →
  • Create Your Own Trusted SSL Certificates for Development

    In this article, you will find out how you can create your very own free trusted SSL certificate for development purposes.

    Continue reading →
  • Any Idiot Can Write Code

    I've been reading [Jack G. Ganssle's "The Art of Designing Embedded Systems"][2], which has attracted a few negative reviews because it talks more about the philosophy of general development than embedded systems. To me, this makes the book a lot more interesting and enjoyable. There are a few great quotes that I've come across so far (including the title of this post, in which he discusses the difference between a 6month newbie, and tenured 10 year veteran; turns out there isn't always a difference).

    Here are a few that I think are particularly pithy.

    Continue reading →
  • NSTimeZone

    Time (and more broadly speaking, localisation) is a commonly overlooked, and headache-inducing area of development. This is because time is defined by politics, rather than nature, and we haven't got a consistent, global approach to time. There is no algorithm. It can be 3pm where you are, but 25 hours in the past 78 miles away (as is the case for [Samoa and American Samoa][1]). Most places offset their clocks by integer hours from GMT. Some don't. Adelaide and Sydney are 30 minutes different. Some cities observe Daylight Saving Time, others don't. Even if they are in the same country in the same longitude (e.g. Lindeman and Sydney in Australia).

    Continue reading →
  • ALDClock

    ALDClock is a new clock component for iOS that I'm open-sourcing.

    Continue reading →
  • Changing the background colour of a UITabBarItem

    As UITabBarItem is a subclass of UIBarItem, working with it is painful because UIBarItem doesn't subclass UIView. However, it does contain one. What follows manipulates that view in order to change the background colour of a UITabBarItem, and therefore might be rejected if submitted to the AppStore.

    UPDATE: As of iOS 7.1 this technique no longer works (if the user taps the same tab twice in succession, the background colour is cleared).

    Continue reading →
  • Problems for PayPal's iOS SDK

    PayPal have launched their [payment SDK][1], which is native for both Android and iOS, and was the topic of their recent talk at [Mobile Monday Sydney][2].

    The SDK provides developers like myself with a quick and native method of allowing users to login and make payments with their PayPal account, or use a scanned credit card.

    Once you have logged in or scanned a credit card, that information is saved in your session, and is remembered for the rest of the day (if you wish). This means that the second time I “Pay with PayPal”, my login details or scanned credit card details are already entered, reducing the complexity between the “add to basket” and “confirm payment” button.

    [^1]: Other novel methods have been demonstrated for specialised Apps, but in general, these are essentially the only two.

    Continue reading →
  • Tips for Startups from Mick Johnson, Director of Product Management at Facebook

    On Friday I went to a talk titled [Building Mobile Products][1] given by [Mick Johnson][2], the Director of Product Management at Facebook. The talk was held at a university in Sydney, and was essentially a series of tips that would be useful to budding founders.

    The two takeaways for me were the first and final points he made.

    Continue reading →
  • Making Hybrid Apps Feel Native

    There are many reasons why companies are choosing to use fewer native components in their Apps. I don't want to get into the argument of HTML vs. Native (yet!) but instead share some tips on how I've altered the UIWebView to make it feel more native. If you have any more suggestions, please let me know in the comments below.

    Continue reading →

subscribe via RSS