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 http://tflig.ht/10Q3Icw for a Testflight account and register your device. You’ll receive e-mail notifications when new releases are available to install.