Genesis of an iPhone App
What you need to know
Development on the iPhone is not for the faint of heart. It is serious development in a C type language using object- oriented development concepts. If you have never developed using object-oriented techniques or in a C type language such as C, C++, Perl, Java or C# you will probably find the learning curve to be very steep. C type languages can be difficult to pick up since their syntax can often be very confusing to the beginner coupled with the fact that the syntax can be very rigid, i.e., forgetting a semi-colon can give you a debugging headache for hours.
There is no drag-and-drop when developing for the iPhone. This means you can't just select a menu object and drag it into your iPhone app then fill in the menu items. All iPhone development is done strictly from code. If you want to create a menu you will have to create a menu object, assign it a name, create a menu item and handle each event related to that menu item such as triggering a sub-menu, changing text size on hover or changing background color. If you would like to see a bit of sample code (the classic "Hello World" code example) visit the iPhone Development Quick Start guide. If you want some more specific information on coding try consulting the iPhone Application Programming Guide.
Once your development is complete you will have to do some extensive testing. Apple is serious about the testing of an app before it can be distributed in the App Store. You will have to create a Tester Pool and distribute your new app to the testers for thorough testing before you can move your app to the next phase which is submitting your app to Apple for approval and distribution. When you submit your app be prepared for some Q&A with Apple where they may ask you questions about your app and request additional information such as your EIN (Employer Identification Number).
What the limitations are
Now here is the real kicker, Xcode and the iPhone SDK can only be installed on an Intel-based Mac running Mac OS X Leopard and there is virtually no chance Xcode will ever be ported to Windows or Linux. So, if you are not the proud owner of a relatively new Mac this may be the one rule that keeps you out of the game.
Despite the fact that Xcode is a very well designed and stable development environment and the documentation for both the iPhone SDK and Xcode are first rate, the learning curve for most would-be iPhone app developers will be too great an obstacle to overcome. If you are a code monkey that lives to create code then the iPhone is perfect for you. Good luck and happy coding.