Posts tagged 'iOS'

My Last Three Years in Numbers

I am coming to the end of three years of working on a long running contract on a 'quantified self' system for a client, enquos. This is a system to help people measure and track their nutrition, exercise and wellbeing in order to effect change in their life. It has been a fascinating three years, but gave me an idea for a blog post: Some of the numbers of the last three years of some of the work I've been doing. Both for enquos, and also side-projects I've been working on.

So here we go...

enquos team sprint

I've been working on enquos for 1117 days. In that time I built our mobile development team from scratch and I have found/hired/managed a total of 12 developers. We have built 6 apps in total across both iOS and Android platforms. I set up a continuous integration test and build server that has started at least 3876 complete signed, distributable builds of the apps.

The iOS app has been developed over two languages (Swift and Obj-C) and three major version of Xcode (7,8 9).

Between the Android and iOS versions of the latest app 'enquos Total Health', we have over 1250 automated tests.

enquos mobile app jenkins pipeline view

The final iOS app take approx 37 minutes to build, test, package and deploy. The Android app takes approx 8 minutes to build test, package, and deploy. So assuming we built the same number for each, and over the life of the app the build time average is half the final time, then the build server has spent a total of 31 days solid building the app. Our build numbering system changed halfway through, so I reckon that 3876 is only half the number of builds we have done. And the total time and number of builds is likely double that, more like 2 months solid building.

I introduced Slack into the company and in that time there have been a total of 324,964 messages sent on Slack between us.

When I first started, the iOS app I inherited from an outsourced app development company in another country, was over 1 GB in size. It is now 84 MB, yet still retains a complete offline searchable database of nutrition items. Each entry containing up to 160 different nutrients.

enquos iOS app screenshots

In this time I have given five talks at 3 conferences and 2 user groups. I have also given four talks at schools and universities as a STEM Ambassador.

Speaking at SWMobile on automating iOS code signing

I now know more about iOS app signing and provisioning profiles than any sane human should.

Global Festival of Ideas conference game

In other projects, I built the Python back end for a budget simulation game for a UN conference on sustainable development. The game was used by 450 people at the conference over 3 days and processed a peak of 10,000 financial transactions per second. It was a collaboration between three different companies, one doing the mobile apps, one the overall idea and strategy and myself doing the backend.

Ripple trading bot app screenshot

I have also stared to learn Node.js and get more interested in cryptocurrencies. Specifically, the real-time settlement network, Ripple. You know how an international SWIFT payment takes four days to complete? Ripple does the same in 4 seconds. So fast, you can actually try and make money foreign exchange trading by sending currency back and forth across the network. I wrote a bot to do just that, which is currently trading £1.2 million per month between eight currency pairs. And making a small profit in the process.

Oh, and I've lost 10kg in weight in this time.

So if any of this experience sounds like it would benefit your project, then get in touch and let's chat! For more background on me and past experience in Plone and Python, then see my bio or linkedin profile

Automating Feature Branch Builds on iOS and Android

This is a talk given at Codemobile 2017 conference in Chester, UK. It was a 5 minute lightning talk detailing how to automate the building of apps for each and every feature branch created as part of a git-flow workflow.

Finding Provisioning Profiles by Name Rather than UUID

Despite my previous thoughts, you can actually use Xcode 8’s find-by-name functionality for manual signing on a CI setup.

Automating Xcode 8’s New Automatic Signing

Picture of Matt speaking at SWMobile meetup

This was a talk I gave at the SWMobile Meetup in Bristol in October 2016. The talk was a lightning talk on automating the new Xcode 8 automated signing system when using it in a CI setup. In our case we use it with Jenkins and Fastlane to automate all our builds.

Video hosted at

Slides hosted at

Using Xcode 8’s New Automatic Signing with Jenkins and Fastlane

Xcode 8 brings with it a new automatic code signing system. It is meant to make life a lot easier for developers, but needs a bit of work to get working with headless CI systems like Fastlane and Jenkins.

Global Build Numbers in Jenkins Multibranch Pipeline Builds

We wanted to have build numbers that were unique and incremental across all of our build jobs. Here is how I did it with a small python microservice.

Jenkins 2.0 and Multi-branch pipeline builds for iOS apps with Fastlane

Jenkins 2.0 beta is out and has included a multi-branch pipeline plugin that allows automatic build of feature branches from Github. Here is how I set it up to build feature branch builds of our iOS apps

Getting Proper UTF-8 Output From Fastlane on Jenkins 2.0 Pipeline builds

Jenkins 2.0 pipeline jobs get their locale from the master not slave, so you need to set the local on master to get UTF-8 output working correctly

NSScotland 2015 Conference

A write up of some of the talks I found interesting at the NSScotland conference in Edinburgh. Dealing with maps; Building a mental health app; Working with distributed teams; and a 30-year old calculator codebase

Force git to use ssh instead of HTTPS

Sometimes you have tools that reference a github url with https and you want them to use ssh instead so your ssh key works