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

An EasyRoute Update for iCloud

Version 2.6 of EasyRoute was approved and released by Apple today! The big new feature is iCloud syncing.

In order to sync your routes across your devices you only need to be signed into iCloud. That’s right, all the syncing is done behind-the-scenes for you. This means if you create a route on your iPad, it should be available on your phone. (This is the case I see being common — making a route using the larger iPad screen and then having it available on your phone.)

There are some other smaller fixes, but the iCloud stuff kept me busy enough, so I didn’t want to introduce too much else in this release.

The best thing is, the internal changes required for iCloud also helped set the stage for some cool stuff I have planned for future releases, so stay tuned!

Posted in EasyRoute | Comments Off on An EasyRoute Update for iCloud

EasyRoute News and Status

Since I’ve been in radio silence here on CodeAndRun.com for a while here, I figured I’d post a little news and a quick status update.

DC Rainmaker

First off, EasyRoute was mentioned on DC Rainmaker! I’m a long-time reader so it was really fun to see Ray using it. I had reached out to him some time ago just to let him know that EasyRoute existed. It appeared in his “Week in Review” posts when he used to post screenshots of app updates, but I didn’t know it was his favorite route planner! Thanks, Ray!

In the Pipeline

This has to be the longest I’ve gone without some kind of feature update for EasyRoute. I was on a nice cadence of getting something useful out the door every few weeks, but I’ve gotten stuck on something big. Sitting on a major update and releasing it after a long period of no updates is exactly what I try to avoid, but once I become unstuck, I expect to be able to make a number of releases with some nice features as the log jam clears up.

To elaborate a bit, the next feature is iCloud support. Basically, if you make a route on your iPad, it is available on your phone too. There were a number a behind-the-scenes changes I needed to make and it they were more extensive than I planned for, but I’m much happier with the new design. Actually, iCloud was something I had planned for from the beginning, but without getting into technical nitty-gritty, my original design didn’t work out.

While I’m on the topic of my next release, I wouldn’t mind taking on some additional beta testers. Drop me a note on my contact page if you’re interested.

Posted in EasyRoute | Comments Off on EasyRoute News and Status

Importing GPX into EasyRoute

I just received a message through my contact page asking about EasyRoute’s GPX import feature. Unfortunately, my reply got bounced back to me, so I figured I’d address it with a blog entry in case anyone else was confused about it and hopefully the person asking about it will return here and find the answer.

EasyRoute is registered as being able to open GPX files which means another app needs to offer it to EasyRoute. For example, if your GPX file is a mail attachment, EasyRoute will show up in the mail app as being able to open it.

If your GPX info is in another app, EasyRoute will be available through the that app’s export or share feature. (A box with an arrow pointing up out of it seems to be the universal icon for that these days)

If the GPX file is not on your device at all, just e-mail it to yourself.

As you can see, I make every effort to reply to all messages regarding EasyRoute.

Posted in EasyRoute | Comments Off on Importing GPX into EasyRoute

Race Report: John Theissen Children’s Foundation Freaky 5k

This was a fun morning!

The Freaky 5k benefits the John Theissen Children’s Foundation, and John himself was the race director. John is a runner too so he promised a well-organized, on-time race and he certainly delivered.

As promised, the race started at exactly 8:30am. The course was through a neighborhood with lots of twisty roads (that is easy to get lost in) but it was obvious that care was taken to make a route with as many straight portions as possible. You can see it in my Garmin Connect activity.

There were water stops and mile-markers as you’d expect, but as an added bonus for Halloween, there was candy too.

Another pleasant surprise was the raffle. Sometimes at these races, the raffles can drag on as they draw numbers for numerous prizes and are often not matched well to the tastes of the winner.

Here is how John’s raffle worked: you put your ticket in a bag corresponding with the prize you want. The drawing is conducted during the race and you simply claim your prize afterward. If you win, you win the prize you wanted and you don’t have to stand around for half the morning outside on a cool, windy October day in your sweaty running clothes. So simple, it’s genius.

Since it was a Halloween-themed event, there were plenty of costumes. Check out the pictures. I didn’t wear a costume per se, but thanks to an UnderArmour Batman shirt and matching shorts, I was able get into the spirit while still being ready to perform.

There is a picture of me, but I’m warning you, it’s gross. When I run, my nose runs too. I’ve gotten to the point where I don’t even notice it anymore, but it makes for pretty a disgusting picture. Here’s the picture, you’ve been warned.

My appearance was the last thing I was thinking about there. I was simply beaming with joy having set a 5k personal record! Sure, for lots of people a 6:54 min/mile pace in a 5k isn’t anything to brag about, but I’ve come tantalizingly close to breaking that 7:00 barrier so many times that it was awesome to finally knock that goal down. After an injury earlier this year, this was the first 5k I really felt ready for.

This was my first time running this race, although I’ve registered for it before and had to back out for some reason or another. I’m glad I finally got to run it. It’s got a permanent place on my racing calendar now.

Posted in Running | Comments Off on Race Report: John Theissen Children’s Foundation Freaky 5k

CppCon2014 Wrap-up

Unbelievably, the 5-day CppCon 2014 was over in a flash. Not only did I have a great time but the conference kept me so busy throughout the week that the days just flew by.

To sum it up in a word: inspiring. If you considered going this year and decided not to, I would recommend it for next year. You can even put it in your calendar right now because CppCon 2015 has already been announced for September 20-25.

Amazingly, I am home here on Wednesday night during the week after and I am still thinking about the conference quite a bit. I’m glad most of the slides are already available because after that whirlwind week, I need to look back to better digest some of the more interesting material.

I could go on and on about the talks, but I particularly liked the keynotes. Having Scott Meyers open the conference and Herb Sutter close it was a perfect way to bookend the week. As someone who loves science, astronomy and C++, I really enjoyed Mark Maimone‘s talk about C++ on Mars. (This guy drives the Curiosity Rover!) Mike Acton gave a good, thought-provoking talk and was a great contrast to the other keynote speakers.

The talk given by Bjarne Stroustrup was particularly notable for me. Not only is he the creator and original implementor of C++, but his talk showed me that the language, even in its modern form, is keeping with his vision. We have a safe, modern C++ that is more welcoming to newcomers than ever and yet is still expert-friendly and delivers better performance than ever.

After Scott’s keynote on Monday, I spotted Bjarne chatting with some other attendees, I joined in, mostly curious about the topic. Before leaving, he was gracious enough to take a picture with me. I don’t care about meeting any particular celebrity, but I was elated to be in his presence. What I forgot to do was specifically thank him for creating a programming language I love to use every day.

In addition to Bjarne Stroustrup, I found that most of the speakers and fellow attendees were approachable and easy to talk to. This was a conference; we were there to talk to each other and I think the atmosphere was perfect for it.

Needless to say, if I have to opportunity to go again next year, I’ll be there in 2015!

 

Posted in C++ | Comments Off on CppCon2014 Wrap-up

EasyRoute 2.0 is out

Let me start right off by stating that this is a rather anticlimactic 2.0 release. Honestly, I only bumped the major version because I ran out of numbers in the 1.x range!

Anyway, what’s new for this version which is actually 1.9 + 0.1?

Mainly, I added an export to MapMyFitness. EasyRoute already had the ability to send a route pretty much anywhere using the GPX format, but now it has a direct export to a major player in the fitness planning and tracking world.

I added this to address one of the biggest questions/feature requests I get from users: how to actually follow the route after creating it. As a result, I’ve been asked to add tracking to EasyRoute, but I’ve been hesitant to do this with so many activity tracking apps out there already.

The easiest way I know to use the route during an activity is to use Cyclemeter or Runmeter from Abvio. These are terrific free apps that will seamlessly accept routes from EasyRoute and track you while you follow the route. I’ve heard from numerous users who employ this solution and are very happy with it. Also, I’ve exchanged some e-mails with the folks at Abvio and they seem like great people, so I don’t mind sending potential customers their way.

However, I still wanted an easy way to export the route into a major service and MapMyFitness came to the top of the list for a few reasons.

Obviously, they’re popular and well-known, but they also have a great API which made them the easiest service to export to. MapMyFitness also indirectly gives EasyRoute another feature I have been wanting which is to post the route to the web somewhere where it could be seen by anyone. If you export to MapMyFitness, you can mark the route as public, link it, e-mail it around, etc. I figure this could be useful for races where the official website does not have a course map or possibly even for race directors themselves to use to create a link to a course map.

What’s more, I now have a fairly extensible mechanism to add an export to any fitness tracking service out there. MapMyFitness was the first but I hope to include more. As always, your feedback counts, so feel free to contact me to let me know which of your favorite fitness-tracking sites you’d like EasyRoute to export to.

I hope you enjoy the new version and thanks for using EasyRoute!

Posted in EasyRoute | Tagged | Comments Off on EasyRoute 2.0 is out

EasyRoute Status 1.8.x

So it’s been a rough week or so for EasyRoute.

First, shortly after releasing 1.8, I got a report from a helpful user that it crashed on his iPad. I quickly found the problem and released a fix. Unfortunately, it took 6 days for it to make it through Apple’s review process, which is is one of the longest review times I’ve had for one of the most severe problems I’ve had.

Then, iOS 7.1 was released. While this was not unexpected, it was unannounced and introduced two major problems with EasyRoute. Both problems were easily fixed, and I knew about one of them during the beta period, but, in the past, any problems that EasyRoute has exhibited in beta have disappeared by the time the final version of iOS shipped. Also, developers usually get a GM seed* about a week before the general public.

The GM seed is valuable because I can iron out any last minute problems and make a submission to the App Store ahead of the iOS launch. This time, I got the final version the same day as everyone else, thus anyone who upgraded would suddenly have two major bugs in EasyRoute.

To make matters worse. I had to wait for my aforementioned crash fix to be reviewed before I could submit my iOS 7.1 fixes. I didn’t want to self-reject my crash fix and include the iOS 7.1 fixes and lose my place in the queue. Getting the crash fix out was too important.

For the curious, the two iOS 7.1 problems are gray route lines and a Street View crash. The gray route lines were fixed by Google in their maps library. The StreetView crash occurs inside Apple code but I was able to work around it. I was also able to reproduce the problem with a simple sample app, so I reported the bug to Apple.

The side effect to my workaround is that Street View won’t open and close with a snazzy (and useful, I think) zoom transition to the coordinate being viewed. Hopefully, the problem will be resolved in a future version of iOS and I can restore the zoom transition.

* For those not in the software dev industry. A GM release is a “Golden Master” release. This comes from the days when we shipped software on shiny discs.

Posted in EasyRoute | Tagged | Comments Off on EasyRoute Status 1.8.x