In a remarkable volte-face, Apple yesterday announced that they were removing restrictions on development tools and that 3rd party frameworks could used to create iPhone and iPad apps for the app store. After this unexpected reversal, one of the questions I got was whether new developers should learn Objective-C and Apple tools instead of using 3rd party frameworks now permitted by Apple’s new rules.
I have two different answers for two different groups of developers.
The Yes answer: For developers who have experience with C/C++ , memory management or/and for developers who like learning new technology, I would suggest learning Objective-C and Cocoa-Touch to create iOS apps.
In general (without talking about mobile-specific platforms), cross-platform frameworks are not very good and add a level of risk to projects. Using 3rd party frameworks could also lead to potential performance issues in the app.
Full functionality: The frameworks are almost always going to offer a *subset* of native iOS functionality. For example, a new iOS 5.0 feature will be available to all native-app developers when Apple releases iOS 5.0. Anyone relying on a 3rd party framework will have to wait until the 3rd party implements that functionality into their framework.
Reduce risk of bugs: Just last week, I found two bugs in the iPad SDK. (Apple said that one of the bugs was a known problem that they’re investigating, no news yet on the second bug). I was able to workaround both bugs, but such workarounds will become a lot more difficult if you have to deal with one more layer in front of your code and that layer has bugs in it.
User experience and Platform-specific UI : In general, using the platform and tools that Apple provides is going to be the easiest way to create apps that conform to Apple’s guidelines/recommendations for great apps.
This is also going to be true for other platforms. For instance, an iPhone app ported to Windows Phone 7 may be better off if the UI design is changed to show panoramic views. Using a 3rd party framework and not learning what works best on each individual platform will make it easier to blur differences between different platforms, but that wouldn’t create the best user experience for any of the devices/platforms.
The No answer: For developers who don’t have the time to learn new Objective-C/Cocoa-Touch or for developers who are uncomfortable with more-hardcore programming, using the cross-party frameworks will be a good idea (and this will also help reduce the chances of memory leaks, crashes etc. in the app).
Working with a 3rd party framework means that developers will have to accept some of the limitations described above. However, for many apps, the cross-platform frameworks will probably be able to do a decent job.
Porting app to other mobile platforms: Using most 3rd party frameworks will also make it easier to port the app to other mobile platforms. However, as described earlier, the caveat here is that a good app will need to provide the best experience on each platform and that will require customization on each platform.
Rampup time: In general, developers are likely to use 3rd party frameworks to make it easier to develop apps. For instance, an experienced Flash developer will be able to develop a game with Flash in a much shorter time than what they might have to spend with the Apple tools. However, in many cases, developers will need to spend a fair amount of time on learning how to use 3rd party frameworks. For instance, a C# developer will still need to spend time on learning the MonoTouch framework, a web programmer will need to learn the PhoneGap framework and the rampup time to learn these frameworks isn’t going to be neglible (although it will be lesser than the time to learn Objective-C etc.)