Archive for the ‘FromRyan’ Category

TaskTask 4.1.1403 is broken

May 4, 2014

Edit: TaskTask 4.1.1406, which fixes this crashing issue, has been released for iPhone / iPod Touch and now for iPad. Please upgrade to that version as soon as it is available to resolve the crashing situation.

This has been a rough week for TaskTask for iOS, and I want to apologize to all of my customers for the troubles with TaskTask. The last update, version 4.1.1403, has a major bug in it that causes Exchange synchronization to crash the app nearly 100% of the time. The underlying problem didn’t show up in testing for some unknown reason, but the bug effects nearly every install in the real world.

Unfortunately there is no workaround. TaskTask is non-functional until the next update. I’ve submitted the fix to Apple and I’ve requested expedited approval because of the critical nature of the bug. Hopefully they’ll be able to fast track the approval and get the update out ASAP.

For the folks who want to understand technically what happened… keep reading. Otherwise, I want to apologize again for the state of TaskTask over the last month. I’m continuing to work on fixing issues that are reported through e-mail, analytics, and comments on the blog. I appreciate your support while I continue to pour my heart into making TaskTask the best task app for iOS.


What happened in the code?

In attempting to trace down some other crash logs, I made a change in how server responses are parsed and stored. Data from the server is parsed using the NSXMLParser class and stored using a mutable string (NSMutableString) to build up the contents of an element in the XML response. In 1403, the property that holds the NSMutableString was changed to use copy instead of retain as the lifecycle management technique. However, when NSMutableString is copied by the default property setter, it is copied into an immutable string. As long as the contents of the XML response weren’t particular long, that bug didn’t cause any problems (because the contents of the response were read/written in one go). However, some elements, like the Internet Message ID field, cause the value to be split into multiple write operations, which tries to append data to the immutable string and the app crashes.

The fix was to use my own setter method and ensure we are making a mutableCopy of the NSMutableString object, so that we can continue to append more data to the string later.

The indeterminate nature of this bug made it hard to capture in testing. I ran 1403 through a large number of sync tests to ensure everything was good to go and was never hit this bug. Unfortunately when the app was released, nearly everyone crashed. After reinstalling the app from the App Store on my phone, I was able to recreate the behavior that was missed during testing and hit the crash as well, hence the quick fix.

I want to sincerely apologize one more time for this problem. I know how many of you rely on TaskTask to make your life easier and stay on top of everything you do each day, and having your tool break makes that challenging. I appreciate your business more than you know and hope you’ll be able to give TaskTask another chance once the app is fixed.

Thank you for your patience,


P.S. I’m looking for more beta testers to help validate the functionality of TaskTask before updates are released to the general population. If you use TaskTask daily and are interested in getting the next release before everyone else, please sign up here for a Testflight account and register your device. You’ll receive e-mail notifications when new releases are available to install.

Coming soon to Windows Phone

January 2, 2012

This post is more of a retrospective on developing TaskTask for Windows Phone than anything else. If you aren’t interested in such things, don’t worry about reading it. The good news is that as of today 1/2/2012, I’ve submitted TaskTask to the Marketplace for approval. If all goes well, TaskTask for Windows Phone should be available in a week.

It seems like I’ve been working on a Windows Phone version of TaskTask almost forever. I started the project in February 2011 and I’ve been slowly chipping away on getting it to the marketplace. Most of the core logic for TaskTask was in place by April 2011, but mastering a good user experience on Windows Phone took a long time. There was a learning curve with XAML, a huge database performance issue with SQLite on WP that basically prevented delivery of the app, many limitations of the platform, and a number of life events that occurred throughout the summer that kept me away from my computer.

However, Windows Phone Mango provided built-in database support, and in time I’ve learned how to navigate XAML to produce better looking applications. I’ve spent the better part of the last week while I’ve been on “vacation” working away, checking in more than 100 features and bug fixes over the last two weeks. TaskTask for Windows Phone is finally in a shape I consider ready to ship!

For those of you wondering why I’m bringing TaskTask to Windows Phone, there are a couple of reasons: new technology is always exciting for me and Windows Phone is the newest out there, and Windows Phone is a relatively solid platform built on C#, which allowed me to produce produce a code base in C# that I could leverage for other platforms through the Mono efforts.

Now that I’ve completed a huge re-write of TaskTask, I’ll continue working on updating the iPhone, iPad, and Windows Phone versions of the app. Over time I expect to unify the feature set between all platforms, while still providing an app experience worth of each device. I’ve also set my sights on Android as the next target, and will begin investigating how to take the large C# library I’ve written for TaskTask into the Android world with Mono for Android.


Get every new post delivered to your Inbox.

Join 134 other followers