TweetFollow Us on Twitter

Getting Started with Cocoa...

Volume Number: 20 (2004)
Issue Number: 3
Column Tag: Programming

Getting Started

by Dave Mark

Getting Started with Cocoa...

As anyone who knows me well can tell you, I love programming the Mac. And I'll play with just about anything out there that lets me build a Mac app or somehow control the Mac interface. When I first installed Mac OS X on my laptop, I immediately downloaded the developer tools, dug into the doc and started building Cocoa applications. And immediately got stuck.

Like a lot of other folks out there, I was a bit overwhelmed with all I needed to learn to truly understand the mechanics of Cocoa. For example, I know that I can use Interface Builder to lay out the user interface for an application. But why do I need to control-click-drag from one interface element to another? What are outlets? Actions? Targets? What the heck is a File's Owner or a First Responder?

These questions are the tip of the iceberg, but common to everyone when they first take on Cocoa. There are a number of Cocoa books out there, some of them quite good, but they all make some pretty big leaps in logic - not a big problem for professional developers, but those leaps can leave beginners scratching their heads, trying to decide if Cocoa is really hard to master or if they are just not up to the task. Let me assure you - Cocoa really is a challenge, even for the experienced developer.

Over the next few months, we're going to dig into Cocoa and get the basics down. Build up a deep enough understanding of Cocoa mechanics so that all those Cocoa books on your shelf make a lot more sense.

Big Nerd Ranch

Before we start, I wanted to digress for just a moment, talk about a great experience I just had. A few weeks ago, Scott Knaster and I were fortunate enough to head down to historic Banning Mills, about an hour southwest of Atlanta for a week of intensive Cocoa training with the folks at Big Nerd Ranch.

    Banning Mills is located on about 700 acres along the picturesque Snake Creek in Carroll County, Georgia. Originally home to the Creek and Cherokee nations, in the mid-1800s it became home to one of the earliest textile mills in the south. Over time, a masonry mill was built, the mill town grew, wool and cotton yarn was produced and processed into cloth. Paper and lumber products, meal, and flour were also produced. The area become an important part of the southern economy.

Towards the end of the Civil War, General William Tecumseh Sherman was sent to find the mills and destroy them. Because of the unique geography of the area (the mills are in an extremely well-hidden gorge), he was unable to locate the mills and they survived.

Check out http://historicbanningmills.com

I arrived at the ranch on Sunday evening, with the class scheduled to start Monday morning. Checked into my cabin - rustic with a standalone gas fireplace that really heated up the room - not so rustic with jacuzzi tub, phone, and TV with cable as well. Call it "charming with modern amenities". Once I unpacked, I headed over to the main lodge. To my surprise and delight, there was a nice spread of food laid out, complete with a drinks cooler (with all my favorites) and an ice cream freezer with about every kind of ice cream you could imagine. And, best of all, everyone in the class drifted in and we all sat around the dining table eating and getting to know one another. ScottK kept us all entertained with war stories from his days at Apple, General Magic, and Microsoft. Somehow, each story ended up with Scott making friends with a newly minted billionaire. Sadly, none of them was me.

The classes themselves were held in an upstairs meeting room at the lodge. Rustic, yet comfortable. A door off of the classroom led onto a large deck with a majestic view of Snake Creek and the surrounding rocky terrain. At night (and every night was a very late night) we'd go out onto the deck, talk Cocoa, and take in a sky full of stars. No light pollution at Big Nerd Ranch.

Our teacher, Aaron Hillegass, was exceptional. The class was based on an upcoming second edition of his book, Cocoa Programming for Mac OS X. The book was presented in loose-leaf format. The downside of working from a work-in-progress is that the code on disk frequently differed from the code on the pages. Sometimes the book was right, sometimes the disk was right. I typed in all the code and fixed any anomalies as I went along. Aaron was terrific about answering questions and helping debug our apps. I liked the fact that I typed in the code, as I was sure that I understood what ultimately ended up working.


Figure 1. The graduating class, from left to right: Rick Steele, Bryan Lockwood, Chris Campbell, Scott Knaster, Aaron Hillegass, Dave Mark, Allan Hoeltje, Jorge Ramirez, Mark Dalrymple, and Derek Chan. Aaron was the head cheese, and Chris and Mark his able assistants.

As far as content goes, we covered Objective-C in detail, spent some time on Xcode, Interface Builder and the Debugger, then got into Cocoa itself. Rather than go over the hierarchy class-by-class, Aaron presented overarching concepts, then introduced the classes in place as they occurred in the code. For example, he started by introducing a basic user interface with buttons and a text field, then introduced classes like NSControl (and subclasses NSButton, NSSlider, NSTextField) and NSAppController. Rather than tour through each class, Aaron started in Interface Builder and wired the app together, giving an overview of each class as it was hooked in place. This gave us less of an exhaustive view of the class hierarchy and much more a sense of the Cocoa design philosophy. An excellent approach.

We explored Helper Objects, Bindings and NSController (and the very important Key-value Coding concept), NSUndoManager (holy cow - it really is easy to add undo to your app!), Archiving and the Document Architecture, Nib files and NSWindowController, User Defaults, Notiffications, Alert Panels, Localization, Custom Views, Events, Responders, Fonts, Pasteboards, Categories, Drag-and-Drop, NSTimer, Sheets, NSFormatters, Printing, Menus, NSTextView, building your own Interface Builder palettes, AppleScript, and OpenGL.

An amazing amount of material, crammed into way too little time. Yet somehow it all worked. I came away remembering much of what was taught, but more importantly, I had enough resource material to recreate anything I'd forgotten.

If you can afford it, I would strongly recommend Big Nerd Ranch. Come prepared, though, as the pace is intense. At the very least, before you head out, I would read the document ObjC.pdf in this directory:

/Developer/Documentation/Cocoa/Conceptual/ObjectiveC/

Do your homework first, and I know you will find the experience to be tremendously rewarding. Check out the Big Nerd Ranch website at http://www.bignerdranch.com. You can call them at (678) 595-6773.

The Number Generator

Perhaps the best way to get started with Cocoa is with a simple application that makes use of both Interface Builder and Xcode, just so you can get a feel for the development process. Don't worry about the concepts. Just click and drag and follow along. Over time, the steps you take in this program will become second nature.

This is the very first project in the upcoming second edition of Aaron Hillegass' Cocoa Programming for Mac OS X. The book should hit the streets in a few months.

The program, called RandomApp, puts up a window with a couple of buttons and a text field. One button initializes the system's random number generator and the second button asks the generator to generate a random number between 1 and 100. The number is displayed in the text field. The result is shown in Figure 2.


Figure 2. RandomApp in action.

In this month's installment, we'll create a project in Xcode, then use Interface Builder to build and test the interface. Next month, we'll add the wiring to tie the buttons to the appropriate code, then add the code itself. Sounds good? Let's get started...

Create a New Xcode Project

Launch Xcode and select New Project... from the File menu. When prompted, select Cocoa Application as the project type (see Figure 3). Cocoa Application is under the Application section. Be sure you do not select Cocoa Document-based Application. Click the Next button.

Be sure you have the latest and greatest version of the developer tools installed. I wrote this column using Xcode version 1.1. You can download the tools at http://developer.apple.com. You'll need to join Apple Developer Connection but it is free to join.


Figure 3. Build a new Cocoa Application project.

Next, you'll be prompted to enter a project name and project directory (see Figure 4). Name the project RandomApp and save it in an appropriate directory. Click the Finish button.


Figure 4. Name the project RandomApp and save it in an appropriate directory.

Your project window will appear and Xcode will immediately begin indexing the project files. This happens in the background and is the reason Xcode's searches are so incredibly quick.

The left pane of the project window lists the Groups & Files that make up the project. One of these groups is named NIB Files. Open the NIB Files triangle and you will find the nib file for this project, named MainMenu.nib (see Figure 5). Double-click on MainMenu.nib to open the nib file in Interface Builder.


Figure 5. The RandomApp project window, with MainMenu.nib selected.

Laying Out the User Interface

Interface Builder is an incredibly powerful tool. It not only allows you to design your application's user interface, it also let's you define the interactions between the objects that make up your application. Mastering the intricacies of connecting objects will take time. We will definitely spend a lot of time experimenting over the months ahead. For now, just follow along and get RandomApp up and running. You'll get a basic sense of the interaction between Interface Builder and Xcode, and you'll feel a bit more comfortable knowing all your tools are in place and working properly.

When Interface Builder appears, you should see a menu window labeled MainMenu.nib - MainMenu, a window labeled Window, a main window labeled MainMenu.nib, and a floating palette whose name changes depending on the icon selected from the row at the top of the palette. In the palette window, click on the icon with a button and a slider (2nd from the left, as shown in Figure 6) to bring up the controls palette.


Figure 6. Interface Builder's controls palette

Click on the button in the upper-left corner and drag it onto the window labeled Window. Take a look at Figure 7. Notice that as the button neared Window's upper-left corner, A pair of blue dashed lines appeared. These guide lines tell you the item you are dragging is an appropriate distance from the nearest other interface element (in this case, the top and the side of the window). This is quite a handy way of lining up your interface objects.


Figure 7. Dragging a button from the palette onto the window.

Next, click to select the button, then click on the right resize bits and drag the rectangle to the right, till the blue dashed line towards the right end of the window appear. Now you should have a button that is almost as wide as the window.

Double-click on the word Button and type Seed Generator, followed by a return. The button text should change appropriately.

Now drag out a second button underneath the first one. This time, there will be blue guidelines above and to the left of the button as you drag it out. These guides will keep the button the proper distance from the top button and the left side of the window.

Drag the right side of the button to make it as wide as the top button. Double-click on the word button and change its text to say Generate Random Number.

Figure 8 shows what we have so far...


Figure 8. Our window with two buttons.

Our next step is to drag out a static text field onto the window. In the palette window, click on the 3rd icon in the top row (the one that looks like a scrolling text field). The palette title should change to read Cocoa - Text and a series of text related objects should appear in the palette window.

Click and drag a static text item from the lower right corner of the palette onto the window we are building. Notice that you have a choice of several different size static text items. The one we want is the largest one and is labeled System Font Text. Just as you did with the buttons, drag the text to the left side of the window, underneath the 2nd button. Use the blue guide lines to make sure your spacing is right.

Click and drag on the right side of the text field to resize it to the same width as the buttons.

Next, select Show Info from the Tools menu to bring up a floating inspector window. When the Info window appears, click on the static text field you just created. The fields of the Info window will change to reflect the settings of the static text field. Change the Title field to the number 0 and click on the centering icon in the Alignment: field. Figure 9 shows my settings.


Figure 9. The info window, showing the changes we've made to the NSTextField.

Finally, click and drag the window to make it shorter. Keep it the same width, though. Figure 10 shows my final window.


Figure 10. The final window.

Test Drive the Interface

Now that your interface is finished, let's take it for a spin. Select Test Interface from the File menu. The RandomApp window should appear, with the title Window and the buttons and text as we've laid them out.

The buttons should be operable, though they won't actually do anything. When you are done playing, select Quit NewApplication from the Interface Builder menu. This will quit the test drive, not Interface Builder itself.

Till Next Month...

In next month's column, we'll use Interface Builder to create a new class specifically designed to seed the random number generator and generate a new random number. We'll create an instance of the class and wire the two buttons to the instance's methods that seed the generator and generate a new number. We'll then go into Xcode and add the code to make the application complete.

If you dare, take some time to play with Interface Builder and customize your interface. Change the window's title from Window to RandomApp. Change the menus. And if you double-dare, try your hand at finishing the program yourself.

Before you start mucking, thought, please save your changes and make a copy of your project directory. Next month, we'll want to start exactly where we left off. See you then! J


Dave Mark is a long-time Mac developer and author and has written a number of books on Macintosh development, including Learn C on the Macintosh, Learn C++ on the Macintosh, and The Macintosh Programming Primer series. Interested in Learning Cocoa? Be sure to check out Dave's web site at http://www.spiderworks.com.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

A Better Finder Rename 10.00b1 - File, p...
A Better Finder Rename is the most complete renaming solution available on the market today. That's why, since 1996, tens of thousands of hobbyists, professionals and businesses depend on A Better... Read more
CrossOver 14.1.6 - Run Windows apps on y...
CrossOver can get your Windows productivity applications and PC games up and running on your Mac quickly and easily. CrossOver runs the Windows software that you need on Mac at home, in the office,... Read more
Printopia 2.1.14 - Share Mac printers wi...
Run Printopia on your Mac to share its printers to any capable iPhone, iPad or iPod Touch. Printopia will also add virtual printers, allowing you to save print-outs to your Mac and send to apps.... Read more
Google Drive 1.24 - File backup and shar...
Google Drive is a place where you can create, share, collaborate, and keep all of your stuff. Whether you're working with a friend on a joint research project, planning a wedding with your fiancé, or... Read more
Chromium 45.0.2454.85 - Fast and stable...
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all Internet users to experience the web. Version 45.0.2454.85: Note: Does not contain the "... Read more
OmniFocus 2.2.5 - GTD task manager with...
OmniFocus helps you manage your tasks the way that you want, freeing you to focus your attention on the things that matter to you most. Capturing tasks and ideas is always a keyboard shortcut away in... Read more
iFFmpeg 5.7.1 - Convert multimedia files...
iFFmpeg is a graphical front-end for FFmpeg, a command-line tool used to convert multimedia files between formats. The command line instructions can be very hard to master/understand, so iFFmpeg does... Read more
VOX 2.6 - Music player that supports man...
VOX is a beautiful music player that supports many filetypes. The beauty is in its simplicity, yet behind the minimal exterior lies a powerful music player with a ton of features and support for all... Read more
Box Sync 4.0.6567 - Online synchronizati...
Box Sync gives you a hard-drive in the Cloud for online storage. Note: You must first sign up to use Box. What if the files you need are on your laptop -- but you're on the road with your iPhone? No... Read more
Carbon Copy Cloner 4.1.4 - Easy-to-use b...
Carbon Copy Cloner backups are better than ordinary backups. Suppose the unthinkable happens while you're under deadline to finish a project: your Mac is unresponsive and all you hear is an ominous,... Read more

You Can Play Madfinger Games' Unkil...
Madfinger Games - probably best known for the Dead Trigger series - has officially launched their newest zombie shooter (that isn't called Dead Trigger), named Unkilled. [Read more] | Read more »
KORG iELECTRIBE for iPhone (Music)
KORG iELECTRIBE for iPhone 1.0.1 Device: iOS iPhone Category: Music Price: $9.99, Version: 1.0.1 (iTunes) Description: ** 50% OFF Special Launch Sale - For a Limited Time **The ELECTRIBE reborn in an even smaller form A full-fledged... | Read more »
I am Bread (Games)
I am Bread 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: ‘I am Bread’ is the latest quirky adventure from the creators of 'Surgeon Simulator', Bossa Studios. This isn't the best thing... | Read more »
Rock(s) Rider - HD Edition (Games)
Rock(s) Rider - HD Edition 1.0.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0.0 (iTunes) Description: *** PLEASE NOTE: Compatible with iPhone 4s, iPad 2, iPad mini, iPod touch (5th generation) or newer *** Do you... | Read more »
Rebuild 3: Gangs of Deadsville (Games)
Rebuild 3: Gangs of Deadsville 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: It's been a few years since the zombpocalypse turned the world's cities into graveyards and sent the few... | Read more »
Power Ping Pong (Games)
Power Ping Pong 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: Do you wield your bat with zen-like focus or do your balls of fury give you a killer spin? Table tennis goes mobile with a... | Read more »
Z.O.N.A Project X (Games)
Z.O.N.A Project X 1.00 Device: iOS Universal Category: Games Price: $1.99, Version: 1.00 (iTunes) Description: Z.O.N.A Project X - shooter in the post-apocalyptic world. | Read more »
Trick Shot (Games)
Trick Shot 1.0.6 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0.6 (iTunes) Description: A game where all you have to do is throw a ball into a box, simple? Trick Shot is a minimalist physics puzzler with 90 levels... | Read more »
VoxelCity (Games)
VoxelCity 1.0.2 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0.2 (iTunes) Description: Looking for a new city builder? Tired of social media anti-games with no strategy? Look no further! NO IAP EVER! VoxelCity is a... | Read more »
Goat Simulator MMO Simulator (Games)
Goat Simulator MMO Simulator 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: ** IMPORTANT - SUPPORTED DEVICESiPhone 4S, iPad 2, iPod Touch 5 or better.** Coffee Stain Studios brings next-gen... | Read more »

Price Scanner via MacPrices.net

Near-Office Input Functionality Virtually Any...
Today Logitech introduced the Logitech K380 Multi-Device Bluetooth Keyboard and the Logitech M535 Bluetooth Mouse, giving users the freedom to work on any device, most anywhere. According to... Read more
College Student Deals: Additional $100 off Ma...
Take an additional $100 off all MacBooks and iMacs at Best Buy Online with their College Students Deals Savings, valid through September 4, 2015. Anyone with a valid .EDU email address can take... Read more
Will You Buy An iPad Pro? – The ‘Book Mystiqu...
It looks like we may not have to wait much longer to see what finally materializes as a new, larger-panel iPad (Pro/Plus?) Usually reliable Apple product prognosticator KGI Securities analyst Ming-... Read more
eFileCabinet Announces SMB Document Managemen...
Electronic document management (EDM) eFileCabinet, Inc., a hosted solutions provider for small to medium businesses, has announced that its SecureDrawer and eFileCabinet Online services will be... Read more
WaterField Designs Unveils American-Made, All...
San Francisco’s WaterField Designs today unveiled their all-leather Cozmo 2.0 — an elegant attach laptop bag with carefully-designed features to suit any business environment. The Cozmo 2.0 is... Read more
Apple’s 2015 Back to School promotion: Free B...
Purchase a new Mac or iPad at The Apple Store for Education and take up to $300 off MSRP. All teachers, students, and staff of any educational institution qualify for the discount. Shipping is free,... Read more
128GB MacBook Airs on sale for $100 off MSRP,...
B&H Photo has 11″ & 13″ MacBook Airs with 128GB SSDs on sale for $100 off MSRP. Shipping is free, and B&H charges NY sales tax only: - 11″ 1.6GHz/128GB MacBook Air: $799.99, $100 off MSRP... Read more
13-inch 2.5GHz MacBook Pro (refurbished) avai...
The Apple Store has Apple Certified Refurbished 13″ 2.5GHz MacBook Pros available for $829, or $270 off the cost of new models. Apple’s one-year warranty is standard, and shipping is free: - 13″ 2.... Read more
27-inch 3.2GHz iMac on sale for $1679, save $...
B&H Photo has the 27″ 3.2GHz iMac on sale for $1679.99 including free shipping plus NY sales tax only. Their price is $120 off MSRP. Read more
Apple and Cisco Partner to Deliver Fast-Lane...
Apple and Cisco have announced a partnership to create a “fast lane” for iOS business users by optimizing Cisco networks for iOS devices and apps. The alliance integrates iPhone with Cisco enterprise... Read more

Jobs Board

*Apple* Desktop Analyst - KDS Staffing (Unit...
…field and consistent professional recruiting achievement. Job Description: Title: Apple Desktop AnalystPosition Type: Full-time PermanentLocation: White Plains, NYHot Read more
Simply Mac *Apple* Specialist- Repair Techn...
Simply Mac is the greatest premier retailer of Apple products expertise in North America. We're looking for dedicated individuals to provide personalized service and Read more
Simply Mac *Apple* Specialist- Service Repa...
Simply Mac is the greatest premier retailer of Apple products expertise in North America. We're looking for dedicated individuals to provide personalized service and Read more
*Apple* Desktop Analyst - KDS Staffing (Unit...
…field and consistent professional recruiting achievement. Job Description: Title: Apple Desktop AnalystPosition Type: Full-time PermanentLocation: White Plains, NYHot Read more
Simply Mac- *Apple* Specialist- Store Manag...
Simply Mac is the largest premier retailer for Apple products and solutions. We're looking for dedicated individuals with a passion to simplify and enhance the Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.