Routie app on iPhone 6

I am excited to announce that Routie update 2.7 is now available on the App Store! It brings full compatibility with iOS 8, as well as support for the new iPhone 6 and iPhone 6 Plus. You can get it here.

The update also brings Notification Center widget that lets you:

  • view current distance and duration
  • start and stop tracking
  • quickly open Routie app

As always, if you like the update, please leave a review on the App Store. I’d also like to thank all of you who already took the time and reviewed it. The overwhelming positivity of most comments gives me great amount of motivation to keep working on Routie in the future, as well as a great joy that you, the users, appreciate the work I put into it, and the quality and polish that I’ve always strived for. THANK YOU!

Since I wasn’t awarded with WWDC scholarship this year, and because I really wanted to attend at least one iOS dev conferrence, I looked for an alternative. From what I’ve read and heard about NSSpain, it looked like a good choice. The vibe seems to be very welcoming, and the affordable tickets and closer proximity to my home city (Prague) were all things that finally made me go for it.
Read more

Routie heart rate graph and Pebble and Bluetooth monitor

Routie now has built-in heart rate monitoring support! I was reluctant at first, because I wasn’t sure if it fits into the overall vision where I want to go with Routie, but after giving it more thought and after numerous people requesting HR monitoring over time, I decided it really makes sense for Routie to fill in this gap. And I am really glad I did, because it works great and after all the testing I did, even I now take the HR monitor with me every time when I go cycling.

In plain points, heart rate monitoring in Routie 2.6 has the following features:

  • Pair with your favourite Bluetooth 4.0 heart rate monitor.
  • See current heart rate during your workout.
  • Explore interactive graph of your heart rate after workout.
  • See average and max heart rate in route details.
  • ★ Works with Pebble! See your current heart rate on your Pebble watch.

You can get the update on the App Store here. I’ve really put in a lot of effort and testing to make the whole pairing and monitoring experience a seamless one, but if you find something that’s not working as it should, please send me an email at support [at] If you like the update, please take a moment and give it a comment on the App Store, it really helps a lot!

Now, I would like to thank all the people who have been requesting the heart rate monitoring feature and those who helped me along the way. Specifically, I would like to thank Karel Brudný and Radek Šustek – your valuable suggestions, perspective and testing made it much better than it would have been otherwise!

App Previews were introduced at WWDC’14 as a new App Store feature on iOS 8 that will allow developers to include 30 seconds video showcasing their app in action, right on the App Store. I believe it’s a great way to really show off your app to your potential customers right in the moment when they are considering the purchase or download. In this tutorial, I will show you how to make those previews even better.
Read more

WWDC'13 PhotoApp extensions were introduced a couple of weeks ago during WWDC 2014 Keynote as a way to extend the reach of your app to some parts of iOS (8), for example by creating a widget that will show up in Notification Center, or a custom sharing action. It’s no doubt a huge opportunity for iOS/Mac developers, so if you have an idea for a widget/extension, I suggest you start working on it as soon as you can.

If you are a registered iOS/Mac developer, definitely watch the WWDC Sessions Creating Extensions for iOS and OS X, Part 1 and 2 here. You will have a pretty good idea of what extensions are, how do they work and what you can do with them. The first part briefly explains how you can share data between your extension and containing app using NSUserDefaults, but neglects to point out some ‘pitfalls’ that you need to avoid in order to get it working. That’s where this tutorial comes in.

Warning: as of writing this (end of June’14), the Xcode 6 beta 2 (that you need to use to build your extension) has some bugs that might cause you some annoyance, but you can generally track down and then avoid the certain actions/scenarios that make problems.

What are you going to build

We are going to build a simple Today extension (that’s the name for iOS 8 widgets in Notification Center) that shows a number that can be set from the containing app (and changes made in the app will be reflected in the widget in real time). We’ll use shared NSUserDefaults to accomplish this.

iOS 8 Today extensioniOS 8 Today extension containing app

Read more

WWDC Moscone Center

Since there is just little over a month left till this year’s Worldwide Developers Conference, I thought it would be a good idea to sit down and write a simple guide for people who are attending the conference for the first time.

You’ve wished to get there for years, you might have missed the ticket sales last year (or the years before that), but now you’ve won the ticket lottery (or student scholarship) and you just can’t wait for the whole experience. You feel like a kid before Christmas! Am I right? You also probably want to get the most out of it, and that’s where this blog post comes in.

I was lucky enough to attend the WWDC last year (more about that here), so I have some experience with it. I am aiming to include here all the tips and tricks I wish I’d known before my first “DubDub”, and I hope it will be helpful for you.

So, sit back, get a cup of coffee, make yourself comfortable and then get back over here. I’ll be waiting.

Read more

If you are in the Twitter circles of young iOS developers, you’ve probably seen at least a few videos of scholarship apps created by students that are applying for this year’s WWDC scholarship. So I thought it would be a good idea to show off my app too. I’ve tried to make it short and sweet, instead of big app with a lot of effects and tons of texts, as I don’t expect Apple reviewers to spend too much time with each individual app. But when I saw some of the others, maybe I made it too simple. Anyways, here it is:

(I am sorry for the shaking, I should probably get a tripod for the next time :P )

As you can see, there is a simple intro implemented using UIKit Dynamics with different elasticity for each letter, and then a parallax timeline with my history. What you probably didn’t notice – there is also a little effect that distorts the texts during scrolling and make the texts sharp when it stops. That’s done using an attachment behaviour, changing the anchor point in viewDidScroll, and observing center point of the attached view, where I calculate distance between the centre point and the scrollView offset, and set the textView’s shadowOffset and shadowRadius based on the difference.

If you are interested in what others did, you can take a look at this GitHub page. And if you applied for the scholarship yourself, make sure to submit yours there.

All applicants will be notified of their status by April 28, that means 10 days from now. I was lucky enough to get in last year, so fingers crossed for all the hard-working newcomers!

Routie on Pebble live

We are always looking for new ways to make the Routie experience better, easier and even more delightful. We are also huge fans of the promising and fast-evolving category of wearable devices. That’s why we decided to build an app for watches, that will enable you to control tracking and view metrics on your wrist, without pulling-out your phone.

Since we love Pebble, a company that has been pioneering smart watches category since 2012 when they succeeded with their Kickstarter campaign, we decided to build the watch app for Pebble. We’ve been hard at work for the last couple of weeks, and we believe that you’ll love what we came up with!

What can I do with Routie for Pebble?

In a nutshell, you can:

  • start / stop tracking
  • view two metrics at a time:
    • duration, current speed or average speed in the top position
    • distance, current altitude or max speed in the bottom position

In case you are new to Pebble, it works like that: the app running on iPhone is repeatedly sending metric updates (current speed, altitude, distance etc.) to the watch via Bluetooth. The watch sends the start or stop event to the Routie iPhone app whenever you click the middle button. Other synchronisation is also performed using Bluetooth.

Here is an image that explains which buttons do what:
Routie on Pebble controls

Where can I get it?

Routie is available on iOS App Store and Pebble App Store. The iOS version currently costs only $2.99. Download it, take it for a run/bike trip/walk and enjoy. We’d love to hear your thoughts!

Routie is available on the Pebble App StoreiTunes App Store badge

Spread the love

We’ve created a small landing page for the Routie – Pebble combo. You can check it out here: and you can also share it with your Pebble friends from there using the Like / Tweet buttons.

Final notes

I would like thank my friend Patrick Balestra for his suggestion to give Pebble a try, and for being kind enough to help me out with developing the watch app! This wouldn’t be possible without him. He is a nice guy; you should follow him on Twitter.
I’d also like to thank my good friend Martin Malinda for giving me a helping hand with coding the Routie for Pebble website.
Last but not least, I would like to thank all the testers from Pebble forums that tried it out, and especially those who provided valuable suggestions: Jamie Bishop, Derrick Gould and Mark Stroeve, among others.
Your help is much appreciated!

Routie iconI am excited to announce that the new 2.4 update that I’ve been working on for quite some time was finally released! As the title says, the most important feature of this update is a brand-new Statistics tab. Let me explain what’s it about.

Up until now, the only thing you could do with your tracked routes as a whole was to view a long list of them, with one cell for each track. And it was working well; you could see all the details you needed for each of these tracks, separately. But you couldn’t see any totals, and that’s what the Statistics tab is all about – it provides activity-specific and time frame-specific summaries.

I had been thinking a lot about how to make this feature as easy to use as possible, while adding a playful element to it and making it useful for the most common use cases. I broke it down to this basic functionality:

1) choose between 3 timeframes:

  • all time
  • last year
  • last month

2) choose activity for which you want to see the summaries

  • all activities, cycling, running etc.
  • ordered by track counts

3) view 3 totals:

  • total tracks count
  • total distance tracked
  • total duration tracked

Now, this might sound like a lot of functionality that ultimately has to result in a complicated user interface, right? Usually it does, but I believe that I have found a way that makes all this very easy to do. And here it is:

Routie Statistics tab

Just swipe left or right to switch between activities using a nice parallax effect, and use the segmented control at the top to select a time frame. That’s basically it. Oh, and if you like to boast about your sport accomplishments, you can share a screenshot of this view right from the app, using the top-right action button.

The video

If you are new to Routie and are curious to know more, you can take a look at its website. To see complete list of what’s new, take a look at the App Store.

OpenStreetMap logoIn today’s programming tutorial, I’ll show you how easy it is to use OpenStreetMap maps in your app instead of default Apple maps. There are many reasons why you might want to do this: for example, the OpenStreetMap project is being built by a huge community of contributors and therefore the maps are really detailed; or, you might just want to give your users the option to use whatever maps they prefer.

Prior to iOS 7, it was also possible to use different map tiles than those that MapKit provides, but it required fairly large amount of code and work. Luckily, the map kit team introduced a really simple way to do this in iOS 7: new classes MKTileOverlay and MKTileOverlayRenderer. If you are a registered iOS developer, I highly suggest you watch the session 304 of WWDC ’13 here (requires ADC login). The introduction of it starts at 22:09.
You probably came here to see the code, so I’ll skip the explanation for now.
And… here it is!

The code

// Place this into your -viewDidLoad method
NSString *template = @"{z}/{x}/{y}.png";         // (1)
MKTileOverlay *overlay = [[MKTileOverlay alloc] initWithURLTemplate:template]; // (2)
overlay.canReplaceMapContent = YES;					       // (3)
[self.mapView addOverlay:overlay level:MKOverlayLevelAboveLabels];	       // (4)
// And this somewhere in your class that’s mapView’s delegate (most likely a view controller).
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay {
    if ([overlay isKindOfClass:[MKTileOverlay class]]) {
        return [[MKTileOverlayRenderer alloc] initWithTileOverlay:overlay];

The code is pretty self-explanatory, but just in case, I’ll briefly explain what it does.

Read more