I'd like to start experimenting with Cocoa and programming for Mac OSX. I'm not terribly concerned with Objective C syntax/constructs/bheaviors at this point, but more curious as to an efficient setup on in terms of an editor and/or IDE that will get me going quickly. Is there any IDE even remotely similar to Visual Studio (since that's where I've spent most of my time over the last 7 years) in terms of it's solution/project concept? Any other tools, tips, suggestions and/or resources to get up and experimenting quickly?
I'd like to avoid a lot of the intro stuff and get into things like "If you want to create an Mac desktop application, you can use Acme IDE and set up your project like this."
I was afraid Xcode was going to be the answer! :P I tried playing around with that -- literally just getting it off the DVD and just diving in with no idea what to expect (before I even knew that you used Objective C as the language). I figured, the wise guy that I am, that I could just sort of fumble around and get a simple app working ... wrong.
#Andrew - Thanks for the insight on those config settings. Based on my Xcode first impression, I think those may help.
I'd suggest you pick a fun little product and dive in. If you're looking for a book I'd suggest Cocoa Programming for Max OSX which is a very good introduction both to Objective-C and Cocoa.
XCode is pretty much the de facto IDE and free with OSX. It should be on your original install DVD. It's good but not as good as Visual Studio (sorry, it's really not).
As a long-time VS user I found the default XCode config a little odd and hard to adjust to, particularly the way a new floating window would open for every sourcefile. Some tweaks I found particularly helpful;
Settings/General -> All-In-One (unifies editor/debugger window)
Settings/General -> Open counterparts in same editor (single-window edit)
Settings/Debugging - "In Editor Debugger Controls"
Settings/Debugging - "Auto Clear Debug Console"
Settings/Key-binding - lots of binding to match VS (Ctrl+F5/Shift+F5,Shift+Home, Shift+End etc)
I find the debugger has some annoying issues such as breakpoints not correctly mapping to lines and exceptions aren't immediately trapped by the debugger. Nothing deal-breaking but a bit cumbersome.
I would recommend that you make use of the new property syntax that was introduced for Objective-C 2.0. They make for a heck of a lot less typing in many many places. They're limited to OSX 10.5 only though (yeah, language features are tied to OS versions which is a bit odd).
Also don't be fooled into downplaying the differences between C/C++ and Objective-C. They're very much related but ARE different languages. Try and start Objective-C without thinking about how you'd do X,Y,Z in C/C++. It'll make it a lot easier.
The first document to read and digest is the Mem management guide, understand this before moving on. This is a great guide to objective-c too. Infact the developer site at Apple is very good - but you would probably want to read the Hillegas book first.
In regards to Xcode vs Visual Studio - they are different. I wouldn't say one is better than the other - Windows developers come over from VS and expect it to be the same. This is just an arrogant attitude and please don't fall into this crowd. Having used VS since the AppStudio days and Xcode for a year or so now, both have strengths and weaknesses. Xcode is something that out of the box (and especially when coming from VS) doesn't seem that good, but once you start using and understanding it - it becomes very powerful.
Also, there are a lot more tools included with Xcode et al, such as Instruments and Shark that you simply can't get with VS, unless you open your wallet, and even then IMHO aren't as good.
Anyway, good luck. I still enjoy C#, but Objective-C/Cocoa somehow makes programming fun again once you get into it...
Don't bother digging up your OSX DVD as they've released a new version (3.1) of XCode since then.
First, you'll want to join Apple Developer Connection (it's free, and you need it to access their version of MSDN) - it uses your Apple ID so if you've ever had one for the itunes store etc, it's that same username/password
Once you've done that, click on downloads, then click on developer tools, to view this page, and go for the XCode 3.1 Developer DVD
One other suggestion: If you have feature or enhancement requests, or bugs that you've run into, be sure to file them at Apple's Bug Reporter. It's the best way for developers to communicate their needs to Apple, because every issue is tracked through the system.
You might try the demo of textmate and see how you like it for working with objective-c or any other type of text really. It will import xcode project settings so you can still compile and run from textmate rather than having to go back to xcode.
Xcode is the standard for editing source files, though you can use another editor in conjunction with the command line xcodebuild tool if you really want. I used Vim for all my Cocoa editing before finally giving in to Xcode. It's not the greatest IDE in the world, but it gets the job done, and the recent 3.x releases have had some nice improvements.
The real power tool of Cocoa development is Interface Builder. IB does not generate source code like many UI tools. Instead it manipulates real Cocoa views, controls, and objects which it then bundles into an archive (nib) that is loaded by your program at runtime. Most Cocoa programs use at least one nib file, and often many more.
No matter what IDE/editor combination you choose for hacking on source files, I recommend using IB where you can. Even if you're not a fan of other UI layout/generation tools, I suggest keeping an open mind, giving "the Cocoa way" a chance and at least learning what Interface Builder can do for your development process.
AFAIK, pretty much every OS X developer uses Xcode.
That, and Interface Builder for creating the GUIs.
FWIW, try to get hold of a copy of Hillegas's book, as it's a great introductory tutorial, and the reference Docs Apple provides really aren't. (They are generally very good reference docs, however).
Cocoa is huge. The hardest part of learning how to write apps on Mac is learning Cocoa. By the way. You do not need to know ObjC (though it helps tons). You can write Cocoa apps with Python or Ruby (right in the IDE).
I agree VS is a better IDE then Xcode. But if you throw in Interface Builder and all the other tools, I'm not so sure. Mac development is not about 1 giant IDE for everything. But VS is "kinder" on the developer then Xcode is.
Also if you want to do cross platform apps look at RealBasic. A fine tool (Basic though. But it runs on Linux too.) You'd be surprised how many Mac apps are written with RB.
I've heard the books currently out there are pretty out of date. The whole ecosystem seems to evolve very fast with dramatic changes made in every OS release.
He wrote a tutorial which pulls together some Apple documentation and other tutorials which should get you started. I think it covers the basics of using the IDE, writing simple apps, and then goes on to more advanced stuff.
I've been dabbling in Cocoa for the past couple years, and recently picked up Fritz Anderson's "Xcode 3 Unleashed." Highly recommended for getting into Xcode — especially with some of the big changes 3.0/Leopard brought.
Don't forget Hillegass' defacto Cocoa bible, "Cocoa Programming for Mac OS X - Third Edition."
#peter I don't know why you had trouble with getting a simple app working, right off the bat without doing anything your app gets a lot of benefits from the Cocoa framework. If you mean you were trying to do stuff like connect a button to an action and have it print a alert on screen or something like that then yes I could see where your going with it being difficult.
The problem for me starting with Cocoa many years back is that it was so different from anything else that it had a little bit of a learning curve. Whereas many other systems are compile time oriented Cocoa is very dynamic and runtime oriented. Once you get past learning how actions hook up to classes it just becomes a matter of learning how the Cocoa frameworks work.
Related
The most recent book about Cocoa that I was able to find is Aaron Hillegass, Adam Preble - Cocoa Programming for Mac OS X - 2012, however, it's outdated (based on Xcode 4.2; doesn't contain explanation of Auto Layout) and also it doesn't explain how to create UI completely in code. (Yes, Interface Builder is cool, but sometimes one needs to take control in his hands, to generate something at runtime, etc. — so this is an important topic, too)
Is there something which is more up-to-date, now, in 2014? (be it a book or an online resource — anything goes)
I think this is a good question but it will likely be killed because it is not a specific programming questions.
Here are some pointers to get you started though:
The book you mention is now actually still pretty relevant. I would most certainly go through it. Cocoa on the Mac has not evolved as quickly as Cocoa Touch has, so a lot of material from the past years is still very relevant.
Documentation at the Mac Dev Center - Specifically, filter on the Guides and check out the most recent ones. You most definitely want to read about AutoLayout, Bindings, Modern Objective-C, and the Mac Techology Overview.
WWDC Session Videos - Apple has put these online freely, going back to 2010. There are some great sessions there. Check out all the "What's new in Cocoa" ones. And sessions with a title like "Introduction to ..."
Ask lots of questions here :-)
I would like to see more pointers to more resources too. Specifically about 'modern app architecture'. I think that is a lot more clear on iOS than it is on OS X at this point.
I have been scrambling to find a good way to edit/run AS3 on Mac for free. AXDT for eclipse won't install, and for a while I was using Sublime text + Terminal but it sucked cause of no code completion. Any ideas? Obviously FD is out of the question, being Windows only.
Currently, there are no entirely free ActionScript IDEs for the Mac. There are, however, some solutions you could use, depending on what you're working on and what other language support features you need, other than simple code completion:
If you're working on open source stuff, you should take a look at IntelliJ IDEA, which is free for OSS projects.
Also, FDT has a free version, but it does not include advanced refactoring, as well as a number of other functions.
If you don't need project management, refactoring and such, you could keep using a text editor and compile via the command line. There is an ActionScript 3 syntax file for vim, and an ActionScript mode for Emacs.
If you're going to work with ActionScript (semi-)professionally, I would strongly recommend you reconsider paying for a good solution, though. There is so much more to a good IDE than just text highlighting and code completion!
IDEA, for example, actually helps you write better code in many ways: By enabling you to run unit tests (as suites, as single test class, and even as a single test method) directly from the editor window; by including highly advanced refactoring features, such as "change signature", "extract interface" or "inline method"; by analyzing what you write, and offering alternatives, etc.etc.
And then, of course, there's all the things that have nothing to do with the language itself, but make your life as a developer much easier: version control and issue tracking integration, build tools, dependency management, just to name a few.
If you're going to make any money with your code - and I mean, ANY money - a good IDE will earn its price quickly, probably even within a day's work.
I started my career on Linux/Unix, and moved over to Windows and Visual Studio. XCode feels pretty alien to me. My feeling is that I'm not in control with XCode. It could be the case that I simply haven't understood how to use the IDE, I am new at developing for Apple OSs. One thing that kind of irks me, is that nobody seem to have found a clean way to compile for multiple platforms (iOS and Mac OS X), using the same sources. I've found two ways to "hack it", but the hacks sound fragile.
I've been pondering the idea of using simple make files instead of XCode (except for the occasional use of Interface Builder).
Is this a sane route to go? Has anyone done this? Are there any major drawbacks I need to be aware of before I take the leap, or should I just bite the bullet and wait for the enlightenment?
Use Xcode, use as many high-level tools as possible. The "loss of control" is replaced by more focus on the application, which IMHO is a great tradeoff.
It is kind of like the loss of control when I went from assembly code to "C", but it was worth it. We keep moving to higher level of abstraction and that allows us to accomplish more, focus on the big picture instead of the minor details.
You've just got to learn new ways of doing things. For example, in the situation you describe (building an OS X and iOS app with shared code), I'd put any shared code into a library/framework that is used by both projects, and create a workspace that contains all three projects.
The loss of control you speak of is offset by the fact that this can all be set up without knowing anything about compiler command-line options in around 10 minutes.
It's a different way of thinking, and it can be frustrating if you know how you would do it on a different platform, but there are advantages to both options. You may never have to think about the build process again!
I'm now with a idea to start the development of a bare bones Qt/GTK+-like framework, but I want to know some things before I start the creation of this project:
What is the structure of GTK+ and Qt?
Do I need to develop a window manager to build my own framework?
Some resources to start?
Developing a GUI/Application framework is a significant undertaking. You might want to be very clear about why you need to write yet an other framework.
Both projects you mention are open source. Why not start there?
GTK: git clone git://git.gnome.org/gtk+
Qt: git clone git://gitorious.org/qt/qt.git
Ed You ask what the structure of GTK and Qt are, whether you need to write your own widow manager (answer: no) and how to get started. Answers to at least the first two are in the source code. Don't forget, great practitioners in any field learn by watching others. Reading code is no different.
Writing a GUI/app framework would be a great learning experience, but even a fairly small app framework would be a very big job, and not something you really should tackle until you're fairly expert in writing applications using several other frameworks and widget toolkits.
I did something like this once, back in the early years of this decade. That was after I'd been programming for the Mac for over 15 years, Windows over 10, and had programmed both directly to their native graphics, event, and widget APIs, as well as various object-oriented toolkits for them including PowerPlant, MFC, and MacApp. When I started working on a PalmOS application, I spent a couple of weeks writing a very small app framework modeled on PowerPlant. But I could not have succeeded at all without those decades of broad and deep experience with so many GUI systems.
Doing this for Linux/X11 is even more work. That's because, unlike Mac OS and Windows, neither X11 nor Linux supply built-in user interface widgets, or much in the way of graphics primitives or text layout capabilities. GTK+ is part of the GNOME ecosystem; it provides the widgets, gets its message queue and internal communications from GObject, relies on GDK to abstract and simplify its graphics and event communications with X11, and uses Pango and Cairo for text rendering and layout. I work all through that system, and it probably represents many dozens of person-years of hard work by a lot of really smart people. And I'm sure Qt is very similar.
So if you really want to do this, I would recommend you:
Write programs with a lot of different app and widget toolkits, on multiple operating systems. That will help you learn not just how such systems work, but why they are designed as they are. And it will give you some feeling for what works well, and what works poorly.
Contribute bug fixes or new features to one or more of the various open-source frameworks. GTK+ has a list of tasks for beginners to work on. Another great open-source framework is wxWidgets.
Become an expert-level C/C++ programmer.
When you've done that for a few years, you will have the expertise suitable for tackling your own framework.
That sounds like a major undertaking, at least as a starting project.
Not sure what you mean by "the structure" of e.g. GTK+. You can see the object hierarchy for GTK+, that tells you at least how the implemented objects (GTK+ is an object-oriented API) relate to each other. You can guess how the code can be structured, from that information.
And no, you don't need to write your own window manager; the toolkits mainly concern themselves with what happens inside windows, not with the window management itself. Of course you could decide that your "platform" should have a wider scope, and include a WM.
I think some of the answers here might exaggerate a bit. Obviously making something of the same quality, width and depth as Qt and Gtk is a huge untertaking. But you can make simpler stuff and still learn a lot about how it works. I suggest doing like I did in university. Use OpenGL with Glut. Then you got basic drawing functionality and event system in place already. You then need to create classes for buttons, text fields etc.
If you want to make it really simple then each component just needs to know where it is drawn and have some sort of bounding box where you check whether mouse click are inside or not. You also needs to create some system which makes it possible for buttons, check boxes etc to tell the rest of your code that they were clicked.
This isn't really the rocket science people here make it out to be. Games have made their own very simple GUI toolkits for years. You can try that approach as well. I have modeled a simple GUI tookit on top of a game engine before. Your buttons and textfield could be simply be sprites.
But yeah, if you want to make something that will compete with Gtk+ and Qt, forget about it. That is a team effort over many years.
I'd like to learn how to write application for Mac OS X.
Like how to use XCode properly, Cocoa syntaxes and examples, etc.
I'm already a web developer using ruby, php, mysql, rails, etc.
I looked through google quite some times but never found something palpable to learn from.
But I really want to make my own application, for fun and maybe business later.
Thanks a whole bunch for your tips!
Aaron Hillegass's book "Cocoa Programming for Mac OS X" is certainly up there. It would also be well worth your time to learn the C language well.
To jump right in as quickly as possible, I'd recommend going through the following Cocoa Dev Central tutorials:
http://cocoadevcentral.com/articles/000081.php (C)
http://cocoadevcentral.com/d/learn_objectivec/ (Obj-C)
http://cocoadevcentral.com/d/learn_cocoa/ (Cocoa part 1)
http://cocoadevcentral.com/d/learn_cocoa_two/ (Cocoa part 2)
http://cocoadevcentral.com/articles/000082.php (Style part 1)
http://cocoadevcentral.com/articles/000083.php (Style part 2)
Once you've read those, you should be able to do quite a bit on your own, just using the documentation in Xcode (option-double-click on a class name in Xcode) and Apple's developer site.
You should start by learning Objective-C. Programming in Objective-C is an excellencent introduction to the language
If you're looking for a free resource this is an excellent web-site
Only after you have a solid understanding of the language would I worry about the different frameworks available.
The first thing I would start with is Automator. In fact, it's what I did start with. Solve a couple of easy problems with it, like renaming iTunes songs or photo manipulation. In the process, you'll probably think of an action you want that's not included. You can write it yourself using AppleScript.
Now you've got the basics of two desktop programming systems for MacOS in about a day. It might seem silly to learn these two super-basic systems, but in the process you'll learn the flow of desktop development and get a couple of "quick wins" in before you move on to XCode. You'll begin to think of your Mac as more than just a web client.
If I were you, I'd check out RubyCocoa next. It's a language you're already familiar with, so you'll be able to score another couple of wins here, too.
When you're ready to take on Objective-C, Cocoa Is My Girlfriend is a great introductory resource.
I would start with the currency converter sample Apple provides.
This gives a nice introduction to Xcode and Interface Builder.
You could then try to implement the same basic application but with bindings.
As you seem to have experience in some interpreted languages, you may have troubles with the memory management in Objective-C at the beginning.
You can turn on Garbage Collection to make your life easier.
If you want to use your knowledge to create iPhone apps, you should learn the memory management concepts as there is no garbage collector available on the phone.
The podcasts on the Mac Developer Network also contain some good information.
I was in the same situation some time ago, struggling to learn mac dev, read a lot of books, and it was hard for me to retain all that information, but I stumbled across CocoaCast where you can find lots of video tutorials on Mac Development! And it's totally free to watch them, even to download them.
Stanford recently put out a course on iTunes U that teaches you how to program on the iPhone. Because the iPhone uses the same programming language as OSX, a lot of what they talk about can be transferred to Mac app development. Best of all, the course is free to download and watch, and has a bunch of sample material that goes along with it. Click the link below to open it in iTunes.
iPhone Application Programming
Check out Apple's Developer Documentation, which seems to be getting more and more attention over time, and has become quite good for beginners to start with.