Over the last year I’ve been trying to improve my drawing ability (specifically photo realism). In this time I’ve learned three main things:
- There’s no such thing as cheating in art (except stealing).
- A corollary to the first point: it’s OK to trace.
- All creations go through an “ugly phase”.
To help me create better art and enjoy the process more, I’ve made an app called Arty.
Briefly, Arty stays with you beyond just applying a filter. You can use it to create accurate line drawings, zoom in to details, pick out colours and even track how long you’ve been working on your project.
Read more at https://arty.pics.
Mei Li 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.
Read article →
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?Read article →
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.Read article →
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:Read article →
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:
- Push Notification Actions
- APNS Token Size
- Providers API
Let’s go through each one by one.Read article →
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.Read article →
Whether it’s as subtle as a hamburger button or as significant as a brand new user interface, 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 developers1. 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?
In the days of iOS 3.0, I would often comment on how confusing development must be to outsiders because performing multiple transforms, perspective changes or shadows animations would be about 5 minutes work, whereas dynamically underlining a word of text in a paragraph would take hours. ↩
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.
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 deficiency1, 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!
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.Read article →
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?
To get started with objClean, you’ll need create a configuration file by completing the objClean survey. 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.Read article →
Due to the on-going bug with CATiledLayer in iOS 7, 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.Read article →
In this article, you will find out how you can create your very own free trusted SSL certificate for development purposes.Read article →
I’ve been reading Jack G. Ganssle’s ”The Art of Designing Embedded Systems”, 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.Read article →
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). 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).Read article →
ALDClock is a new clock component for iOS that I’m open-sourcing.Read article →
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).Read article →
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.Read article →
On Friday I went to a talk titled Building Mobile Products given by Mick Johnson, 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.Read article →
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!Read article →