XCode's fine as an IDE. In fact I've had a play with a number of the tools and it's all good. The problem is with the documentation. Perhaps MSDN's been spoiling me, but the Apple developer network documentation is just a horrible mess. I've more or less given up on the documentation that was installed with XCode (because the search seems useless) and I'm using Google to search the online docs (because the search seems useless).
There's just no shape to it. I've been going through the 'getting started' pages, and it seems like there's at least two ways to make Mac apps - Cocoa and Carbon - but Carbon is described as 'an interface to make porting apps from OS9 to OSX easier.' Does that mean it's legacy? Can I use it? Is it going to prevent me from accessing any system features? Can I mix it with Cocoa? Cocoa's problem is that it appears to be built around window-based applications in Objective-C - can I use it for full-screen games? Can I mix Objective-C with C++ code? Are there performance hits involved? How does Objective-C's message-passing mechanism work under the hood? What happens if I send a message to an object that doesn't support it? All of these are questions that I have not yet found answers to.
I gave up on that after a while and started trying to find docs on more specific components - say, 3D graphics. I know that OpenGL is the graphics API du jour on the Mac, which is fine, I've used OpenGL in the past. As on Win32, there presumably needs to be a set of functions (Windows calls them 'WGL') to tie OpenGL into the rest of the OS's windowing system. What do I find? There seems to be at least three ways of doing OpenGL in MacOS - CGL, or 'Core OpenGL;' AGL, or 'Apple GL,' which is apparently built on CGL; and Cocoa OpenGL, which is class-based and built on CGL. Urgh.
It seems a lot like Linux development, except that the many millions of libraries which all do the exact same thing are pre-installed instead of being scattered around SourceForge.
I'm considering giving up and just using SDL, like I've done in the past... but I'm not using SDL on Windows, so I'd end up having to abstract it (yes, abstract an abstraction). I think I'll pick up the SDL source code and try and figure out how it does things...
Maybe, when I'm done, I'll write an article on all this.