Every new iOS device that Apple releases comes with a new set of challenges developers must overcome. Apple has done a stellar job documenting the progression of the iOS SDK and they continue to make competitive improvements to their devices without alienating developers.

The iPad 2 is expected to be announced at tomorrow's super-hyped media event, which has ignited a frenzy of rumours lately. While the iPad 2's feature set is still largely unknown, as with all new iOS devices, writing apps for the updated tablet will feel extremely familiar. But to fully take advantage of the new hardware, here are some tips to fellow developers.

1. Hi-res graphics

Whether or not iPad 2 will have a double resolution Retina display is still in question. While most rumour sites have recently rebuffed on this feature, saying it will be saved for iPad 3, this is a reminder of an important lesson: prepare for the inevitable!

When creating graphics, a good rule of thumb is start big, export small. It's a whole lot easier to export a graphic bigger than to recreate it from scratch. 340 dots-per-inch, and 2x-4x the size of the final pixel area is usually a good place to start.

2. Front-facing camera

As we've all heard by now, iPad 2 will probably have a front-facing camera. Accessing the camera will probably be just like accessing the front-facing camera on iPhone/iPod Touch, with UIImagePickerController. A major difference now is with the added screen real estate, there is much more room to add interesting camera controls or info to the view. Check out the cameraOverlayView property for more information on how to do this.

3. Dual-core processor and multi-threading

The final specs are as-of-yet unknown, but a processor speed bump is extremely likely. If Apple wants to stay competitive, a dual-core processor is probable.

While iOS will take care of a lot of multi-core operations, it will be up to you, the developer, to fully optimise your app for multiple cores. Get familiar with NSThreads if you aren't already, and remember, UI operations should always be performed on your main thread.