Archive for February 11th, 2016

Next Metro Nexus Timetable for iOS and Apple Watch Features

Next Metro from Central to Monkseaton stations

Apart from actually wanting to have a Timetable App (download) that looked good and worked well for the Nexus Metro system in Newcastle, it was also a good excuse to try out some new technologies and test out features added to iOS9 and the Apple Watch. Here’s a breakdown of the some of those features and how they’ve been implemented.

Next Metro Main Features


Complications get their name from the traditional watch industry and mean anything on the face that isn’t the (main) time. I like to think of them as glances as you glance down at your watch to see them. Now Apple also has Glances, but they’re a forgotten, (at least miss-named) feature of the watch. It’s not a glance if you have to swipe through 5 screens to get to it. We do have a glance for Next Metro, but it’s not something that gets used much.

Despite their name, Apple watch Complications are supposed to be easy. In fact, they’re not. Well they are, but they aren’t at the same time. There’s a bit to understand to get them working in the way you intend and a fair few methods that need to implemented correctly to get them working. It would be a whole blog post in itself to explain, but the important stuff is:

  • The start time for the next complication is at the end time of the previous event, not the start time for the event, important to counting down to the Next Metro.
  • Implement every callback and request (there’s a lot) otherwise your complications will stop working after a period, like when the initial returned events run out
  • Complications can be updated based on users location and external events, so keep them current
  • There is a limit as to how often you can update a complication, although its undocumented, so update only when you have to. It’s also expensive, battery wise so think about the user too. We update the Next Metro complication when a location update triggers a jump to a new journey. It’s not as responsive as it should be, but works most of the time.
  • There’s nothing saying that each complication type has to show the same information, you can customise the amount and even what you show per complication style. That way two complications can be shown simultaneously on a watch face from your app showing different information
  • Use NSDate.distantFuture() for getTimelineEndDateForComplication if you have events that never end (like a Metro Timetable).
  • It’s not possible to combine TextProviders using Swift (as of writing). Use this Obj-C workaround for now if you want say a CLKRelativeDateTextProvider combined with CLKSimpleTextProvider.

3D Touch Shortcuts

The ability to jump to a place in an App from a shortcut on its icon is one of the best new features of the iPhone6S + iPhone6SPlus devices (just behind Live Photos). It can really speed up your access, from making a quick phone call to diving right into writing a new email. Next Metro has this feature implemented but takes it further. We order your journeys based on the distance from the start station and use this information to update the 3D Touch shortcuts to link you directly to your nearest journey. This feature is not something we’ve seen being used very often, or well, but used correctly it takes the shortcuts to the next level of immediacy and relevance. To do so, simply update UIApplication.sharedApplication().shortcutItems when you get an update (location or information). Here’s a full guide to how to get this working.


The final ‘cool’ feature of Next Metro is the ability to search for your journeys as they’ve all been indexed (CSSearchableIndex.defaultSearchableIndex().indexSearchableItems) and NSUserActivity when you are navigating the App so terms like ‘metro monument’ or ‘next central’ will show up in your search results and allow you to deep link directly to the journey within the Next Metro App. The next stage for this is to update the content with the next metro information in real time to make it even more useful.