I'm still developing my first iPhone app (iOS app as of version 4.0 of the OS) and have been coming to the conclusion that XCode makes many, many things easy to do, but it isn't always easy to do these things right.
Example: universal apps - having one app that runs on both iPhone/iPod Touch and the iPad. When you create an application, you have the choice of making it Universal. Basically the .xib files (XML version of the .nib files) that define your user interface will have an iPad version and an iPod/iPhone version and the application will load the correct one at launch time.
The downside: if you want ANYTHING to be different besides the user interface between the iPhone/iPod and iPad, you must write special code to handle those cases.