TweetFollow Us on Twitter

Jul 97 - Getting Started

Volume Number: 13 (1997)
Issue Number: 7
Column Tag: Getting Started

Getting to know NEXTSTEP

by Dave Mark, ©1997, All Rights Reserved

Do you remember the very first time you sat down at a Macintosh? For me, it was almost a religious experience. I instantly connected to the interface, to the elegance of the Mac look-and-feel. Recently, I've had the opportunity to explore some of the other major operating systems out there, including, most recently, NEXTSTEP. I must say I was both surprised and impressed.

Why spend time with NEXTSTEP? As you know, Apple bought NeXT with the intention of basing their next OS, Rhapsody, on the NEXTSTEP technology. By the time you read this, Apple should be putting the finishing touches on a preliminary release of Rhapsody. Till then, NEXTSTEP is the closest thing I have to Rhapsody. Also, I think it is worthwhile exploring the roots of our new OS, to get a sense of the logic behind some of the Rhapsody design decisions.

NEXTSTEP is both nice looking and easy to use. Though I did have trouble installing the developer's release on my PC, once it was up and running I found NEXTSTEP to be solid and a joy to use. This month, we'll take a first look at NEXTSTEP and the process of building a console Objective-C app. We'll also look at Objective-C's category mechanism, a cool way of seamlessly extending an existing class.

This month's column owes a debt of gratitude to CodeWarrior Gene Backlin. Gene wrote the book Developing NEXTSTEP Applications (ISBN# 06723-06581) and helped me come up to speed on the NEXTSTEP interface and the Project Builder and Interface Builder applications. Thanks, Gene!

And thanks also to Michael Rutman for his monthly expert tech review. As always, the mistakes are all mine...

Working with NEXTSTEP

One of the first things you'll notice when you boot up under NEXTSTEP is the "dock" that appears in the upper-right corner of your screen. My dock is shown in Figure 1. Each square in the doc represents an NEXTSTEP application. The NeXT cube at the top of the doc represents the NEXTSTEP equivalent of the Finder, called the FileViewer. Below that is the preferences application (which I've set to show the time and date). The last three squares are a terminal emulator which you can use to run your console apps, and the two programs which make up the NEXTSTEP development environment, Project Builder (the hammer) and Interface Builder (the screwdriver). We'll use the terminal emulator to build this month's apps, and move on to Project Builder and Interface Builder next month.

Figure 1. The NEXTSTEP "dock". By default, it appears in the upper right corner of the NEXTSTEP screen.

To launch an app from the dock, double-click on its square. If the app is already running, a double-click will bring it to the foreground, just like a Mac. You can tell if an app is not running by the elipsis (...) in the lower right corner of its dock square (i.e., no ellipsis means the app is running).

In general, you'll use the File Viewer to wander around your hard drive. As you can see in Figure 2, the File Viewer window is divided into three areas. The top area is for mounted volumes and aliases. The central strip shows where you are currently. In this case, we are looking at the directory /myhost/me. The bottom area shows the files and folders in the current directory. In this case, the directory /myhost/me contains 4 folders and 0 files.

Figure 2. The File Viewer window, showing the files in the default, "me" directory.

Notice the apple icon in the floppy disk in the top line? Yup. I stuck a Mac floppy in the PC floppy drive and NEXTSTEP recognized it. Very cool! That's how I was able to get my source code and screen shots (shot with the Grab application) over to my Mac. There's something nice about being able to work with a Mac floppy on my PC...

Figure 3 shows a pair of menu windows. The left window (labeled Workspace) holds the main File Viewer menu. The right window (labeled View) appeared when I clicked on the View item in the Workspace menu. Menus and submenus. Like a Mac, but different. Menu items can have command-key equivalents, but since this version of NEXTSTEP was running on my PC, they were Alt key equivalents. In general, NEXTSTEP feels like it borrowed heavily from the Mac (and why not?). If you are not sure how to do something, think about how you'd do it on a Mac. For example, Alt-c and Alt-v copy and paste, Alt-q quits, and Alt-w closes the frontmost window. Sound familiar?

Figure 3. The Workspace menu and View submenu.

NEXTSTEP allows you to remap the keyboard. By default, on an Intel box, the left Alt-Key is mapped to be a command key. There are several different configurations built in, and you can create your own.

Figure 4 shows the File Viewer with the Browser View selected. The NeXT browser is a truly nice way to navigate your file system. I hope this part of the NEXTSTEP interface makes it into Rhapsody. Note that as you descend into a directory, the path is reflected in the middle strip, while the details at each level are displayed in the browser portion at the bottom of the File Viewer window. In Figure 4, we are looking at the shapes directory, which holds the files from last month's sample program.

Figure 4. The File Viewer, with the Browser view.

Running Last Month's Example

As I brought my source code over from my Mac (where I was running CodeBuilder), I learned a few important lessons. First, try to avoid spaces in your file names. If you include a space in a file or directory name, you'll create a lot of extra work (and potential hair pulling) for yourself as you add escaped quotes to your makefiles, etc. to make sure the spaces are kept in the names. Save yourself the trouble and leave the spaces out.

I'm not sure of the details, but I've found that some odd (invisible) characters creep into my code when porting from Mac to NEXTSTEP. This could be a result of carriage return/line feeds being treated differently on the two platforms, or an artifact caused by my method of porting the files across. Regardless, if you find a line of code that looks perfect, yet behaves oddly, make sure that your files are true Unix files. If you create them in CodeWarrior or BBEdit, or on the NeXT box, this shouldn't be a problem. If you created your file on another platform (like your Mac), the mechanism you used to move the file to your NeXT box should handle the translation for you.

If all else fails, you might try translating your source file using the command:

tr '\015' '\012' < sourceFile > newFile

Another lesson learned is that different versions of OPENSTEP and NEXTSTEP look and behave quite differently from each other and from Tenon's CodeBuilder environment. For example, CodeBuilder doesn't support #import (at least not in the same way as NEXTSTEP). Under CodeBuilder, I had to use a #ifndef to avoid recursve inclusion of my header files. Moving to a genuine NEXTSTEP environment was really nice.

There are other differences as well. CodeBuilder calls gcc gcc, while under NEXTSTEP, gcc is called cc. This requires a small change in the makefiles. Also, NEXTSTEP automatically includes the Objective-C library in its standard libraries, so there is one less library to include. Here's the makefile I used when I moved Shape over to NEXTSTEP:

Shape:  Main.m Shape.m Circle.m Cylinder.m
  cc -o Shape Main.m Shape.m Circle.m Cylinder.m

Note the use of cc instead of gcc as well as the absence of the link library. Figure 5 shows the result, running in a terminal emulator window. Once we move into Project Builder and Interface Builder (next month's column) you can say goodbye to all this console business.

Figure 5. Running last month's Shape application inside the terminal emulator.

Adding Categories to Your Code

Objective-C features a mechanism known as a category that allows you to extend an existing class without modifying the .m and .h file of the original class. Why would you want to do that? The most obvious reason would be to extend a class when you don't have access to the source that defines the class. But there are other reasons to use a category to extend a class. You might want to organize your class into related subgroups. This is especially useful if you are building an extremely large class (you can take advantage of incremental compilation) or if your class is being worked on by more than one person. You might also use categories to extend a class in different ways for different applications.

To implement a category, you'll define a set of methods placing the interface in a header file and the implementation in a .m file. You can use a category to add methods to a class, but you are not allowed to use a category to add any variables to the class. A category method can override an inherited method and can get at the inherited method by sending a message to super. But a category method has no way to call a method in the original class having the same name as the category method (i.e., don't create a category method with the same name as a method in the class being extended).

An example should help make this clear. If you remember, last month's example implemented 3 classes: Shape, Circle, and Cylinder. Shape is derived from Object, Circle from Shape, and Cylinder from Circle. Without modifying the Shape, Circle, or Cylinder classes, we'll extend the Circle class and access the new methods from a Cylinder object. We'll call the category CircleMath. It will add an area and circumference method to the Circle class.

Here's the source code for CircleMath.h:

#import "Circle.h"

@interface Circle (CircleMath)
- (float)area;
- (float)circumference;
@end

Here's the source code for CircleMath.m:

#import "CircleMath.h"


@implementation Circle (CircleMath)

- (float)area

{

  return ((float)radius * (float)radius * 3.14159);
}

- (float)circumference
{
  return ((float)radius * 2.0 * 3.14159);
}

@end

Here's the new version of Main.m. We've added a #include of CircleMath.h as well as a pair of printf()s. The first printf() sends an area message to cylinder and the second printf() sends a circumference message to cylinder.

#include "Cylinder.h"
#include "CircleMath.h"

void main()
{
  id shape = [[Shape alloc] init];
  id circle = [[Circle alloc] initRadius:33];
  id cylinder = [[Cylinder alloc] initRadius:27 
height:10];

  printf( "\n[cylinder area] = %f...\n",
          [cylinder area] );
  printf( "[cylinder circumference] = %f...\n",
          [cylinder circumference] );

  [shape free];
  [circle free];
  [cylinder free];
}

Finally, here's the make file I used:

Shape:	Main.m Shape.m Circle.m CircleMath.m Cylinder.m
cc -o Shape Main.m Shape.m Circle.m CircleMath.m Cylinder.m

Note that I added the file CircleMath.m to both lines. That's it. Figure 6 shows the output when I ran this new version of Shape.

Figure 6. Running Shape with the CircleMath category added in.

Till Next Month...

I am very jazzed about NEXTSTEP and the promise it holds for Rhapsody. I can't wait to get to WWDC (a few weeks from now) and find out about what portions of the NEXTSTEP framework will make their way into Rhapsody. Till then, we'll continue to expore NEXTSTEP and, perhaps, make a return to Java as well. Got an opinion? Drop me a line...

 
AAPL
$95.94
Apple Inc.
-2.21
MSFT
$43.40
Microsoft Corpora
-0.18
GOOG
$575.68
Google Inc.
-11.75

MacTech Search:
Community Search:

Software Updates via MacUpdate

OmniPlan 2.3.6 - Robust project manageme...
With OmniPlan, you can create logical, manageable project plans with Gantt charts, schedules, summaries, milestones, and critical paths. Break down the tasks needed to make your project a success,... Read more
Command-C 1.1.1 - Clipboard sharing tool...
Command-C is a revolutionary app which makes easy to share your clipboard between iOS and OS X using your local WiFi network, even if the app is not currently opened. Copy anything (text, pictures,... Read more
Knock 1.1.7 - Unlock your Mac by knockin...
Knock is a faster, safer way to sign in. You keep your iPhone with you all the time. Now you can use it as a password. You never have to open the app -- just knock on your phone twice, even when it's... Read more
Mellel 3.3.6 - Powerful word processor w...
Mellel is the leading word processor for OS X and has been widely considered the industry standard since its inception. Mellel focuses on writers and scholars for technical writing and multilingual... Read more
LibreOffice 4.3.0.4 - Free Open Source o...
LibreOffice is an office suite (word processor, spreadsheet, presentations, drawing tool) compatible with other major office suites. The Document Foundation is coordinating development and... Read more
Freeway Pro 7.0 - Drag-and-drop Web desi...
Freeway Pro lets you build websites with speed and precision... without writing a line of code! With it's user-oriented drag-and-drop interface, Freeway Pro helps you piece together the website of... Read more
Drive Genius 3.2.4 - Powerful system uti...
Drive Genius is an OS X utility designed to provide unsurpassed storage management. Featuring an easy-to-use interface, Drive Genius is packed with powerful tools such as a drive optimizer, a... Read more
Vitamin-R 2.15 - Personal productivity t...
Vitamin-R creates the optimal conditions for your brain to work at its best by structuring your work into short bursts of distraction-free, highly focused activity alternating with opportunities for... Read more
Toast Titanium 12.0 - The ultimate media...
Toast Titanium goes way beyond the very basic burning in the Mac OS and iLife software, and sets the standard for burning CDs, DVDs, and now Blu-ray discs on the Mac. Create superior sounding audio... Read more
OS X Yosemite Wallpaper 1.0 - Desktop im...
OS X Yosemite Wallpaper is the gorgeous new background image for Apple's upcoming OS X 10.10 Yosemite. This wallpaper is available for all screen resolutions with a source file that measures 5,418... Read more

Latest Forum Discussions

See All

Despicable Me: Minion Rush is One Year O...
Despicable Me: Minion Rush is One Year Old, Gets its Biggest Update Yet Posted by Jennifer Allen on July 31st, 2014 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Plants vs. Zombies 2 Enters the Second H...
Plants vs. Zombies 2 Enters the Second Half of the Dark Ages Posted by Ellis Spice on July 31st, 2014 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Why Does It Spin? (Games)
Why Does It Spin? 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: THERE'S ONLY ONE RULE: DON'T TOUCH THE WALLS! Do you think you're able to follow this simple rule even if you would have to... | Read more »
Ice Wings Plus (Games)
Ice Wings Plus 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: THE GREAT ENDLESS RUNNER OF COMBAT JETS IS BACK !! With more than 680.000 downloads in the App Store, Ice Wings: Skies of Steel... | Read more »
Murl the Squirrel (Games)
Murl the Squirrel 1.0 Device: iOS Universal Category: Games Price: $.99, Version: 1.0 (iTunes) Description: Meet Murl. He is teased by a group of flying squirrels because he can't fly. Determined to show them he's can fly, he meets... | Read more »
Celleste (Games)
Celleste 0.1 Device: iOS Universal Category: Games Price: $2.99, Version: 0.1 (iTunes) Description: Lots of cute action with amazing 3D graphics and a new type of gameplay! Take control over the forces of the universe to help a group... | Read more »
Super Heavy Sword (Games)
Super Heavy Sword 0.0.1 Device: iOS Universal Category: Games Price: $.99, Version: 0.0.1 (iTunes) Description: Get Ready to Get HEAVY! Monster Robot Studios presents SUPER Heavy Sword! The sequel to the smash hit HEAVY sword which... | Read more »
Angels In The Sky (Games)
Angels In The Sky 1.00 Device: iOS Universal Category: Games Price: $6.99, Version: 1.00 (iTunes) Description: - A.I.S will only run smoothly on iPhone 5s. It's NOT compatible with iPad, iPhone 5 or earlier devices.- In order to... | Read more »
80 Days (Games)
80 Days 1.0.2 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.2 (iTunes) Description: 1872, with a steampunk twist. Phileas Fogg has wagered he can circumnavigate the world in just eighty days. Choose your own route... | Read more »
Micromon (Games)
Micromon 1.0 Device: iOS Universal Category: Games Price: $.99, Version: 1.0 (iTunes) Description: 130+ Animated Monsters to Catch & Battle! No waiting, play at your own pace! Embark on an epic monster capture RPG like none... | Read more »

Price Scanner via MacPrices.net

iPad Cannibalization Threat “Overblown”
Seeking Alpha’s Kevin Greenhalgh observes that while many commentators think Apple’s forthcoming 5.5-inch panel iPhone 6 will cannibalize iPad sales, in his estimation, these concerns are being... Read more
Primate Labs Releases July 2014 MacBook Pro P...
Primate Labs’ John Poole has posted Geekbench 3 results for most of the new MacBook Pro models that Apple released on Tuesday. Poole observes that overall performance improvements for the new MacBook... Read more
Apple Re-Releases Bugfixed MacBook Air EFI Fi...
Apple has posted a bugfixed version EFI Firmware Update 2.9 a for MacBook Air (Mid 2011) models. The update addresses an issue where systems may take longer to wake from sleep than expected, and... Read more
Save $50 on the 2.5GHz Mac mini, plus free sh...
B&H Photo has the 2.5GHz Mac mini on sale for $549.99 including free shipping. That’s $50 off MSRP, and B&H will also include a free copy of Parallels Desktop software. NY sales tax only. Read more
Save up to $140 on an iPad Air with Apple ref...
Apple is offering Certified Refurbished iPad Airs for up to $140 off MSRP. Apple’s one-year warranty is included with each model, and shipping is free. Stock tends to come and go with some of these... Read more
$250 price drop on leftover 15-inch Retina Ma...
B&H Photo has dropped prices on 2013 15″ Retina MacBook Pros by $250 off original MSRP. Shipping is free, and B&H charges NY sales tax only: - 15″ 2.3GHz Retina MacBook Pro: $2249, $250 off... Read more
More iPad Upgrade Musings – The ‘Book Mystiqu...
Much discussed recently, what with Apple reporting iPad sales shrinkage over two consecutive quarters, is that it had apparently been widely assumed that tablet users would follow a two-year hardware... Read more
13-inch 2.5GHz MacBook Pro on sale for $999,...
Best Buy has the 13″ 2.5GHz MacBook Pro available for $999.99 on their online store. Choose free shipping or free instant local store pickup (if available). Their price is $100 off MSRP. Price is... Read more
Save up to $300 on an iMac with Apple refurbi...
The Apple Store has Apple Certified Refurbished iMacs available for up to $300 off the cost of new models. Apple’s one-year warranty is standard, and shipping is free. These are the best prices on... Read more
WaterField Unveils 15″ Outback Solo & 13″...
Hard on the heels of Apple’s refreshed MacBook Pro Retina laptops announcement, WaterField Designs has unveiled a 15-inch version of the waxed-canvas and leather Outback Solo and a 13-inch version of... Read more

Jobs Board

Sr. Product Leader, *Apple* Store Apps - Ap...
**Job Summary** Imagine what you could do here. At Apple , great ideas have a way of becoming great products, services, and customer experiences very quickly. Bring Read more
Sr Software Lead Engineer, *Apple* Online S...
Sr Software Lead Engineer, Apple Online Store Publishing Systems Keywords: Company: Apple Job Code: E3PCAK8MgYYkw Location (City or ZIP): Santa Clara Status: Full Read more
Sr Software Lead Engineer, *Apple* Online S...
Sr Software Lead Engineer, Apple Online Store Publishing Systems Keywords: Company: Apple Job Code: E3PCAK8MgYYkw Location (City or ZIP): Santa Clara Status: Full Read more
*Apple* Solutions Consultant (ASC) - Apple (...
**Job Summary** The ASC is an Apple employee who serves as an Apple brand ambassador and influencer in a Reseller's store. The ASC's role is to grow Apple Read more
Sr. Product Leader, *Apple* Store Apps - Ap...
**Job Summary** Imagine what you could do here. At Apple , great ideas have a way of becoming great products, services, and customer experiences very quickly. Bring Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.