iOS App Postmortems: Workout Tip Jar

Workout Tip Jar is now available on the app store.

Overview:

A workout tip jar is a jar that you deposit money into every time you work out. Once you reach your goal ($50, $100, etc.), you take the money out and treat yourself to something The Workout Tip Jar app is that jar, in app form!

Workout Tip Jar was a collaboration between myself and my wife. You can read about her thoughts on the app creation process over at fitnessprogrammer.com. Working with someone was a nice change from my other, primarily solo apps.

Development Time:

Probably around 8 hours. Half of that was spent writing the app, and the other half was spend creating launch images, screenshots, and icons….

Review Time (time spent in the iOS app submission queue):

8 days. To be fair, this was over the New Year’s Eve and New Year’s Day.

New technologies I learned and used:

This was my first app that involved audio. Fortunately, playing a small sound is an incredibly easy process.

What went right:

The best thing about Workout Tip Jar is that it was an untapped market (albeit a small one). It’s only been a few days since it was released, but it’s already #1 in a Google search for ‘workout tip jar’.

From a development perspective, it’s hard to pinpoint anything that went surprisingly ‘right’ because the application was so small and straightforward.

What went wrong:

We decided to release Workout Tip Jar as an iPhone-only application. In retrospect, I wish we would’ve taken the extra time to add an iPad version too. It probably wouldn’t have been that big of a deal.

Future plans:

Conceptually, Workout Tip Jar is pretty small in scope, so there’s not too much else to be done here in terms of new features. There are a couple of things that we still have to do though: adding an iPad version is #1 on the list, and improving the graphics and UI design is #2. We might also explore some ‘social’ features like a ‘Share on Facebook’ button when you reach your goal.

If there’s something you’d like to see in Workout Tip Jar, let me know!

iOS 7′s Subtle UITableView View Hierarchy Changes

While updating one of my oldest apps to iOS 7, I noticed that I was getting an exception when trying to grab a UITableViewCell from a UITableView. The code looked something like this:

- (IBAction)OnSomeReallyImportantStepperChanged:(id)sender
{
    UIStepper* stepper = sender;
 
    UITableViewCell* cell = (UITableViewCell*)[[stepper superview] superview];
    UITableView* table = (UITableView *)[cell superview];
    NSIndexPath* pathOfTheCell = [table indexPathForCell:cell]; // ***BOOM***

This code worked in iOS 6 and below, but threw an exception in iOS 7:

[UITableViewCell indexPathForCell:]: unrecognized selector sent to instance

What’s going on here? Well, a quick debugging session made it quite clear. cell is actually a UITableViewCellScrollView, not a UITableViewCell, and table is really a UITableViewCell, so naturally it didn’t have an indexPathForCell method.

The moral of the story is – don’t make too many assumptions about the view hierarchy, because it may change!

Announcing ReminderHero.com – Automatic Email and SMS Reminders

You may have noticed that the volume of posts – and in particular, iOS-related posts – has slowed down over the past month or so. I’ve been busy working on a side project which is now in the public beta phase, and I’d love your feedback!

Reminder Hero is a web app that lets you create intelligent reminders simply by sending an email or a text message. Just describe what you want to be reminded of and when – in plain english. Reminder Hero will email or text you back a reminder when it’s time!

Here are some examples of the kind of things you might ask Reminder Hero to remind you about:

Call Bob in 2h

Pay my credit card bill Tuesday night

Take out the trash every Friday at 8am

So, head on over to http://reminderhero.com, check out the site, and subscribe to the Beta mailing list! Don’t forget to send us your feedback!

“Could not load file or assembly FSharp.Core, Version=4.0.0.0″ In An ASP.NET Application

If you’ve ever tried to use an F# class library from an ASP.NET application, you may find that although things work perfectly when you are running locally, your web app won’t load at all in production.

Could not load file or assembly ‘FSharp.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a’ or one of its dependencies. The system cannot find the file specified.

Fortunately, the fix is easy. All you need to do is add a reference to FSharp.Core to your web project, and set its Copy Local property to True. Not familiar with how to do that? Here’s a quick overview.

First, go to the Solution Explorer and right-click on your web project, or on your web project’s References folder, and select Add Reference…

add-reference

In the Reference Manager window, select Assemblies, and the find the FSharp.Core, version 4.3 reference. Check it, and click OK.

add-fsharp-dot-core-reference

 

Finally, in the Solution Explorer, find the FSharp.Core reference in your project’s References folder. Select it, then open the Properties window (or tab, or pane, depending on how you have Visual Studio configured), and set Copy Local to True.

copy-local

That’s it! Deploy your web app to your server, and the error will be gone.

What do YOU want to see in ios-queryable?

ios-queryable is a library that simplifies writing queries in Core Data. I released it around 9 months ago, and it has become reasonably popular since then, with a hundred-something stars and a few forks on GitHub.

At this point, it’s basically a complete, working, well-tested library, and it does pretty much everything I originally set out to accomplish. However, I don’t want to simply stop working on it; I want it to grow and evolve and become even more powerful. So I’m asking you – the community – for your input. What do you want to see in it? Where do you want to see it go?

Here are some possibilities:

  • Support for blocks (i.e. passing in a block to the where: method)
  • More IEnumerable methods – GroupBy, Join, ToDictionary, Aggregate, etc.
  • Direct Sqlite support (that is, no dependency on Core Data. Sounds like a lot of work…)
  • OS X support (I’ve never done OS X-specific development, so I’m not sure what’s involved here; maybe it already works!)
  • Improved error handling (since, you know, there isn’t really any at the moment…)

Do you have any other ideas, or any thoughts on these ideas? Leave a comment and let me know!

Like Programming? Like Fitness? Why Not Combine Them!

If you’re interested in programming and/or fitness, you should head over to http://fitnessprogrammer.com, where my wife has started her blogging journey.

She’ll be blogging about her experiences with learning to program, starting with Codecademy.com and JavaScript. She’ll also be blogging about fitness and health, and her love for all things Beach Body.

Her goal is to eventually release her own iPhone apps, so head over there now and start reading about her experiences! If you’re interested in learning how to program, it’s your chance to see somebody become a programmer from the ground up.

Don’t forget to leave her a comment – she’ll appreciate it!