Slashdot Mirror


Modern Mac Development?

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?"

42 of 210 comments (clear)

  1. Xcode by geoffspear · · Score: 4, Informative
    The development tools come with the OS for free.

    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.

    --
    Don't blame me; I'm never given mod points.
    1. Re:Xcode by Anonymous Coward · · Score: 1, Informative

      Just to clarify, Cocoa isn't a language. It's the OS X API. I think you meant Objective C, as mentioned in the grand parent.

    2. Re:Xcode by geoffspear · · Score: 2, Informative
      True, but if you're looking for something comparable to .NET to develop Mac applications, you're probably going to want to use Cocoa or Carbon.

      You can develop Palm applications in Xcode, too, but I don't think that's what the OP is looking for...

      --
      Don't blame me; I'm never given mod points.
    3. Re:Xcode by Golias · · Score: 2, Informative

      It should me noted that the just-released OS X 10.4 ("Tiger") comes with Xcode 2.

      Among other things, it's capable of importing Code Warrior projects.

      --

      Information wants to be anthropomorphized.

    4. Re:Xcode by Bastian · · Score: 4, Informative

      If you're looking at writing native software, I would strongly recommend taking the long road and getting used to Objective-C, for a multitude of reasons.

      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.

    5. Re:Xcode by cpct0 · · Score: 4, Informative

      Backgrounder on me: I'm currently writing things for Mac and PC, in 2003 and XCode, professionally.

      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

    6. Re:Xcode by alanQuatermain · · Score: 3, Informative
      Unless you just really don't want to trade automatic garbage collection for reference counting

      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 than the setjmp-based macros NS_DURING/NS_HANDLER/NS_ENDHANDLER previously supplied).

      Since these features require a specific release of the Objective-C runtime, however, they will only work on their respective system builds, and therefore need to be enabled within the compiler settings in Xcode. So, garbage collection requires at least 10.4, and runtime exceptions/synchronization require at least 10.3.

      -Q

      PS. Just found out where I saw the option: in the 'Code Generation' section of the build rules pane on an Xcode target. Can't find any reference to it on the Internet. Although probably a better Googler than I might be able to find something associated with the GCC folks - the best I can find can be turned up by Googling or 'objc-gc'.

    7. Re:Xcode by drc1 · · Score: 2, Informative

      Have a look at http://developer.apple.com/internet/scripting/phpa ppledevtools.html I suspect it is now possible to use Xcode for just about every language. I must admit I quite like having the same environment for all my projects from Applescript to ObjC

  2. Don't know about a lerning curve, but.... by dqbiggerfam · · Score: 1, Informative

    I don't know about the learning curve, as I don't program at all, but with the regular installer for OS X, you get developer tools as well (a Mac Mini would probably fit in well with your setup, especially if you use a KVM switch).

    You can also check out Apple's developer website (http://developer.apple.com/) for more details.

  3. Apple Development by Laplace · · Score: 5, Informative

    Apple ships OS X with a developer tools CD. That's where you will want to start. It will give you most of your basic gnu development tools, along with Xcode (a decent IDE which is getting better with every revision) and some mac-specific profiling tools.

    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!

    --
    The middle mind speaks!
  4. XCode is free... by teridon · · Score: 2, Informative
    I have no clue whether XCode is "comparable" to MS VS .NET, but it, and the other Apple developer tools are free. It comes with any Mac, or you can download it for free (with a free ADC Student membership).

    If you have any costs (other than the hardware), they might be:

    ADC membership (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

    --
    I hold it, that a little rebellion, now and then, is a good thing. -- Thomas Jefferson
    1. Re:XCode is free... by BoomerSooner · · Score: 4, Informative

      ADC is free
      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 Then ADC Hardware Purchase Program.

      Big savings plus it's like subscribing to the MSDN you get cool shit all year.

    2. Re:XCode is free... by Senjutsu · · Score: 2, Informative

      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.

      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.

    3. Re:XCode is free... by Senjutsu · · Score: 2, Informative

      The discounts get larger as the hardware gets more expensive (for fairly obvious reasons). I'm going to assume you're a fellow canuck based on that email address, so if you browse the Candian ADC Select Store, you can compare them with the regular prices at the regular Canadian Apple store. Remember to factor in the $99US student membership fee on top of the prices there.

      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 the ADC store once you factor that cost in.

  5. Book by avjewe · · Score: 3, Informative

    Cocoa Programming for Mac OS X by Aaron Hillegass is an excellent place to start learning how to use all the cool Mac-specific stuff.

  6. Other than the obvious by amichalo · · Score: 5, Informative

    Everyone has (and will continue) to discuss Xcode.

    I can give some insight into the question of learning curve.

    I develop .NET web apps at work on XP but have a Mac at home. there are a good many differences:

    - 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 .Net and it is way different developing .Net apps with the IDE in Visual Studio. I have developed php apps on the Mac and used TextEdit and BBedit (a great OS X only editor). IMHO, seasoned coders who really know their stuff will do well transitioning from VS.net, beginers will have a few less crutches to use.

    - 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 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".

    --
    I only came here to do two things; kick some ass, and drink some beer...looks like we're almost out of beer.
  7. Re:Tiger? by nickscalise · · Score: 3, Informative

    Probably, but if not you can get the Tiger DVD sent to you for $9.95.

    http://www.apple.com/macosx/uptodate/

  8. Re:Tiger? by amichalo · · Score: 2, Informative

    According to Apple, if you buy a system today, you will get Tiger.

    --
    I only came here to do two things; kick some ass, and drink some beer...looks like we're almost out of beer.
  9. Re:Apple owner and developer by mopslik · · Score: 2, 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. 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.

  10. Xcode + a good book or two by anactofgod · · Score: 5, Informative

    Is all you need to write the sort of apps that you were talking about.

    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 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*

    --

    ---anactofgod---

    "Equal opportunity swindling - *that* is the true test of a sustainable democracy."
  11. Avail yourself of the online resources. by mellon · · Score: 4, Informative

    My three main bookmarks for Cocoa help right now are:

    http://rentzsch.com/
    http://www.idevapps.com/fo rum/
    http://www.zathras.de/angelweb/x2004-12-05b. htm

    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

    1. Re:Avail yourself of the online resources. by cratermoon · · Score: 2, Informative

      Pretty good links. I found the tips and tricks on the CocoaDev Wiki invaluable in my work on the Objective-C port of FIT.

  12. Re:python? by hatrisc · · Score: 1, Informative
    --
    I write code.
  13. As a Windows programmer.. by Anonymous Coward · · Score: 1, Informative

    ..I think that XCode is awful. It's horribly unintuitive and enjoys separating you from your code. When you just want to build a damn executable it has you messing with build targets and all sorts of garbage that I will never care about. Even Apple calls XCode "A New Way to Work" (headline half way down the page). Sorry, but I liked my old way of working - you know, where I was productive and didn't have to learn the quirks of your stupid IDE. If I was ONLY developing for the Mac I might take the time to learn it.. but I'm not, so I will never waste my time on it.

    Anyway, I found that I was most productive in OS X by treating it like Unix. I use Scons to build projects (no more Make for me), and I use Eclipse as an IDE (or occasionally Emacs as a straight editor when I'm doing something simple). Eclipse is originally a Java IDE (which is itself written in Java), but it has a C++ development extension available from their site and works nicely with standard tools like GCC and GDB.

    So I use Eclipse to edit code, configured to call a custom Scons script (that I wrote and maintain to build the project) whenever I hit compile. The C++ Eclipse extensions understand how to parse error messages passed back from GCC, so while IDE integration isn't perfect, it works well enough to be productive. AND I still get command-line compilation if I don't feel like using an IDE that day.

    Best of all: Eclipse and Scons are completely free and completely cross-platform (Scons runs whereever Python does). And I have an identical development environment on Windows (using the free MingW32 port of the GCC compiler), Mac and FreeBSD (although of course, my Scons script handles the multiplatform compilation issues internally, such as which system libraries to link with on different platforms).

    (Disclaimer #1: I'm actually writing OpenGL applications via the SDL multimedia library - your milage may vary if you need a full UI, but I'd try wxWidgets if that were the case).

  14. You forgot the c in the link by acomj · · Score: 3, Informative
  15. Cocoa is the way to go by tim1724 · · Score: 4, Informative

    If you're serious about Mac OS X development and want to write applications which blend in well with the Mac environment (necessary if you expect Mac users to actually want to use your applications) then you must learn how Mac applications are supposed to look and behave and figure out how to apply the Human Interface Guidelines to your application. (Note that the HIG is not always 100% accurate .. there are places where you should deviate from it slightly in order to match what Apple's apps do.) This is important, as if you do anything unMaclike then your application will be bashed as a bad Windows port (even if you wrote it from scratch) and no Mac users will touch it.

    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 .. it is much improved.) Carbon is straight C code, and the concepts involved are more similar to Windows or X11 than Cocoa's design. But it's big and complicated, and would take a long time to learn. Also, there's a lot more stuff that you have to do in Carbon to make your application behave properly.

    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 ... they no longer promote the use of Java in Cocoa.

    I strongly recommend that you spend some time with Hillegass's book 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 as it provides some nifty stuff to treat some Core Foundation and Foundation objects in an STL manner.

    As for tools ... well, the Xcode IDE and all the GNU tools (gcc, gdb, etc.) come with Mac OS X, so you shouldn't need to buy anything.

    --
    -- Tim Buchheim
  16. From a broader scope by nflu · · Score: 2, Informative

    If you're just looking to write little C++ apps to fill in the gaps (hey, that rhymed), then you should have no problem at all. gcc/++ runs from the terminal the same way it does in Linux. Everything is the same, libraries, commands, and all. I frequently work on C++ projects between a Fedora machine, FreeBSD machine, and OS X; and if you didn't tell me which platform I was on, I wouldn't be able to tell you. Xcode, on the other hand, is a whole other beast. I use it somewhat frequently, but if you're used to working with source files by hand and doing your own Makefiles, then don't even worry about Xcode.

  17. OSX has many free, high quality development tools by babbage · · Score: 4, Informative
    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

    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].

  18. After you install Xcode... by Chief+Typist · · Score: 3, Informative

    Visit these sites:

    CocoaBuilder for the Mac OS X and Cocoa developer list archives.

    CocoaDev 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

  19. Re:Amateur Here by TheRaven64 · · Score: 2, Informative

    If you are interested in cross platform development, take a look at GNUstep. GNUstep currently implements most of AppKit and Foundation from Cocoa as well as some extra frameworks (e.g. Address Book). The one down side is that they do not yet support OS X .nib files, so you will generally need to re-create these in GORM (the GNUstep equivalent of Interface Builder). If you develop on GNUstep, then it is usually trivial to port to OS X. If you develop on OS X, it is sometimes a little bit harder. If you find a bug in GNUstep while trying, then please file a bug report - it won't improve if the developers don't notice it needs to.

    --
    I am TheRaven on Soylent News
  20. Re:what you should expect by bar-agent · · Score: 2, Informative

    Unless you want conditional breakpoints

    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.htm l#conditionalbreakpoints.

    --
    i'd hit it so hard, if you pulled me out you'd be the king of britain [bash.org]
  21. Re:python? by Anonymous Coward · · Score: 2, Informative

    Python is very popular on Mac OS X. Of the scripting-style languages (Perl, Python, Ruby, etc.), it probably has the most thorough support for writing real applications.

    Things like PyObjC 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 mean Core Data, in Tiger, then the answer is "maybe". I don't see why not with something like PyObjC, but it would probably involve some Obj-C coding.

  22. Porting from Win32 to Mac OS X Doc by toph42 · · Score: 2, Informative
    Porting to Mac OS X from Windows Win32 API

    This doc is invaluable for Win32 programmers moving to Mac OS X.

  23. Don't forget GCC by not-enough-info · · Score: 2, Informative

    Mac OS X has X11 if you choose to install it with the BSD subsystem. Terminal, yep. If you want to go IDE-less you can use GCC on the command line. Fink! Download Fink Commander for hundreds of 1-click compile and install OSS. BBEdit is a nice editor.

    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 just fine also.

    --
    ---k--
    </stupid>
  24. Re:If you love .net by davidbro · · Score: 4, Informative

    >On OSX, the platform -- not counting the Unix foundation -- is young

    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 .NET is even younger still.

    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.

  25. Good Intro to Objective-C by EccentricAnomaly · · Score: 5, Informative

    Apple has a free mini-book that intros Objective-C and gives a good feel for its capabilities:

    ObjC.pdf

    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.

    --
    There are 10 types of people in this world, those who can count in binary and those who can't.
  26. Re:Correction by Bastian · · Score: 2, Informative

    To the third point - ObjC objects aren't toll-free bridged to the Carbon libraries, they are toll-free bridged to Core Foundation, a procedural C set of libraries that is secretly most of what Cocoa is. But the end result is still that, if you need to, you can treat your Objective-C objects as C structs with no extra work.

    (Stupid me. I tend to (wrongly) think "C == Carbon" when I think about the OS X libraries.)

  27. Like everything else... by menace3society · · Score: 4, Informative
    Switching to Mac development is like switching to the Mac in all other respects. If you're hoping for something that looks and behaves exactly like Windows, but has all the chick appeal of a Mac, you're not going to be happy. Apple does things very differently than Microsoft, and that is true of handling files, users, system programs, and so forth, and also of application development. Conventions are different for users, and they are different for developers as well. Apple gives *very* sage advice wrt interfaces; they've been at it, and been doing it better most of the time, than anyone else in the business.

    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, Bare Bones Software, Lemkesoft's Graphic Converter, Rancho's NetNewsWire. 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.

  28. Re:is this.. by Anonymous Coward · · Score: 1, Informative

    Actually, 2.0 comes with the Mac as of yesterday.

  29. $1295 by YouHaveSnail · · Score: 3, Informative

    As so many others have pointed out, Xcode won't cost you a cent beyond whatever you decide to spend on a Mac (which could be anywhere from $500 to $3000, depending on you). And there are lots of free resources for learning about Mac programming, and lots of books.

    If you want to get a taste of the cutting edge of Mac development, however, go to developer.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.

  30. Re: Obj-C learning curve by Anonymous Coward · · Score: 1, Informative

    No, that's not an optimization strategy.

    The function objc_msgSend(object, messageSelector) implements Objective-C's dynamic (runtime) binding. It looks up the method (a plain C function) that object associates with messageSelector, and then calls that method.

    An objective-C message expression is nothing more than syntactic sugar for calling that function, so calling the function isn't any kind of an optimization.

    However, if you're going to be sending the same message to the same object over and over again in a tight loop, and that loop is proving to be a bottleneck, you can get a pointer to the appropriate function outside the loop, eg

    IMP functionPointer = [object methodForSelector: messageSelector];

    and then call the function (through the pointer) inside the body of the loop, completely bypassing the overhead of Objective-C's dynamic binding.

    (I mention loops because that's the only scenario in which I've ever needed to bother with this technique, and even then, it's rarely been an issue. But the API is available to use anywhere you want in your code.)

    That's the optimization you had in mind.

    PS: I know you know. But others might not.

  31. Here's my offering... by GrahamCox · · Score: 3, Informative

    OK, I'm late to this thread, and no doubt you have a clear picture already. But I'm a long-standing Mac developer steeped in C++ who also recently bit the bullet and changed the way I program on the Mac (from Carbon/C++ to Cocoa/Objective-C). OK you may say, but that's not as big a leap as Windows to Mac... well, I think it is. There are very few overlapping APIs, unless you want to use Carbon within Cocoa, which so far I have found very little need for except a bit of bridging to QuickTime.

    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....