I found Visual Studio + Visual Micro to be a much better solution than the OSX-based Xcode + embedXcode solution.
The latter is much more finicky (i.e. no spaces in file names, non-intuitive setup requirements, awful documentation, among other issues) but still a step up from Arduino IDE. However, I have transitioned all code development to Windows because I grew too frustrated with the issues on OSX. XCode I take it makes life very difficult for the embedXcode team with massive changes over time that take a lot of work to accommodate. So I don't blame the developer but I would suggest that EmbedXcode has a steeper learning curve than the Visual route for the simple reason that the Visual solution is much better integrated, operates easily on a GUI basis, and has excellent online documentation that you can print out if needed.
When I transition to a new CPU and a new copy of OSX this summer, I will attempt another go with Xcode+embedXcode. However, I doubt the results will be different. Bottom line for any IDE is not to get into the way. While the Arduino IDE is still pretty terrible, it does require a heck of a lot less work to get going than Xcode+embedxcode. Hence, for a while, I was using BBedit to modify my libraries while writing/uploading the programs that used those libraries with Arduino. Nuts.
All that said, if you are a programmer that is familiar with Xcode, then integrating embedXcode is likely childs play for you. As a novice Xcode user, I found the learning hill too steep to climb. That is also not to say that the Visual solution is perfect - it isn't! For example, there is no easy way to pare down the incredible visual clutter in the pull-down menus to reflect the realities of developing for Teensy vs. all the various things that Visual Studio can do. Similarly, commands for auto-indent (i.e. control-T in Arduinoland) are not easily found. But I'm more than happy to deal with all that in return for a more serene working environment (black screen, smart visual differentiation of variable names, etc.) that allows me to work on the programs and their libraries at the same time.