So, after some trial and error, I found out what the problem is (there are actually two separate but related problems):
In my info.plist I used two keys to assign different MainWindow files:
Main nib file base name (iPad)
and
Main nib file base name (iPhone)
I mistakenly thought that the second key applies to iPod Touch, since there is no Main nib file base name (iPodTouch) . This turns out to be wrong, and iPod Touch is actually looking for the Main nib file base name key. So now I have this setup:

.. and it works great in 3.1.3 and 4.2. (Note that application:didFinishLaunchingWithOptions not called if the device cannot find MainWindow to use, as I developed the problem).
I suspect the same thing applies to the Launch image (iPad) , Launch image (iPhone) and Launch image keys, which explains why iPod Touch uses the iPad launcher, but I haven't been able to try it yet.
source share