EasyRoute 4

A major change in the app means a major change in the version number, so here we are, version 4.0!

The Short Story

First, rather than query Mapbox for data over and over again as you tap and build your route, EasyRoute now goes and fetches chunks of route and elevation data as needed and caches it on your device. The initial download will take a little longer, but once you have the data, it’s very fast. It opens the door to other improvements and features as well so I’m thinking it’ll be a long-term win.

Second, it’s also now using a new elevation data source and it works the same as above. Chunks of it will be downloaded on-demand, which will also introduce a bit of an up-front delay, but then it will be very fast.

Additionally, you can also now force a light or dark map regardless of iOS dark mode by going to the EasyRoute section of the settings app and setting the map theme.

Furthermore, there are lots of little tweaks and fixes. (Dark mode thumbnails are nice.)

The Long Story

Remember how last year I had to switch away from Google Maps because their pricing became ridiculous? Well, Mapbox went and changed their pricing structure too. I wouldn’t say it’s ridiculous, but for my use case, it costs quite a bit more. At the end of the day, it’s just not sustainable, so EasyRoute is no longer using Mapbox for routing data. (Note: the map itself is still Mapbox, but that’s just a map for rendering the visuals. The map pricing is fair and I like the Mapbox map, so it stays — for now.)

So while Mapbox forced my hand, this was something I’ve been thinking about doing for a long time anyway. In fact, it’s very close to what my plan was for how the app should work in the first place. I had been researching ways of grabbing road network data and creating the routes on the phone when I realized how I could just get Google, and later Mapbox to do it for me. Elevation is another problem, but one that was solved in a similar way.

Speaking of elevation, this has been a tricky problem over the years too. At first EasyRoute used data from MapQuest and then Google. The elevation data was actually a big part of the the Google bill and Mapbox doesn’t really offer a similar service, so I had to get creative. Since the switchover to Mapbox, EasyRoute has been downloading terrain tiles from Mapbox and calculating elevation heights from that. This is not really what the terrain tiles were intended for so I’ve always been very uneasy about the solution and have always considered it a stop-gap.

Now EasyRoute will grab chunks of elevation data collected by the Shuttle Radar Topography Mission. Thus far in my testing, it produces smoother and more accurate graphs than before, so I think it’s a much better long-term solution.

The Future

Now that the device is used for both data storage and road path calculations, it’s actually quite liberating and opens up a number of improvements and features.

For example, every map data provider like Google, Mapbox, Bing, MapQuest, etc. mandates their data be used with their map. This means that when I used Google for routing, I had to show it on a Google map, when I used Mapbox, I had to display a Mapbox map, and so on. Now I can choose any map I like. (I could even go back to Google and bring Street View back properly, or have multiple maps and let you choose!)

Another great thing is, this totally opens up the door to completely offline routing, which a number of you have been asking about for a while.

Furthermore, I’m now in control of the data EasyRoute uses. Yes, it’s OpenStreetMap data, but I process it into routable data and make it available to EasyRoute myself.

Also, the on-device route computations are so much faster than the network calls that it makes new features possible. (More responsive dragging, multiple proposed routes, etc.)

So many things on the to-do list, so little time… but I’m still just as excited to work on this little app as I was more than 7 years ago when I started the project.

Since this is a “point-zero” release (4.0) and it was a big change, I expect there will be hiccups and lots of room for improvement, so let me know how it’s working for you on either the trusty old contact form or the new Twitter account and I’ll do my best to make it better.

Thanks everyone!

Posted in EasyRoute | Tagged | Comments Off on EasyRoute 4

EasyRoute and iOS 13

I figured I should address this as it is becoming a big problem.

iOS 13 largely breaks file sharing between apps. This means when you export your route as a GPX or FIT for consumption by Wahoo or Garmin apps, they might not show up as open-in options.

This seems to be a widespread problem and Apple seems to know about it.

Myself and some colleagues have looked at the problem from multiple angles, but there really isn’t much as app developers can do at the moment. Even if you first save the file to the Files app and then share the file from there, the app you want to open it in will still not show up.

Otherwise, regarding something I do have control over, I’ve heard some feedback about the dark mode maps, particularly from color-blind users. The next release will have an option to force the light maps on even when in dark mode.

Posted in Uncategorized | Comments Off on EasyRoute and iOS 13

EasyRoute 3.2.3 – A Few Notes

A bit of a random release. I just wanted to release a few things that were ready to go.

A Setup Process

There is a new a setup/welcome prompt that takes you through some settings that might be easily missed. If you’ve been using the app, think of it as a tune-up. Otherwise, it should help new users set their preferences to their liking.

Dynamic Text

I’ve been meaning to get to this for some time, but the text sizes on the route list and a number of other places in the app will scale according to the system-wide setting. There are a few views that won’t be so straightforward to support, so they still have a fixed size for now, but my aim is to support dynamic text throughout the whole app at some point.

Record to Health with Apple Watch

Okay, so I said many times I didn’t want to turn EasyRoute into a workout tracker, but I was using the route-following feature alongside other Apple Watch workout-tracking apps (like the built-in one and the Strava app) and felt compelled to experiment with it. Also, the more I used it, the more it felt like the lack of Health tracking was an omission.

So now, if you flip a switch before following a route, a Health workout will be recorded as you follow the route. There is a new screen to the right of the route screen that will show some basic stats while you’re in-progress.

The thing is, this was a lot of fun to work on! I was training for a marathon (but got sidelined, so settled for a half) and it was pretty cool to build and tweak it for what I needed week-to-week.

As I expected though, the ways I can expand on this are endless. It opens the door for a whole new app to grow out of EasyRoute, which is tempting, but there are still a lot of route-planning features I want to do so I’m releasing what works well right now for anyone who might want to use it and moving on to some other cool route-planning features I’ve got cooking.

Why is it only supported on the Apple Watch? Well, I think it would look and behave pretty differently on the phone and I’ve got it working nicely on the watch at the moment so am just releasing that for now.

As usual, if there are any comments, questions or feedback, the best way to get me is through my contact page.

Posted in Uncategorized | Comments Off on EasyRoute 3.2.3 – A Few Notes

EasyRoute 3 — Follow Your Route

At long last, EasyRoute 3 is here! Available for the iPhone, iPad and Apple Watch.

The big new feature is route guidance. You can now follow your route with EasyRoute and it’ll let you know when you need to take action to stay on course.

I’ve actually been working on this, on and off, for close to three years. I’d spend a little time on it, put it aside for various reasons, and eventually come back to it. Finally, after this past summer’s releases settled down, I decided to make an effort to push it over the line. After logging many miles with it guiding me through various neighborhoods and a pretty long beta period, I think it’s ready.

I also considered letting it record the trip as a workout too, but, for now at least, it’s just there for guidance. Turning EasyRoute into a full-blown workout app would be a big project so I thought it would be best to leave that to the many apps that already do this very well and have EasyRoute provide guidance alongside them. So, you can continue using your favorite workout app and have EasyRoute in the background notifying you when it’s time to take action. Alternatively, you can keep EasyRoute in the foreground too if you want to keep an eye on the upcoming turn.

I also felt it was important to provide some ways to review and customize the route so you can ensure it’s providing clear enough guidance. I added a directions-editing mode that allows this as well as a preview you can look at before starting the route. Even if you use EasyRoute to make routes for your bike computer, these can help you review the route before exporting it.

If you go off course, EasyRoute will let you know and provide some basic instructions to get you back on route, but if you get too far, it’s not going re-compute the route. This is coming in a future release.

As always, the best way to report bugs or give any kind of feedback is my contact form.

I hope you have as much fun using it as I did making it and, as always, be safe!

Posted in EasyRoute | Tagged | Comments Off on EasyRoute 3 — Follow Your Route

EasyRoute 2.10 – Switched to Mapbox

As I mentioned last time, EasyRoute would shortly be changing its maps and data source to Mapbox and now, that moment has arrived.

Everything is intended to work as it did before (with one big exception) but there are some places where the generated route is different than before. I am still finding ways to tweak this and if something doesn’t seem right or if you discover a bug, let me know.

The one big exception I mentioned above is Street View. Google only allows Street View to be used with a Google map and since that is no longer the case, I cannot embed it directly in EasyRoute anymore. However, I can launch it externally and if you have the Google Maps app for iOS, it’s almost as nice as it was before. It’ll automatically open to the Street View panorama at the location you selected in EasyRoute and getting back to EasyRoute is just a matter of hitting iOS’ built-in back button in the far upper-right corner.

Some of you wanted an in-app purchase to remove the ads. While I had always intended to do this, I decided to withhold it until the Mapbox conversion was complete. I didn’t want to start collecting money from you, and then soon after, abruptly change the app in a major way. The in-app purchase is now available so you can evaluate the Mapbox change before giving me money.

With this recent flurry of changes, hopefully EasyRoute can sustain itself. Mapbox is really the only expense now and their rates are reasonable. If you’re kind enough to report bugs or problems, I’ll take care  of them. (I noticed a couple of minor issues myself while planning a bike ride myself this weekend.) Also, I think I was pretty close to finished with my next major feature before this whole Google pricing thing became an issue so I’ll hopefully be able make that available soon too.

Posted in EasyRoute | Tagged , | Comments Off on EasyRoute 2.10 – Switched to Mapbox

EasyRoute 2.9 and the plan going forward

EasyRoute 2.9 is out. Here is a rundown of what’s new:

Ads

Back in December, I removed the $0.99 price tag on EasyRoute. I did this for a few reasons, but in the end, I enjoyed setting it free more than the slow trickle of revenue it produced when it was $0.99. However, it became too popular and I can’t skate in under free limits of the services I use anymore (which used to be Google and MapQuest, but is now just Google) So having the app available completely for free (and ad-free) was starting to cost me some money and since the usage trend is still upward, this was a change I had to make.

Update: I’ve already gotten several questions about removing the ads with an in-app purchase. Since I will be making a significant change to the app (by changing the map, see below) I didn’t think it would be fair to start collecting money and then, right after, make this change. The next release will have the option to remove the ads.

Better Map Options View

I used to have a little floating arrow along the right edge of the map and I was never crazy about this. I moved it to the toolbar (which is where it has always been on the iPad) and made the view more compact (again similar to the iPad). There’s a revamped general information view in there too with help and links.

Route List and Route Types

I made some small design tweaks to the route list along with a better way to bulk edit or delete them. There is also a route type (Run, Bike, Walk, Generic) that you can assign to a route. Your old routes will default to generic, but you can select and change multiple routes on the list if you want to tag them correctly.

The Next Major Release

…is right around the corner! Yes seriously, and this is somewhat related to the above.

I’m going to have to switch away from Google’s map and data.. and soon! I had been reviewing Google’s new pricing, which goes into effect on July 16, 2018 and it seemed as if the new plan would cost EasyRoute roughly 30x more than before. I actually contacted Google because I didn’t think I was calculating this correctly and they confirmed it. Ad revenue beyond my highest estimates wouldn’t even begin to cover this, so I’m moving to Mapbox.

I am close to finished with the conversion and there are some upsides as well as some disadvantages. I’ll explain more once that release is ready, so I’ll be back here with more news soon.

Thanks for reading. I hope you’re having fun with EasyRoute!

Posted in EasyRoute | Comments Off on EasyRoute 2.9 and the plan going forward

EasyRoute 2.7 – iPhone X, FIT Export and ELEMNT

Today’s EasyRoute release delivers a few nice things while setting the table for even bigger features. Let’s dive into it.

First, let’s get the simple one out of the way — iPhone X support. It uses the whole screen — no more black bars.

The next big one is FIT export with turn-by-turn directions. Any new route created with EasyRoute 2.7 or later will internally contain turn-by-turn directions too. When exporting to a FIT file, these directions will be included. The benefit here is any device that supports FIT course files and turn-by-turn directions should be able to take full advantage of this.

A perfect example is the ELEMNT (and ELEMNT BOLT) bike computer by Wahoo Fitness.

Simply tap the share button in EasyRoute, select Open FIT in other app and select the ELEMNT companion app.

The ELEMNT app will import the route. At this point, you can sync it to the ELEMNT with Wi-Fi or simply select it and it’ll be transferred automatically via Bluetooth.

I should add that since the middle of 2016, I’ve been a Wahoo Fitness employee, but since EasyRoute exports a FIT file, there no reason other devices from other companies couldn’t utilize it. I will admit, I did a little extra work on the Wahoo side to ensure it was smooth, though.

Finally, I’ve always changed the minimum Apple will allow (US 99¢) just to offset a few hard costs, but I’m changing the price to free. Enjoy!

Posted in Uncategorized | Comments Off on EasyRoute 2.7 – iPhone X, FIT Export and ELEMNT

Animated Spinning Wait Images for WatchKit

There is no equivalent to UIActivityIndicatorView in WatchKit, but I have a situation where I want an Apple Watch app to display an image generated by its companion iOS app, and I want to indicate the possibility of a short wait.

Luckily, WKInterfaceImage is capable of displaying an animated UIImage. We can craft a series of images that look similar to the familiar spinning wait indicator, use them to create an animated placeholder image and simply replace it when we receive the final generated image we were waiting for.

It was a bit of an annoying distraction to have to make this, so I figured I’d share it and maybe save someone else some time. (Clarification: it started out as an annoying distraction, but I ended up enjoying writing it anyway.)

Posted in Swift | Comments Off on Animated Spinning Wait Images for WatchKit

EasyRoute 2.6 Status

Today, version 2.6.4 of EasyRoute was released to the App Store. The fixes are relatively minor, but I’m happy to be fixing minor issues versus having to sweat out potentially large issues.

Last time, I wrote that the big new iCloud feature in 2.6 may have blown up in my face. After hearing from more users and seeing some more data, I think it largely went OK. There ended up being just two reported iCloud problems and a few crashes. The crashes were easy to pinpoint and I got fixes submitted to Apple quickly.

The reported iCloud issues did scare me into adding some safeguards though.

When EasyRoute requests files be put into iCloud, iOS moves these files into the iCloud container, meaning the originals are gone. If iCloud is misbehaving for some reason, your routes will be unavailable. After the initial 2.6 release, I added a fail-safe so if the iCloud sync doesn’t work as expected, you can turn iCloud off and be offered the option to restore your routes from the fail-safe.

This means you can safely attempt to turn iCloud on. If syncing goes bad and the routes are not available, you can turn iCloud off and restore from your fail-safe.

Yes, it’s a workaround, but no routes will get lost in iCloud this way. At this point, I think its an uncommon problem, but I feel better knowing the fail-safe is there.

The most frustrating part of the whole thing was having users with problems I couldn’t reproduce. iCloud syncing works beautifully with my devices (the “works for me” problem) and, if anything, I thought the routes would be safer in mirrored into iCloud than just stored on the device.

As I said, there were only two reported problems, if you turn iCloud on and have problems, let me know.

Posted in EasyRoute | Comments Off on EasyRoute 2.6 Status

A Bad EasyRoute Update

Time to face the music.

On Monday, my iCloud update for EasyRoute was released. This was my longest release cycle for a lot of reasons and I actually sat on this release for a few weeks after I thought it was ready, just to be sure.

Unfortunately when I finally released it, I got reports of routes disappearing. To top it off, even new routes would disappear.

I have a theory as to why this is happening, but I certainly didn’t see it coming.

There are two things that happen when you first launch version 2.6. First it turns the routes into documents, then, if iCloud is enabled, moves those documents into the app’s iCloud container (really just a special directory) for syncing. Once in the iCloud container, they should get synced to Apple’s servers and to your other devices.

Well, unfortunately it seems this sync can go the wrong way and wipe the container. The fact that even new routes get wiped out shortly after being created supports this theory. I’m guessing the initial move to the container is wiped out, and since iCloud insists the “truth” is that the container is empty, keeps removing anything else put there.

I saw things like this happen when trying to sync the old data store (which was Core Data). It would seem to be alright, but often there would be a bad sync and data would be lost. This is the main reason I moved away from Core Data, because I just couldn’t make the iCloud sync work reliably. When I tried this with documents, it worked great. Also, the routes-as-documents approach is much more straightforward. I think the result is much cleaner.

So, upon learning of the syncing problems, I reviewed everything. I checked with some of my testers, but was unable to reproduce it. I had no choice but to disable iCloud-by-default and try and get a new release out as fast as possible.

Luckily, despite my request for an expedited review being denied, version 2.6.1 got through the App Store the same day. The problem isn’t fixed, but it is sidestepped and hopefully, at some point, it will occur to me how to eliminate it altogether.

So, the option is still there in the Settings App, but off by default. I wish I knew exactly how many people the sync fails for, but getting 2 reports in the first day is enough for me to say it’s not reliable.

Finally, I feel terrible that this happened…

EasyRoute isn’t my day job, it is my labor of love. I created it to fit my own needs and it’s been fun adding features and tweaks for cyclists, walkers and even motorcycle riders! (I definitely wasn’t thinking motorcycles when I started this.) There’s been lots of response from all over the world and it’s been fun getting to know my users. Now, I feel like I let everyone down. My name is on this program and until yesterday afternoon, I was quite proud of how it had come out.

So, to anyone having issues, I’m deeply sorry.

If there are still any problems with 2.6.1. Let me know, I’m listening. My contact page is the best option as I see messages left there right away.

Posted in EasyRoute | Comments Off on A Bad EasyRoute Update