Cocoa has actually evolved significantly. There was a long period on the Mac where the (now legacy) Carbon and Cocoa APIs didn't overlap too well. In fact, <i>both</i> APIs had things that the other API couldn't even do, and <i>both</i> APIs had strengths in completely different areas. I think by about the time 10.3 Panther was released Cocoa had filled in a lot of the gaps, and Apple eventually decided to not port Carbon to 64-bit at all. Carbon remains functional but it's almost completely deprecated.<p>As great as versions like Mac OS X 10.3 were, later versions of the Cocoa API are noticeably better. In fact, it's now hard to support anything earlier than 10.6 because of improvements to libraries (e.g. more native UI views available, more features per class), improvements to the compiler and other developer tools (e.g. ARC), and changes to the language (e.g. blocks).<p>As of Mac OS X 10.8, the Cocoa frameworks are decently in line with iOS, far beyond the simple stuff like NSArray; for example, AVFoundation.framework and GLKTextureLoader now exist on both platforms which is useful for consistent game development.<p>Cocoa is also more customizable than you might think. While technically Cocoa won't allow certain view or window properties to change, an <i>illusion</i> of a change can be just as effective and is straightforward (not to mention being more stable for the OS in the long run). For instance: maybe you create a mostly-transparent borderless window at a specific location with a certain Z-order, in which you draw what <i>looks like</i> a window frame modification; this is often exactly what is required even though the window underneath didn't actually change at all.<p>I have my own share of frustrations with Cocoa in spite of what I've said. Cocoa is <i>not</i> perfect and I do think they still have some work to do in terms of improving sync with iOS and making it a lot more powerful. A pet peeve of mine is that APIs often lag far behind new OS features (e.g. new UI paradigms...it seemed to take forever for Spaces to be properly handled in the API).