Finally released my first App

I finally released my first iPhone app, Repetitions, today. It’s going to be very interesting to see how it does. After reading about how other apps have done I’m not very optimistic, especially since the release date of my app was set to 25 August (when it was accepted by Apple) instead of today when it was actually released. Which of course means my app now appears on page 6 of the “Health and Fitness” category in the AppStore. Where no one will find it. But I will be releasing an update soon anyway, which should put it on the first page at least for a couple of days.

Updated the main website. Because less is more.

I have finally updated my main website. I wanted to make it as simple and clean as possible, just like the app itself. It seems most websites try to cram as much text and images as possible onto the pages, making them a chore to read. I’m hoping to avoid that, while still providing enough information. So if anyone notices anything important that is missing, please let me know. Except for a support page, I will add that when I get back from vacation.

Added mySettings to GitHub

I finally added mySettings to GitHub, using the marvel that is hg-git. It allows me to continue using mercurial, and to push and pull from git repositories. The project on GitHub can be found here. The main place for mySettings will still be on BitBucket, I’m just uploading the code to GitHub to see if it will attract more users and contributors.

What is wrong with MacSpeech?

The tale of a software with potential, near-monopoly status and a lot of upset users.

MacSpeech Dictate is the only usable dictation software for the Mac. I’ve been using it since the beginning of January, and the speech recognition is pretty good most of the time. Especially considering I’m not a native speaker and have a tendency to slur. But the software has its problems. There’s a very limited set of text editing commands, and the only ones I can get to work on a regular basis are the ones for selecting words and replacing/deleting them, and moving the insertion point (but only between words). The built-in notepad is the fastest place to dictate into, but sometimes it types the words backwards, or inserts the same text repeatedly in the wrong place. And if you use it long enough it will eventually crash, leaving your carefully dictated text in binary afterlife. Dictating into Firefox leads to sudden and unexpected line breaks and spaces, same thing with Xcode, Pages from iWork is better but the only applications completely free of such frustrating appearance of unwanted whitespace are Mail and TextEdit. In TextEdit, however, moving around and selecting text is excruciatingly slow. You end up spending almost as much time waiting as dictating. Occasionally, Dictate will select all or parts of the text and remove it. The only way to teach the software new words is to write them into a text file, save it, and then open it with the Vocabulary Training command. And then hope that this time, it will work. My first user profile stopped working after two months so I had to create a new one and start from scratch. Sometimes Dictate just stops responding or starts misinterpreting everything I say, which a restart may or may not fix. It will only on rare occasions recognize the word “cell”, and never recognizes “app”. Which is inconvenient for someone who only writes about iPhone programming. And it never learns from its mistakes. There’s more, but I think I’ve made my point.

So with me and many other users experiencing serious problems with version 1.3 of a software we had paid $200 for, what do you think MacSpeech did? I will get to that, but first let me speculate about why they did it. Continue reading

Customising a table view with mySettings

I’ve been working on my iPhone app lately (for performing physical exercises like the ones you get from a physiotherapist, but more about that later) so I haven’t written anything for a long time. I thought I’d rectify that by showing how to create highly customised UIs with fairly little coding. I recently added support for delegates to mySettings and that opened up a lot of possibilities, even with only one method in the delegate (for now).

As an example, here’s the configuration screen for my app:
Configuration screen

Continue reading

Another way to create Settings views

Craig Hockenberry has also created an API for Settings views. But unlike mySettings his API creates the views from code instead of plists. Like this:

- (void)constructTableGroups
{
NSMutableArray *cells = [NSMutableArray array];
IFTextCellController *textCell = [[[IFTextCellController alloc] initWithLabel:@"Text" andPlaceholder:@"Placeholder" atKey:@"sampleText" inModel:model] autorelease];
[cells addObject:textCell];
IFSwitchCellController *switchCell = [[[IFSwitchCellController alloc] initWithLabel:@"Switch" atKey:@”sampleSwitch” inModel:model] autorelease];
[cells addObject:switchCell];
tableGroups = [[NSArray arrayWithObject:cells] retain];
}

Check it out at http://furbo.org/2009/04/30/matt-gallagher-deserves-a-medal/ .

My Dream Gadget: A Really Big iPod Touch

My idea of the perfect device would essentially be an iPod touch with a screen the size of an A4 sheet of paper. It would be brilliant for surfing the web and reading e-books and PDF’s. Anyone who’s tried to do that on an iPhone or an iPod touch would appreciate not having to scroll for every paragraph. And in addition to running iPhone apps it should be able to remote control a Mac. Just imagine sitting in the living room and using Front Row on this thing. Not to mention playing an adventure game. Only problem is with a touch-screen that big it would probably end up costing as much as a desktop computer. So we probably won’t see it for a couple of years.

But eventually it will be made. It’s just too obvious and idea for it not to.

Measuring pixels in OS X

I know there are standalone applications for this, but when I need to measure something in one of my applications I find it easiest to just use the screenshot functionality built into OS X. Just press Command-Control-Shift-4 and drag to measure.

A UIPickerView with labels

I recently needed a picker view with labels (like the one in the timer tab in the Clock app) to select minutes and seconds for a time interval. So I made the following subclass of UIPickerView:

#import

/**
A picker view with labels under the selection indicator.
Similar to the one in the timer tab in the Clock app.
NB: has only been tested with less than four wheels.
*/
@interface LabeledPickerView : UIPickerView {
NSMutableDictionary *labels;
}

/** Adds the label for the given component. */
- (void) addLabel:(NSString *)labeltext forComponent:(NSUInteger)component;

@end

Continue reading