Apple Carbon Programming. QuickStart.

Published:
Updated:
Preface
 
First MacIn the first 100 days of the Macintosh release in January 1984, Apple sold 72,000 of the computers. Relatively cheap, easy-to-use personal computer with a graphical operating system.
I've never seen this model. I did see this one:
 MacI'm not that old. At that time I was a student. When I began to work as a Software engineer, we already had Intel 386, MS-Dos, Microsoft Windows 3.1. Since that I'm the biggest fun of Microsoft - Visual C++, MFC, ATL, COM, DCOM, COM+,.NET, C#,...

Few months ago I bought iPhone. Then Mac mini. I made my first applications for this phone. Then, for my Mac... Goodbye, Microsoft?

I think I found a very easy way to step in to the world of the Apple programming. In this short article I want to show how to begin, how to make a first Mac OS X program. I'm not going to scare anyone, I will not talk about Objective-C, I will not use Cocoa. These are very amazing things, but it is, obviously, not the easiest start.

We all began from the super language - our old and respectful C. From my point of view, it is extremely easy to begin programming for Mac OS X from Carbon - an old procedural 32bit API for developing Mac OS X application.

Project Hello

In case you have a Mac and Xcode installed on it, it will take 2 seconds to make a window application on Mac:

1. Create new project - File menu -> New Project...
2. Choose Carbon Application template in the Application section in the New Project wizard and press Choose button (in the bottom-right corner).
3. Set the project name and press Save button.
4. Press Build and Go.

Here are few images illustrating these steps above:
 Xcode. New Project. Set project name
It runs. The window knows how to minimize and maximize itself. The application has the standard Apple menu.

 Application Hello
Source code

The application source code is in main.c file. Actually, everything from this file can be removed and replaced by the following code:

int main (int argc, char* argv[])
                      {
                          IBNibRef        nibRef;
                          WindowRef       window;
                      	
                          // Create a nib reference to a nib file.
                          CreateNibReference (CFSTR ("main"), &nibRef);
                          SetMenuBarFromNib (nibRef, CFSTR("MenuBar"));
                          CreateWindowFromNib (nibRef, CFSTR("MainWindow"), &window);
                      	
                          // Dispose of the nib reference as soon as you don’t need it any more.
                          DisposeNibReference (nibRef);
                      
                          // Make the unarchived window visible.
                          ShowWindow (window);
                      	
                          // Start the event loop. RunApplicationEventLoop is a
                      	// Carbon Event Manager function.
                          RunApplicationEventLoop ();
                      	
                          return 0;
                      }

Open in new window


Now the program is much shorter - one C-style function (as it should be in the procedural language) with few lines of code:

1. Call CreateNibReference function to create the resource object. Call DisposeNibReference in order to release it.

2. Call SetMenuBarFromNib function in order to set the application menu.

3. Call CreateWindowFromNib to create the window from the resource.

4. Call ShowWindow to show the window.

5. Use RunApplicationEventLoop function to start the application event loop.

For a test purpose I can comment (or delete) three window related lines and the function will look like:

int main (int argc, char* argv[])
                      {
                          IBNibRef        nibRef;
                      	
                          CreateNibReference (CFSTR ("main"), &nibRef);
                          SetMenuBarFromNib (nibRef, CFSTR("MenuBar"));
                          DisposeNibReference (nibRef);
                      
                          RunApplicationEventLoop ();
                      	
                          return 0;
                      }

Open in new window


Now this code compiled and launched creates only the menu:
 Only menuLet's remove everything:

int main (int argc, char* argv[])
                      {
                          RunApplicationEventLoop ();
                      	
                          return 0;
                      }

Open in new window

Build and Go:
Default menuI do remember very well how looks the minimal window application for Microsoft Windows.

Conclusion

It is a first and trivial experience in the Mac OS X development. But it gives an optimistic feeling, a confidence that the knowledge in C allows to study Mac OS, to make programs for Apple immediately, without long pauses for Objective-C and Cocoa books.

Reference

1. Apple Developer Connection. Carbon
2. Apple Developer Connection. Carbon Overview
3. Mac OS X Reference Library. Carbon Resources
4. Wikipedia: Carbon (API)
0
9,017 Views

Comments (0)

Have a question about something in this article? You can receive help directly from the article author. Sign up for a free trial to get started.