Modern Mac Development? 210
CDarklock asks: "I'm getting seriously interested in setting a new Mac next to my Windows box (to replace the Mac SE, which should tell you about how long it's been). But on Linux and Windows, I'm accustomed to writing lots of custom apps in C++ to fill the gaps around the system, but I haven't written anything on a Mac for something like fifteen years. As a professional Windows developer, what sort of expense am I facing to outfit a new Mac with development tools comparable to Microsoft's Visual Studio .NET, and what sort of learning curve should I expect?"
Xcode (Score:5, Informative)
As for the learning curve, it may take some time to get used to things being done differently in OS X, but moving from C++ to Java isn't too difficult if you choose to use Java Cocoa.
Objective C is generally a better bet for Cocoa development, but it will have a slightly steeper learning curve, since the syntax is significantly different.
Other than the change of language, the Cocoa frameworks might take a while to learn, but the documentation is very good.
Re:Xcode (Score:2, Interesting)
Re:Xcode (Score:3, Informative)
You can develop Palm applications in Xcode, too, but I don't think that's what the OP is looking for...
Re:Xcode (Score:2)
Re:Xcode (Score:2, Informative)
Re:Xcode (Score:3, Informative)
Among other things, it's capable of importing Code Warrior projects.
Re:Xcode (Score:5, Informative)
The vast majority of frameworks available for OS X are written in Objective-C, and aren't necessarily well-documented. Even though there is an Objective-C - Java bridge, you'll still have to learn ObjC to use these frameworks just to learn how they work.
In my experience, ObjC apps run faster and consume less memory than Java Cocoa apps. I have also found that this tends to be a bigger issue in the Mac world than it is in the PC world, because Mac users tend to hold onto their computers for much longer. That, and the Java Runtime Environment for Macs doesn't seem to be nearly as well-optimized as the JRE for PCs. (well, Windows, at least.)
Massive portions of the OS X APIs have not been ported to Cocoa yet. If you use ObjC Cocoa, a lot of the ObjC objects you use will be toll-free bridged with the equivalent data structures in the Carbon libraries. It should also be a lot easier to deal with the even older C libraries that haven't even been included in Carbon yet.
But most of all, my impression is that if you're using the Cocoa libraries and the Java language, you have more or less given up all the benefits of the Java platform (such as the ability to write platform-independent apps), as well as the benefits of the Objective-C language (such as categories.) Unless you just really don't want to trade automatic garbage collection for reference counting or just really don't want to learn a new language, you're giving up a lot to gain a little by using Java for Cocoa development.
Good Intro to Objective-C (Score:5, Informative)
ObjC.pdf [google.com]
I highly recommend it to anyone coming from a C++ or Java background who is wondering what the big deal about Cocoa is.
And if this little PDF catches your Fancy, Aaron Hillegass has an excellant book: "Cocoa Programming for Mac OS X". Another good book is "Building Cocoa Applications" by Garfinkel and Mahoney.
Re:Correction (Score:3, Informative)
(Stupid me. I tend to (wrongly) think "C == Carbon" when I think about the OS X libraries.)
Re:Xcode (Score:3, Informative)
I can't find the external link to this now (it may only have been in the developer docs for the Tiger developer releases), but the Objective-C runtime in Tiger has garbage collection. And as of Panther (so, for just over a year now) there has been built in ObjC runtime support for thread synchronization in a similar manner to Java - via the @synchronized keyword - and runtime-supplied try/catch/finally (rather t
Re:Xcode (Score:3, Interesting)
Depends on how you code things. We have a fairly large app written in Cocoa/Java and if you work to abstract things out a bit you can cut the amount of OS X specific code down quite a bit. For example, we have a GUI that runs under Cocoa and Swing. By factoring the code properly (Mod
Re:Xcode (Score:5, Interesting)
Objective C is generally a better bet for Cocoa development, but it will have a slightly steeper learning curve, since the syntax is significantly different.
Different, yes, but also very simple, so don't overestimate the level of effort required, assuming you know C.
Objective-C is an object-oriented extension to C, like C++, but it took a very different approach than C++. While C++ is large and complex, Objective-C is small and simple. The syntax is deliberately based on Smalltalk syntax, so if you know Smalltalk you'll have even less to learn. If you don't know Smalltalk, though, keep in mind that Smalltalk is a language whose syntax and rules you can literally master in an afternoon. Objective-C has added some new ideas, such as "categories" that Smalltalk didn't have, and there are some interactions between the Smalltalkish syntax and the underlying C syntax, so Objective-C takes a day for a C programmer to fully understand, rather than an afternoon (C++, of course, takes months).
For C++ and Java programmers who've never seen Smalltalk or another completely dynamically-typed language, I caution you to go slowly at first and take some time to understand the Smalltalk/Objective-C idea of what an "object" is. Or a "class". It's tempting to just dive right into the syntax, figuring that you know the "OO stuff", but the OO stuff in question is just different enough that you'll tie yourself in knots if you don't take a few minutes to understand what the differences are.
For experienced C++ programmers there's another interesting goody waiting... Objective-C++. The Objective-C and C++ extensions to C are orthogonal, so you can actually mix Objective-C and C++ code at will. Objective-C methods can take C++ objects as parameters and vice versa, and they can store pointers to each other.
The result is a very powerful language that lets you choose between the flat-out on-the-metal efficiency of good C++ code and the extreme flexibility of late-bound Objective-C code. And with C++'s polymorphism and Objective-C's categories (which provide limited compile-time typechecking) you even have a couple of steps in between. Be very, very, careful though. It's easy to create an unmaintainable mess when you start mixing things.
BTW, I should make a disclaimer here: I have looked at but never written code for Mac OS X. Everything I know about Objective-C comes from when I used to own a NeXT machine, so there may be a few differences. Based on the OS X code I've read, though, I don't think there are very many or that they're very large.
Re:Xcode (Score:5, Informative)
I have to add to your very nice and concise description:
- Don't try to learn Objective-C by yourself, it's weird syntaxically and many many pitfalls can be avoided by carefully perusing and actually doing the examples for the first few chapters of Ora's Learning Cocoa with Objective-C (http://www.oreilly.com/catalog/learncocoa2/). It's that weird. But it's totally worth it.
- XCode and VC both have the good things and bad things. I'd say that VC is slightly better because they got more years under the belt that XCode. They also got Visual Assist X, which is God-sent (http://www.wholetomato.com/). And only for the build styles, that are so well hidden in XCode, that ought to piss you off (on VC, you just select the configuration and here you go).
- As usual, you will pester while doing the transition. It's normal. You are accustomed to something and that "something" is not what you will have, hence you won't have your favorite little shortcut, or your thing you always do, software will react oddly too. Again, not because it's much worst, it's simply different.
All in all, it's a very interesting endeavor. Good luck!
Mike
Re:Xcode (Score:2)
OK, the syntax is a little different, but I don't think it's that hard to get your head around. Instead of
someObject.doSomething(param1, param2);
[someObject doSomethingWith:param1 andWith:p
Don't forget GCC (Score:2, Informative)
Personally I like XCode. I do most of my coding in it. I don't really like the SCM support, but svn on the command line works fine. C++ development is fine; you can use the Carbon API.
For my school Java projects I work in Eclipse. Which, incidentally, works j
Re: Obj-C learning curve (Score:5, Funny)
Further, if memory serves, it's actually syntactic sugar for objc_msgSend( object, "methodcall:", parameter );
Of course, if you actually use it that way outside the debugger, I hear Steve Jobs personally flies to your house and takes your Mac away from you.
YLFIDifficulty with VS.NET (Score:5, Funny)
(Okay, so I am a recent convert.)
X-Code (Score:3, Interesting)
python? (Score:3, Interesting)
Re:python? (Score:2, Informative)
You forgot the c in the link (Score:4, Informative)
http://pyobjc.sourceforge.net [sourceforge.net]
Re:python? (Score:2, Informative)
Things like PyObjC [sourceforge.net] let you do everything that the native frameworks can in Python. (That is, you can write full Cocoa apps entirely in Python). Also, you can use Python in Obj-C code. I know for certain that people have written plugins for many apps seemlessly this way.
I don't know what you mean by "getting undo for free" -- if you mea
what you should expect (Score:2)
Re:what you should expect (Score:2)
Learn Objective-C. Sure, you can develop OS X software in X or Java, but the Cocoa APIs are really a joy to use, and they fit with the Objective-C language a lot better than they do with Java. Learn about categories. They are an amazingly powerful method of extending objects - you can add methods to any existing class without subclass
Re:what you should expect (Score:3, Informative)
You have conditional breakpoints. There just isn't a UI for 'em. Unless they added one in XCode 2.
See http://developer.apple.com/technotes/tn/tn2032.ht
Apple owner and developer (Score:2)
Re:Apple owner and developer (Score:3, Informative)
Java is fine and dandy, but anyone who's had lots of experience with C++ might feel a bit more at home using wxWidgets [wxwidgets.org]. I've done a bit of work using wxWidgets, and it's pretty spiffy.
I will admit, however, that the majority of my stuff has been for Windows/Linux cross-compatibility, with little focus on Macs.
Apple Development (Score:5, Informative)
The next step is to sign up for the Apple Developer Connection. It has many membership levels ranging from free (so you can download developer tool updates) to very expensive. Update your compiler and tools to the latest version using this service.
If you like Java, downloading Eclipse might be a good way to go. I haven't used Eclipse much, but have enjoyed all of my experiences with it on OS X.
You will also want to install either Darwin Ports or Fink. These are package management systems that are based on BSD Ports and apt (respectively). I'm partial to Darwin Ports, but both systems have their strengths and weaknesses.
If you want dead-tree documentation, the two books to start off with are "Cocoa Programming for Mac OS X" by Aaron Hillegass and "Core Mac OS X and Unix Programming" by Mark Dalrymple and Aaron Hillegass. These guides are thorough, and the authors have been part of the Objective-C/Cocoa community since the Next days, and give good tutorials on what is the Mac philosophy of software development.
Another option for an IDE, which has decent but dated interfaces to the OS X world is CodeWarrior. I know a bunch of developers who swear by the CodeWarrior development platform. I really couldn't get into it myself, but it seems to have a nice toolkit for cross-platform development.
Have fun!
Re:Apple Development (Score:2)
Does Eclipse integrate well with Obj-C? Other posts have claimed that would be a better language to focus on.
As an alternative to Darwin Ports and Fink, have you tried Gentoo for MacOS? (Not to be confused with Gentoo Linux for PPC!) I'm currently a Gentoo Linux user, so this would be my default choice. How does it compare?
Thanks!
XCode is free... (Score:3, Informative)
If you have any costs (other than the hardware), they might be:
ADC membership [apple.com] (student membership is free, non-student cost is significant)
WWDC attendance
Other apple developer training/seminars
None of the above are required. ADC membership will get you access to pre-release hardware and software to test your apps; but you're not doing commercial work, right? Apple training and the WWDC gives you insight into the inner workings of the OS, but you can get much of this info on Apple's developer website [apple.com]
Re:XCode is free... (Score:2)
Re:XCode is free... (Score:5, Informative)
ADC 1 year subscription for Student is $99
ADC 1 year subscription with 1 Hardware coupon is $500
ADC 1 year subscription with 10 Hardware coupons is $3500
The Hardware discount is significant if you're getting a high end mac. I suggest the $500 subscription and you'll save that on a high end powerbook or G5 powermac
Click United States [apple.com] Then ADC Hardware Purchase Program.
Big savings plus it's like subscribing to the MSDN you get cool shit all year.
Re:XCode is free... (Score:3, Informative)
Student ADC members get the same discounts as the $500 select members, so if he's a student he could get those same discounts with the $99 membership.
Re:XCode is free... (Score:3, Informative)
From what I've seen, unless you're buying quite high end stuff, it's about as cheap to buy from the regular education store than from th
Re:XCode is free... (Score:2)
Re:XCode is free... (Score:2)
New feature in Tiger ;-) (Score:3, Interesting)
Remap modifiers such as control and caps lock to be super elite.
http://www.apple.com/macosx/newfeatures/newfeatur
Do this now. (Score:2)
Tiger? (Score:3, Insightful)
Re:Tiger? (Score:3, Informative)
http://www.apple.com/macosx/uptodate/ [apple.com]
Re:Tiger? (Score:3, Informative)
Book (Score:3, Informative)
Other than the obvious (Score:5, Informative)
I can give some insight into the question of learning curve.
I develop
- The mac is like Linux. Get used to the Linux command line. If you don't know basic commands like LS instead of DIR then the curve will be steap. If you have used a *nix system or are a quick study, I would pickup an O'reilly book and get up to speed with things like user permissions (CHMOD) and GREP and the Pipe "|" for automation. Also know than things like Chron jobs replace Windows Scheduler. Get a book adn take the few hours to skim it. It will be a great reference if nothing else.
- Perpare yourself for more text editor usage and less sophisticated Integrated Developer Environment (IDE). Okay, let the Apple Xcoders begin their flame. I really feel that MS got some things very very right with Visual Studio
- You're gonna need an office suite. MS Office.X is great, but for the money, I kinda like OO.o and use NeoOffice/J [neooffice.org] myself. A Mac alternative to Visio is OmniGraffle and is better IMHO.
- Get used to few, but higher quality choices. Okay, this one is touchy too but there are few fewer choices for software and websites to Google for a problem but the ones you do find for whatever the task might be are of better quality I think. Apple does a great many things right the first time so even if an article is written for Jaguar, it may very well work under Tiger, etc. I have found this very frustrating as I try to install something under IIS 6 with a document written for IIS 5 for example.
- Don't underestimate the hardware. Okay, your budget, your choice, but I would be more inclined to recommend to a serious developer buying a Power Mac (watch out, rumors of new updates in May so careful with the timing) over a Mac mini. The Mac mini is great for a home user wanting to check email, but if you are going to develop, compile, and potentially deploy Web Objects and such, don't underestimate the G5's supperiority to it's 32-bit father. At a minimum, follow all the recommendations and get 512mb ram (I have a Gig and use it).
Lastly, "Welcome".
Re:Other than the obvious (Score:2)
OmniGraffle may or may not be included with a new Mac. Mine came with it and OmniOutliner, but I am currently one major version behind unless I want to pay.
Why does he "need" an office suite anyway?
Re:Other than the obvious (Score:2)
Reasonable question. I hope this answer suffices:
Office suites are the toolsets of 21st century inner/extra-office business. They go beyond the basic MS Word
As a developer, I find MS Office indespensable. I use Word to edit and contribute to proposals with the ability to set change tracking on so the project manager can accept or edit my changes w
Re:Other than the obvious (Score:2)
Office suites are the toolsets of 21st century inner/extra-office business. They go beyond the basic MS Word
You reckon? Office Suites seem so 20th century to me.
I seeing a growing trend to using web based collaboration tools for all that stuff. Web based project management tools, issue trackers, wikis etc etc. It's quite liberating to be fr
A few points (Score:2)
Yes, I know you said 'apart from xcode', and I agree (though in my case I'm happy about it) that knowledge of unix is beneficia
Re:A few points (Score:2)
Re:Other than the obvious (Score:2)
No offense, but MS got some things very very right with Visual Studio 6. VS.NET was very very wrong.
People can say what they want about VB6, but being able to edit your code while debugging saves a lot of headache. There have been times in VS.NET where I've had to rebuild an entire project because a file is out of sync and its telling me I have a bug o
Re:Parent is Troll? (Score:3, Interesting)
Wow, you're a real detective!
[from the parent "troll" I authored] I develop
Comparing a php app written in BBedit and an asp+ app written in VS.Net is less than fair and pure trollbait, since I cam write a php app in notepad on Windows as well, but I would need to be seriously dumb to do that wouldn't I?
This comment is completely inaccurate. Fir
Re:Parent is Troll? (Score:3, Funny)
Yeah, as dumb as <SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SP A N><SPAN></SPAN><SPAN></SPAN><DIV> </DIV><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN>
If you love .net (Score:2)
I am pretty sure they have a Mac port.
As everyone else has said the development tools come with the mac. Kind of remindes me of the old AppleII days
Makes me wonder if Microsoft will start throwing in Visual Studio with Longhorn.
Re:If you love .net (Score:2)
The lite edition (which is still quite solid) of Visual Studio is a free download now. You can even get it with Firefox, though the platform SDK still requires IE to get. It's componentized now, so you download the individual pieces you need (so if you don't want VB, you don't get VB).
I sincerely doubt MS will ship any real dev tools with Longhorn. The one market MS really does not want to undercut is the ISV market fo
Re:If you love .net (Score:2)
I know there are some die hard BorlandC++ users but for the most part for
The ISVs that Microsoft does not want to tick off are the people that make add ins for VS.
Re:If you love .net (Score:3, Insightful)
On Windows, the platform is mature and widely adopted, with a rich variety of software from independent vendors. Microsoft feels they can charge for the development tools, and does so.
On OSX, the platform -- not counting the Unix foundation -- is young, with a comparitively miniscule pool of software vendors. Apple needs to grow the pool of available software for the platform, so giving their development suite away is a way to encourage more software to be a
Re:If you love .net (Score:5, Informative)
Are you kidding? Cocoa is based on NeXTStep, which has been actively refined since the late 80's. Win32 dates from the early 90's, and
Interface Builder, the primary Cocoa/NeXTStep GUI tool, was the first of it's kind. I saw it for the first time in 1989.
The class library that makes up Cocoa is one of the most mature frameworks out there.
NeXT retrospective (was Re:If you love .net) (Score:3, Interesting)
- John Carmack
- Tim Berners-Lee
- Andrew Stone
Companies successful w/ NeXTstep (other than the afore-mentioned Omni):
- Lighthouse Design (bought out by Sun to do Java development)
- Stone Corp.
- the company MCI hired to create the database which made ``Friends and Family'' work --- they liked it so much, they bought the company
Programs w/ a heavy NeXT heritage:
- Doom
- WorldWideWeb.app
- TeXshop (Alan Hoenig's book, _TeX Unbound_ is basically a paean to to glories of Display P
Re:relative age (was Re:If you love .net) (Score:3, Insightful)
NeXT used to charge a _lot_ more for their Dev tools for a while (they started out as free, then were an optional install, then were ~$4,995 and now are free again). The price change tracks pretty closely whether or no the company
Re:If you love .net (Score:2)
I just got through saying that they don't charge for them anymore. Those "lite" versions are more heavy duty than most full blown IDE's. About the only thing really crippled is SQL server, but it's still adequate for development. Write your app right and you can switch to postgresql, which has odbc, ado, and
Still, LWATCDR is probably right in correcting my reasoning
Xcode + a good book or two (Score:5, Informative)
Xcode, as every other post has said, is free.
Wrt books, I'd recommend "Cocoa Programming for Mac OS X, 2nd ed", by Aaron Hillegass. Aaron has a lot of experience teaching NextStep, WebObjects and OS X development, and his book reflect that experience. It is excellent - much better than the O'Reilly offerings I've seen. Big Nerd Ranch [bignerdranch.com] also has a book about programming the underpinnings of OS X called "Core Mac OS X and Unix Programming." Haven't seen this version book yet, but apparently it's the spiffed up, published version of BNR's student guide, so I'd bet it's pretty well done. You can get both together for $96.20 from Amazon.
There are other good references, tutorials, as well, some free on-line, and some for purchase. Do some Googling and mining on Amazon or B&N to find one that suits your purposes.
BTW, OS X has some very strong scripting capabilities built in that you might find useful for the kinds of apps you typically develop. And, as someone else noted, Ruby and other cool hacking languages come shipped with OS X and work well with XCode. Also, Eclipse, with all its goodness, runs nicely on OS X.
Lastly, if you want to put the limitations of "modern" programming languages behind you and get back to the future of software development, OS X has some of the best OSS Lisp implementations. SBCL or OpenMCL (if you want to do Cocoa apps), plus SLIME and Emacs is all a real programmer needs, and it's all free. *grynn*
Re:Xcode + a good book or two (Score:2)
Plan comparison chart (Score:2)
See the chart here: http://developer.apple.com/membership/details.htm
Avail yourself of the online resources. (Score:5, Informative)
http://rentzsch.com/
http://www.idevapps.com/f
http://www.zathras.de/angelweb/x2004-12-05b
The main challenges with Cocoa are learning how to navigate project builder so as to connect things up, and figuring out all the undocumented interdependencies between Cocoa objects.
One of the things that really screwed me up for a long time was not realizing that the UI objects aren't re-entrant, so if you call a UI object from a thread other than the main thread, you're likely to get random crashes.
The biggest thing for me though was figuring out project builder - figuring out how outlets and actions work. This is particularly a problem because there's no file you can edit to do outlets and connections - you have to do it with the GUI, and it's extremely counterintuitive. Once you figure it out it's easy, though. So it's good to just type your way through a couple of tutorials just to get the hang of it.
If you want to look at some example source code, I have something up on sourceforge that's (a) not trivial, but (b) not heinously complex, so it might be worth looking at. http://www.sourceforge.net/projects/gofer
Re:Avail yourself of the online resources. (Score:2, Informative)
Cocoa is the way to go (Score:5, Informative)
You have two ways to go in terms of APIs. Cocoa and Carbon. Cocoa is a refined version of NeXT's OpenStep. Carbon is a cleaned up version of the old Classic Mac OS API (but with a huge number of changes
Cocoa gives you most of the behavior for free. You'll write less code, and you'll probably end up with a more Mac-like application. (It's entirely possible to write a a well-behaved Carbon app, but you'll have a lot more to learn in order to do it right, as fewer things are done for you automatically.)
With Cocoa you'll have to learn Objective C. This is not a big deal. If you know C, then you can learn the handful of additions which comprise Objective C in less than an hour. It's a very simple language.
Theoretically you can program Cocoa apps in Java, but I do not suggest that you attempt this. Java does not really fit into the Cocoa model very well (it's not nearly dynamic enough) and was shoehorned in as a way to attract developers who refused to learn ObjC. This was a mistake on Apple's part, and they seem to have realized it
I strongly recommend that you spend some time with Hillegass's book [amazon.com] on Cocoa. Objective C an elegant language, and is certainly the fastest way to develop Mac applications.
If you are a diehard C++ fan, then you may be better off with Carbon, but there will probably be a bigger learning curve as the Carbon libraries are more complex. (Carbon has a long complicated history, from its Pascal roots and old Classic Mac OS constructs (resource forks, FSspecs, Gworlds, etc.) and repeated changes in design (GetNextEvent() replaced by WaitNextEvent() and then Carbon Events, QuickDraw replaced by Color QuickDraw and now by Quartz 2D) so it takes quite a while to figure it all out.
I'd give ObjC and Cocoa a chance first. You can always use Objective-C++ to combine an ObjC user interface with a C++ backend, if you need to port old code. Be sure to check out MacSTL [pixelglow.com] as it provides some nifty stuff to treat some Core Foundation and Foundation objects in an STL manner.
As for tools
Re:Cocoa is the way to go (Score:3, Insightful)
An important example of such deviation is Apple's use of tabbed browsing in Safari. And now I'd like to take this opportunity to remind slashdotters that tabbed browsing was something I predicted years ago [slashdot.org], but was slapped down by others who said that tabs would never happen in Safari because they violated Apple's HIGs. I was modded down for my premonition,
Re:Cocoa is the way to go (Score:2)
I have to say, though, I still use Camino (Chimera then) over Safari, but more because I've just gotten used to its quirks than anything else.
developer.apple.com (Score:2)
I'd definitely recommend a copy of "Building Cocoa Applications" published by O'Reilly. It walks you through the basics of Cocoa, and also introduces interface buil
Re:developer.apple.com (Score:2, Funny)
Where's my Xanax?
From a broader scope (Score:2, Informative)
TrollTech's Qt (Score:2)
Re:TrollTech's Qt (Score:3, Insightful)
There is no such thing as a good cross platform GUI. Either your GUI fits with the native platform's HIGs, or it is cross platform[1]. You can not have both. Fortunately, good code abstracts the application logic from the UI, so it is
Not only GUI development on Mac OS X (Score:3, Insightful)
You are not limited to using XCode on Mac OS X. Once you have the developer tools installed you can use Make and Emacs (or VIM, or whatever) if you want. You could even install KDevelop and use that, if you wanted. You can develop with Qt and its tools as well, if you want to go that direction as well.
You also don't need to develop in Cocoa, if you feel up to learning the lower-level Carbon APIs and do not want to write code in Objective C.
I expect that someone has provided Cocoa bindings for Python, if you want to write "native" look apps with that. However, the existing Tk interfaces just work.
OSX has many free, high quality development tools (Score:5, Informative)
Whether or not it's comparable is debatable, but every copy of OSX includes XCode, which is a full suite of graphical and command line development tools: programs, libraries, examples, and copious documentation. And it's free.
So there's that.
Additionally, if you get a copy of Tiger -- which a Mac bought now should either include or be eligible for an upgrade to -- then you get Dashboard, which will let you develop small desktop applications using, as I understand it, Javascript as the development language.
So there's also that.
Additionally, if you get a copy of Tiger, you will get Automator, which is a kind of graphical scripting application that can do all kinds of things. From what I can tell, it is going to be great in all the ways that the appropriately-acronymed AppleScript Studio wasn't.
So there's that, too.
Plus, every version of OSX has supported the full range of Unix shells and scripting languages, so you can write command-line, X11, and sometimes Aqua-based graphical applications using languages such as Perl, Python, Ruby, the Bourne shell, etc.
So to top it all off, there's that.
And to drive the point home, you get all of this for free with every Mac. I've heard nice things about Visual Studio, and maybe there's a lot it can do that the Mac side doesn't have, but I strongly suspect that the full range of programming, scripting, and automation tools available on the Mac will run rings around it without costing you a dime more than the cost of the computer [and OS, if you're upgrading, which you won't be in this case].
After you install Xcode... (Score:4, Informative)
CocoaBuilder [cocoabuilder.com] for the Mac OS X and Cocoa developer list archives.
CocoaDev [cocoadev.com] is a Cocoa developer Wiki.
I find that 99% of the questions I have can be answered by these two resources (especially newbie type questions -- which you're bound to have in a new development environment.)
-ch
Porting from Win32 to Mac OS X Doc (Score:2, Informative)
This doc is invaluable for Win32 programmers moving to Mac OS X.
Learn the OS first (Score:3, Interesting)
Coming from Windows, you will immediately be immersed in a new environment that is sometimes very different from what you are used to. Coding on Windows (as I do, I'm a C# developer at my day job) is a whole lot different than coding for the Mac.
I whole heartedly suggest that you buy a new Mac and dive right in -- but first you must learn how it works. The first thing you'll say to yourself is "everything is on the wrong side!". The icons are on the right, the window buttons on the left. If you think the differences end there, are you in for a surprise!
So first, use the Mac, become very familiar with it, and know it. Read books, visit forums, learn how it works "underneath".
And then start trying to find something to create.
So here are the steps:
1) Learn it
2) Know it
3) Code it
Good luck!
-Steven
Top Ten Reasons to Become a Mac Programmer... (Score:5, Funny)
Like everything else... (Score:5, Informative)
If you want help programming, plenty of people have given links. If you want help with the interface end of things, try using some of the best Apple applications and see how things "work"--iTunes, The Omni Group [omnigroup.com], Bare Bones Software, Lemkesoft's Graphic Converter [lemkesoft.de], Rancho's NetNewsWire [ranchero.com]. There are many others, but trying these on should give you a feel for what makes a great Mac App. Also, it is a commonly-perceived problem that there is no great mac Word-processing software. There are acceptable entries, including MS Office, and several others, but this is one area where OS X is gravely deficient (if you want to write the best Mac WP ever, feel free! I'd even buy a copy).
Lots of people (i.e., Windows & Linux Fanpersons) will deride many interface trends as "fluff"; do not make this mistake. Apple is pretty careful about what stuff they include, and while there might be a few things in there for no real reason (animated screensavers as you desktop background?), most of the "fluff" has a damn good reason to be there.
Does anyone use MetroWerks CodeWarrior Any More (Score:2)
I know that XCode is free and quality, but from what I remember of using CodeWarrior it seemed much more advanced from an IDE standpoint. Of course, that was years ago as a novice programmer.
Still, if you're expecting something to replace VS.NET (which is what, a $500 product) CodeWarrior is definitely comparable.
Anyone with a little more knowledge on this want to chip in?
For small stuff... (Score:2)
Qt (Score:3, Interesting)
If you're writing a bunch of small custom apps, and they don't need to be proprietary closed source, then Qt is free. Otherwise you do have to pay (gasp) for Qt. It's hard to tell from your description what you need, but I'm guessing you can get away with the free GPL version.
I haven't played with the Apple frameworks, but compared to Microsoft's that you're used to, Qt will be a breath of fresh air!
$1295 (Score:4, Informative)
If you want to get a taste of the cutting edge of Mac development, however, go to developer.apple.com [apple.com] and buy yourself a ticket to Apple's Worldwide Developer Conference, a.k.a. WWDC. Depending on where you live, you may also need a plane ticket and a plane ticket and a hotel room or a pal in San Francisco that you can crash with. Anyway, at WWDC you'll meet a few thousand Mac developers and attend sessions given mostly by Apple engineers on
Attending WWDC is definitely not something you _need_ to do, particularly if you're just starting out. But it's a lot of fun, and you might just see stuff there that will make you decide to sell your PC.
If you decide to do it, do it soon. You can get a WWDC ticket now for $1295, but prices go up to $1595 on April 22.
My experiences moving from win32 to cocoa. (Score:4, Interesting)
All I have to say is that Apple documentation is very bad and mostly unhelpful. Learning Cocoa/Objective-C from oreilly is near useless. In fact I did 2 examples from it following its directions and havent used it since. Learning Objective-c and Cocoa to the point where an advanced reference is what you need is borderline trivial. I suggest not bothering with introductory texts and simply grab some examples work through them, muck around with adding a few controls to them and you will be all set.
Really, if you know C you will have no problem moving to Objective-C, and Cocoa is in my opinion very very intuitive making MFC look like a bastard child.
Here's my offering... (Score:4, Informative)
So: 1. XCode comes with the OS. It comprehensive, it's good. I'm still learning it, but the basics are easy to grasp and you can fill in the finer detail as you go along.
2. Objective-C is a VERY SMALL addition to C. You can learn it in half an hour especially if you know C++. The syntax might look odd at first glance but it works, it's consistent, and it's only syntax!
3. The framework (Cocoa) is huge, and takes longer to learn. However, again you can get going very quickly because XCode will build a fully functioning app for you with no coding at all, then you can use that as a base on which to experiment. Personally I'd suggest you do spend a bit of time experimenting without trying to build a huge new app first go, because there are different ways of doing things, some not as good as others. But gradually the picture becomes clear.
4. Get a book. I recommend Aaron Hillegass's tome - well written, easy to understand, the examples work, and it touches on a lot of useful areas of the framework though in some cases could do with a bit more depth. The O'Reilly book is not as good in my opinion, I found it only started to make good sense after I'd read Hillegass and actually tried out some coding.
5. Be prepared to be amazed at what Cocoa can do and how it works. After years of C++ grinding, Cocoa is a breath of fresh air to me. Objective C is so much to the point, but avoids all that syntactical cruft that C++ has. It makes me realise that half the code I've ever written was there just to keep the language happy, rather than contributing to my actual productivity. Objective C's method lookup is incredibly flexible and makes things possible that you wouldn't even think of in C++. In that respect a C++ background can be a liability - many things turn out to be much simpler to do te Objective-C way than what you might think of at first. For me this was one of the steepest aspects to the learning curve, but also one of the biggest revelations. For example, look at how Undo is handled - it's gobsmackingly easy. After a while you'll start to wonder why other platforms don't have anything like this. Cocoa is what Java could and should have been.
6. Enjoy yourself - it's fun to program in Cocoa. Once you get on top of it you may find, as I have, that your programming ambition suddenly increases enormously. With Cocoa I feel I COULD write a Photoshop killer, if I wanted to....
Re:is this.. (Score:2)
Re:is this.. (Score:5, Insightful)
I think the thread is worth exploring. There is a learning curve to moving from Windows to OS X in general, and more to learn when switching as a developer. The move from Linux to OS X is far less of a curve, but still exists.
Let's give the thread a chance!
Defend your position!? (Score:4, Interesting)
But, if you are a C or Perl hacker who likes doing things from the command line, that's quite alright as well. If you're programming on the Mac, you're most likely making a GUI for something UNIXie already, so you're probably going to want to use XCode, if not for its instant support to Carbon documentation, than for source code highlighting and autocomplete (which isn't as good as Visual Studio's autocomplete, but it gets the job done).
Re:Defend your position!? (Score:3, Interesting)
I have a small project I'm working on. It currently has 16 files. If I change a single file and click "build," its finished about as soon as I release the mouse button. If I "clean" first, which forces it to recompile everything, the build is finished in six seconds.
Re:Defend your position!? (Score:2)
Re:Defend your position!? (Score:2)
Okay nine and a main loop
Re:Defend your position!? (Score:5, Interesting)
If you build a Cocoa/Carbon application with only a couple source files, it may take a while to build the whole thing, but that's more than likely just the precompilation step (which is likely precompiling a large percentage of the header files installed on your system, and only happens on first build or after a 'clean' or 'clean all').
That said, I rarely have any problem with such applications. In fact, I quite often build one-source-file testing applications with Xcode just to try things out - for example, to see what error codes are returned by FSMountServerVolumeSync() under different situations (already mounted by same user, already mounted by other user, invalid volume, invalid server, invalid user/pass, etc.). I rarely have a problem with it.
Perhaps the tradeoff between long precompilation time and size of other source code seems wrong to you - but in that case you can always turn it off in the target settings. Internally it just calls through to gcc, and there doesn't seem to be any significant overhead that I can see...
-Q
Re:XCode (Score:2)
You're kidding, right? (Score:5, Funny)
As compared to Visual Studio?!? Woah.
Re:Amateur Here (Score:3, Informative)
Re:As a Windows programmer.. (Score:5, Insightful)
It sounds like you had unreasonable expectations for XCode, and they weren't met. And now you think it's the tool's fault for being nothing more than what it is.
Re:As a Windows programmer.. (Score:3, Interesting)
Now, I haven't tried Xcode 2.0 in Tiger, but I have certainly made some sincere efforts to use Xcode 1.5 for my C++ and Java projects, and each time I've given up and gone back to a plain old programmer's editor
Re:As a Windows programmer.. (Score:2)
So for example I edit a photo maybe 2x per year. So iPhoto is great. iTunes showed me what a jukebox is for and why I would want to use one. Xcode is
Re:As an Xcode programmer... (Score:2)
Build Styles
Target Info
and it's not clear which to choose when editing a particular preference (until you know the program), unlike most other IDEs which just use targets. Choosing a different build styl
Re:*Modern* Mac development? (Score:4, Interesting)
You know Model-View-Controller? Interface Builder is a tool to build the view, and tie it to the classes of your application. Before Cocoa Bindings and Core Data, you would create a custom controller class or two, and connect them up. This button fires this action, which calls this method of MyAppController. MyAppController updates the model, then does some updates to the view. Grueling, thankless glue code.
Cocoa Bindings are a set of generic controllers, coupled with some tools in the IDE, that let you bind the view to the model in various complex ways while writing no boilerplate glue code. Say you have an array of objects in your data model. Cocoa Bindings lets you use an NSArrayController and a couple of straightforward bindings to say, "Fill this combobox with the 'name' field of each object in this array, and when a selection is made, populate these other fields with their other properties."
Core Data, though you didn't ask, is a set of generic tools that take care of the model, and gives you things like data persistence, undo, etc. for free. With Core Data and Cocoa Bindings together, you can go so far as to build UI scaffolding -- you literally drag one of the entities from your data model into a blank window in interface builder, and it builds a prototype interface for you. Not one you'd want to actually use, of course, but it gets you going and makes for a nice demo (see: Ruby on Rails hoopla).
As you might imagine, these tools take care of a lot of the grunt work of building graphical applications.