Example Datadog dashboard of build metrics

So after a long hiatus from writing, I’ve decided to try and be a bit more disciplined and write more frequently. This is the first in a series around how we have introduced build time tracking across our CI environments, and how we track it in our development tools.

We at Zendesk use Buddybuild, a CI & CD service for building iOS (and prior to their acquisition by Apple, Android) applications and libraries. …

As you can tell from my last post, my focus of late has been on iOS development with a mixture of Objective-C and Swift.

Something that might go by a lot of people is that the support for generics includes all types, structs, primitive types, objects, everything. Why bring this up I hear you wonder, well my background is primarily from working in Java. Where I first learned to put generics to work in a meaningful way. The subtle gotcha that tripped me up, I will try and explain.

So what I wanted to build is a LIFO (Last In…

This is a short post to share something neat I thought about this week and wrote. We are working in a codebase which contains a mixture of Obj-C and Swift. We faced a code smell in a new View Controller we are building, which was facing down the barrel of a giant if/else combination.

In Zendesk our API is provided by a Rails application and as such enums are represented as strings when they are serialised in JSON. Looking at our Developer Portal where you can find about all things Zendesk Rest API. We see this example, ticket fields


As part of our goal to constantly improve our app, we decided to review out permissions and look to reduce the number of items we request our users to approve.

Android hasn’t helped the cause with it’s old permission model, what has been introduced in M aka Marshmallow is a vast improvement for users and developers. It offers developers the opportunity to explain to users why and what we are asking from them in terms of access to their device and or data.

But enough of a discussion on Android and it’s Permission model. Lets look at the problem at…

So it took me the best part of a day of hunting and hair pulling to catch this issue.

As part of some day to day development work and trying to make my colleagues subsequent work easier I wanted to create a Utility class which would provide him with a simplified way of interacting from one app to another. In order todo this we landed on Intent juggling and relying onActivityResult

Here is the code, before the fix:

PackageManager manager = context.getPackageManager();...
intent = manager.getLaunchIntentForPackage(APP_PACKAGE_NAME);
return intent;

The problem, onActivityResult was returning before the called Activity had even…

The little bit the documentation left out

This being my first blog post I am going to try and make the post small and concise and hopefully as I practise my writing I will be able to refine the process further and further and hopefully deliver content people will want to read.

This first blog post is hoping to save people the time and effort it took me to figure this stuff out, while straight forward once you know how, there is a distinct disconnect in the documentation I was using.

Google Analytics SDK Documentation (v3, because thats the version I’m currently working with)

Google Analytics offers…

Alan Cooke

Tech Lead Mobile Apps team @ Zendesk and gadget fan!

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store