Best Developer Tools for OS X
NoviceW writes to share that there are plenty of interesting articles written about Mac OS X applications for switchers, but not many guides focused on programmers switching from other operating systems. This guide lists a few of the more prominent tools for Mac developers, what other tools can't you do without?
AppKiDo is invaluable if you're a Cocoa programmer.
http://developer.apple.com/tools/sharkoptimize.htm l
'nuff said.
--ryan.
Don't say, "don't quote me," because if no one quotes you, you probably haven't said a thing worth saying.
O'Reilly's (no relation) has a great site for Mac tech/programming at MacDevCenter.
Also, Server Logistics, a Mac based web hosting company with cred, offers pre-packed mySQL for free. Gotta love that Aaron Faby.
It's not offtopic, dumbass. It's orthogonal.
I can't believe that the article didn't recommend Eclipse. Even Apple's Developer Connection recommends this wonderful program.
Of course, Eclipse is a good tool because it is multiplatform and highly extensible. I find it great for java and python (through pydev) work on my Mac and other boxen.
Navicula hydraulica plena anguilarum est. Omnes castelli tuus nostri sunt. Ed elli avea del cul fatto trombetta.
ZigVersion is a Subversion GUI that kicks ass.
I've found a use for BBEdit's free TextWrangler -- it's a really smooth program, and because it has a command line interface, TextWrangler is easy to get it to do what you want it to do. TextWrangler has the best system for merging two files that I've found.
Although I've come to use emacs more and more for quick source modifications and when programs are only 1 source file, I still appreciate the use of a good IDE like xcode (although I do think that visual studio is still a bit better) for the simplicity in navigating a large project. On the other hand, emacs does far better than xcode or visual studio at automatically indenting code.
I've found that the OSX developer program Sampler (which comes free with the developer distribution) is also a great program useful for getting a quick feel for where the bottle necks in my program are. Sampler is really intuitive to use, and it provides a nice way of navigating the calling tree of your program allowing you to see how different functions are spending what fraction of compute time. The only thing about Sampler that bugs me is that if I save the data, I haven't figured out how to get the data in terms of percents (as opposed to sample counts) when I load it later.
well - MAMP (mamp.info) does give you everything in one package, with the newest versions (Apache 2 & PHP 5)...
and it really invites to screw around with the setup.
before MAMP i often hesistated to install experimental stuff, now i can just drag the one(!) folder to the trash and start with a fresh install.
things i did with MAMP which were hard to realize otherwise (sitting with the powerBook on the couch) include
and much more...
it really helps if you enjoy messing around with a server setup and want to learn how everything works without srewing up your Mac OS install
I, too, adore vi, and use it to write code for OSX/Darwin, and Linux, the former for 5 years, and the latter for 14 years.. its a rock-solid tool in my hands, and I have no need to go to any other editor.
Have you added cscope to yours yet?
; -- the corruption of government starts with its secrets. a truly free people keep no secrets. --
Eclipse has its strong points, but some people (like me) just don't like it. I can't really say why i don't like it, i guess it just doesn't feel right to me. I do like NetBeans a lot though. NetBeans looks and behaves more like a real OS X application than Eclipse IMO.
And if you're new to Swing development, Matisse (the GUI designer in NetBeans) really helps a lot... it makes it easy to develop java GUI's in the same way that Visual Studio makes it easy to develop winforms GUI's.
If you're a java developer (or are interested in getting started with Java) on OS X, i highly recommend giving NetBeans a shot. It's free, open source, easy to use and powerful.
note: i have nothing to do with the NetBeans project, i just think it's a great free IDE that deserves as much attention as Eclipse.
Did you RTFA? They mentioned Eclipse.
Why not fork?
Well, my fingers are emacs wired. So let the flame wars begin ;)
... sort of a half-intellisense) has problems with generating tags with MACRO defined entities in C and C++. But well.
But I have to say, that in all my years programming, I have never been more productive than when using emacs on a widescreen with 2 vertically seperated windows open at all times. And if neccessary, a few additional console windows. The hands never leave the keyboard in that setting. You have svn/shell/dired/ssh/editing/documentation readily available, all only being a tenth of a second away at your fingertips. Even for file management that that double window setup beats even the * Commander tools by far. Teh only beef I have is, that etags (for better source browsing
Just because I can imagine doing a hippopotamus, doesn't mean I'd like to do it.
I am pretty sure PHP can do more than just web guestbooks. You know, little things, like running Friendster, Yahoo, and GAIA Online. I've also run apps like the OSS Horde/IMP web-based mail front-end with tens of thousands of users. I reuse PHP code all the time. And if you add in some of the code optimizers and server accelerators, you can really make PHP sing.
You also wrote, "Thanks for wasting years of my life and teaching me bad programming habits, PHP." Which bad habits would that be? There are good and bad ways of writing PHP, just like there are with ANY computer language.
$nice = $webHosting + $domainNames + $sslCerts
That's mostly the same as Emacs' default key bindings, you know.
"[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz
It's hard to describe the wonder of Quicksilver. Just try it.
If you code Cocoa applications you're more or less forced to use XCode. You can of course use any text editor and interface builder, but XCode is the only one that is integrated with IB. The small size of the Mac market here and Apple being the 800lb gorilla in that space means that anyone with competing coding tools is at an automatic disadvantage, much like Metrowerks was with Code Warrior. This is a real pity because the lack of competition enables Apple to be very lax about XCode performance and quality.
If you do Java, you have Eclipse or IDEA, both of which are streets ahead of XCode for Java coding. XCode doesn't even compare here.
And if you do Profeesional PHP coding (yes, it does exist), you may as well spend the money on the Zend IDE, since there is no other PHP IDE on OSX that shows classes and offers code completion and debugging as Zend does.
You can of course use Textmate for RoR, since it seems it was engineered with that in mind mainly, but you can do just as well for any of the PHP, Ruby and Python (and Perl, for that matter) group with the respective Eclipse plugins.
I personally use Subethaedit for quick single file editing and Eclipse for anything else. Textmate and BBedit offer me nothing that Exclipse doesn't.
Finally, a good knowledge of vi/vim is a real plus since it's what is easiest to use when you need to edit files quickly in the terminal. Trying to futz around with a GUI editor when you're editing init.d scripts etc is a waste of time. Plus vi will be on any and every Unix type machine you will ever find.
If your code is GPL'd I highly recommend giving QT 4.0 try. The native qt hooks are remarkably native looking for mac os x. It obviously depends on what your application is, but coding in qt 4.0 gives you unix / mac portable code w/ no effort, particularly if you do not have any mac os dependent code (i.e. hardware/device calls etc). (We have not tried the windows QT so do not have a point of reference )
Until few weeks ago you could get a discount. But unfortunately you have to pay more.
Well, I've been using XCode for some time now, and not had the problems you're describing. I run it on a next-to-last generation AlBook (1.67GHz G4 with 1GB of RAM), and at least for pure Java projects, its text editing is just fine, it jumps to methods and classes at perfectly reasonable speeds, and the only persistent problems I've had with it is an odd tendency to lose track of how far it should be indented in large files, and a lack of support for the Expression... dialog for debugging Java projects.
So...I dunno what you're doing wrong, or what I'm doing right, but I find XCode to be more than adequate to my needs, and your experience is not universal.
Dan Aris
Fun. Free. Online. RPG. BattleMaster.
The OS X developer tools include a visual diff program called FileMerge. You can open it from the command line with 'opendiff file1 file2', or if you prefer to use the gui to open the files/directories just spotlight for FileMerge.
I find it really slow, and prefer to use Fugu for my SFTP needs:
http://rsug.itd.umich.edu/software/fugu/
- chrish
Check out the sample code for the OSXAdapter, which is an easy way to tie in OSX support in a cross platform way. They also provide AppleJavaExtensions stubs so you can compile for Apple specifics even on non-Apple platforms. All the code uses reflection to determine if the Apple extensions are there, so nothing special needs to be shipped oncce the byte code is built.
SubEthaEdit is invaluable for collaboration. I can't say how many times it has come in handy when I've wanted to help someone with code over the Internet or plan out code with someone. Not to mention taking notes with 5 other people in 'ole Computer Science lectures...
It always gives me a kick to see my Java app, developed solely on Windows work almost flawlessly on Linux or OS X. I say almost but there are some minor UI inconsistencies that I need to fix. You mention for example the menu bar should go at the top, but it doesn't in my app. Also, my menus look a bit stupid since it uses the Windows conventions for menu structure for underlining accelerator keys, e.g. File.
Both Apple and Sun have developer guides for fully integrating your Java Swing app into Mac OS X. Here is Apple's guide and Java system properties to help with Mac integration.
How to fix the menu bar: Add -Dapple.laf.useScreenMenuBar=true to the command line when you call your app.
How to fix the application name (so it doesn't show up as com.mypackage.foobar): Add -Xdock:name="My Application's Name" to the command line when you call your app.
How to make your custom icon show up in the dock when you launch your app: Add -Xdock:icon="/path/to/custom_icon.png" to the command line when you call your app.
How to make menu shortcuts use the proper keys, regardless of what OS you're on:
Or, if you need to organize your menus differently for each OS, you can check what OS you are on as you are building the menus:
Also, the best thing you can do is to make your app a regular Mac application bundle. You can use /Developer/Applications/Java Tools/Jar Bundler.app to do this. Or, you can do it via an ant task. Take a look at the macBuild target of the build.xml file for TripleA an example of how to make a Mac OS X application bundle from Java code using ant.
I am concerned about any program, any piece of hardware, any treaty, any law that treats me as a consumer, not a citizen
If I'm doing Perl or shell script work, and want to produce apps, I go with Platypus -- combined with something like Pashua or CocoaDialog, you can piece together nice little apps in no time.
How about something non-trivial? NSBitmapImagRep's initWithBitmapDataPlanes is a method I use quite a lot.
e rSampleSamplesPerPixelHasAlphaIsPlanarColorSpaceNa meBytesPerRowBitsPerPixel(planes, 300, 400, 24, 3, NO, NO ,nil, 1200, 24). Yeah, that's really readable. Or maybe a name less verbose, but no clue to what the parameters do.
) .pixelsHigh(height).bitsPerSample(24).create() etc, but that involves a lot of tedious work on the class creator. I'll stick to Objective-C and actually ship software that's surprisingly (even disturbingly) easy to write.
initWithBitmapDataPlanes:planes pixelsWide:300 pixelsHigh:400 bitsPerSample:24 samplesPerPixel:3 hasAlpha:NO isPlanar:NO colorSpaceName:nil bytesPerRow:1200 bitsPerPixel:24.
In your world, that would be
initWithBitmapDataPlanesPixelsWidePixelsHighBitsP
There's also a hacky way in Java to make Creator objects and do initWithBitmapDataPlanes(planes).pixelsWide(width
FileMerge - free with Apple's Developer tools - is a good utility for merging files and folders.
Also, BBEdit/TextWrangler both have a good compare utility and TextWrangler is free.
My favorite though is CodeWarrior's compare utility. It is simple and easy to use but CodeWarrior is now dead. Plus, there would be no point in buying CW just for its compare utility. Still, it's probably the one I use the most.
infested with jello like fishes no melotron wishes
Instead of swearing at the language, try to find a better source of tutorial on the language. Apple has some good ones on their developer site.
When i first learned about Objective-C, I had some trouble grasping the idea too but it turned out that I was getting confused due to now knowing enough about the languagee and not taking time to learn the new terms.
The [ and ] means message passing is being done. Note, that is "message passing" not "calling function" You need to change your thinking and world when working in objective-c.
[newImage initWithContentsOfFile:filename];
Here, we are doing a message passing using the newImage variable. The message is called "initWithContentsOfFile (it is sorta like function name but think of it as message). The first parameter is filename. The name of message labels this first parameter.
Another example (fake code):
[MyClass MyClassWithData:"hello" length:5];
MyClass, in this case, is a class rather than a variable. You can also pass messages to classes. In C++ world, it is similar to static member functions. The message being passed is called 'MyClasWithData" and its first parameter is "hello". The 2nd parameter is 5 which is labeled length.
The objective-c world is a wondrous place to work once you get hang of it. There are several things that are much harder to do in C or some other language, such as creating a proxy class that can take _any_ messages even if you did not define one.
Hope this inspires you to go back and try to learn objective-c again.
So, for Mac application developers, here's a better list:
- BBEdit - the best text editor, period.
- Interface Builder - the best GUI builder.
- Shark - if performance is important then there's no better tool.
- Xcode - well, there's really no other choice these days, and it's getting better.
- AppKiDo - for quick reference to the Cocoa APIs.
- Terminal - good enough for me.
- OmniGraffle - for application/class modeling and design.
There are many other important and useful applications, but these ones really are the core essentials for application development (at least for me). Anything I left out?infested with jello like fishes no melotron wishes
Xcode is a rethink of Project Builder, but I don't think it's a rewrite. I didn't use Project Builder for long on Mac OS X, and I never used it on NeXT, but Xcode is so much faster than Project Builder it's freaky. If you think Xcode is slow, thank your lucky star you never had to use Project Builder on OS X 10.2. :)
I would be very surprised if Xcode didn't include optional support for the new free Intel compilers in its next major version (3.0 with OS X 10.5 "Leopard", probably), but I don't think it'll be entirely replaced since Apple has made a heavy commitment to GCC (including some more or less experimental efforts like garbage collection and LLVM), and more importantly since the Intel compiler doesn't do Objective-C at all. I don't think it's impossible at all to replace the compiler; even if Xcode *is* hardcoded to gcc, which I don't think, just write a shell script that calls the other compiler and translates the command line options as necessary and put that in place. And, after all, if you're doing command line development and see yourself just doing that for the foreseeable future, there's no reason to just use text editors and Make, especially not if that's the way you've traditionally done it.
To answer questions in your comment, you don't tell gcc to make a Universal binary, you build an i386 build and a ppc build and use lipo to make a fat binary, and my Xcode build log tells me that you supply framework search paths or explicit framework names to ld and gcc directly.