• MacTech Network:
  • Tech Support
  • |
  • MacForge.net
  • |
  • Apple News
  • |
  • Register Domains
  • |
  • SSL Certificates
  • |
  • iPod Deals
  • |
  • Mac Deals
  • |
  • Mac Book Shelf

MAC TECH

  • Home
  • Magazine
    • About MacTech in Print
    • Issue Table of Contents
    • Subscribe
    • Risk Free Sample
    • Back Issues
    • MacTech DVD
  • Archives
    • MacTech Print Archives
    • MacMod
    • MacTutor
    • FrameWorks
    • develop
  • Forums
  • News
    • MacTech News
    • MacTech Blog
    • MacTech Reviews and KoolTools
    • Whitepapers, Screencasts, Videos and Books
    • News Scanner
    • Rumors Scanner
    • Documentation Scanner
    • Submit News or PR
    • MacTech News List
  • Store
  • Apple Expo
    • by Category
    • by Company
    • by Product
  • Job Board
  • Editorial
    • Submit News or PR
    • Writer's Kit
    • Editorial Staff
    • Editorial Calendar
  • Advertising
    • Benefits of MacTech
    • Mechanicals and Submission
    • Dates and Deadlines
    • Submit Apple Expo Entry
  • User
    • Register for Ongoing Raffles
    • Register new user
    • Edit User Settings
    • Logout
  • Contact
    • Customer Service
    • Webmaster Feedback
    • Submit News or PR
    • Suggest an article
  • Connect Tools
    • MacTech Live Podcast
    • RSS Feeds
    • Twitter

ADVERTISEMENT

Volume Number: 21 (2005)
Issue Number: 5
Column Tag: Programming

Tips From Big Nerd Ranch

Tiger Time

by Aaron Hillegass, Chris Campbell, and Marquis Logan

For this special Tiger issue, it seems appropriate to pass on a few tips that may help as you move your development efforts to Mac OS X 10.4.

All-In-One

Xcode 2 has several nifty new features, but our absolute favorite is "All-In-One Layout." In previous versions of Xcode, if you had a few projects open and each project had a build panel, a run log, a debugger panel, and an editor window, you were quickly lost in a sea of windows. In Xcode 2, all of these functions can be done in a single window. To experience the pure joy of All-In-One, you must close all your projects and open the General Preferences:


Figure 1.

When you open a project, there will be a segmented controller labeled Page on the left end of the toolbar:


Figure 2.

There are three pages:

    The editor page handles editing, project search, and revision management.

    The build page handles the building, the build log, and the run log.

    The debug page handles debugging.

If you often work with several projects simultaneously, this will make your life a much more pleasant place.

Backwards Compatibility

If only users would update immediately to Tiger, we would not have to worry about backwards compatibility. The most common source of backwards compatibility issues is inadvertent use of new Tiger APIs. This will prevent your application from running on 10.3. There are two good solutions to the problem.

    Solution 1: Use the 10.3 SDK (or 10.2 if needed) for apps that should only use Panther APIs.


Figure 3.

This will cause the application to link against stub libraries that match the APIs available on 10.3.

    Solution 2 (our favorite): Use the "Current Mac OS" SDK to take advantage of all the latest APIs on the current system:


Figure 4.

and set the "Mac OS X Deployment Target" in the target build settings to 10.3:


Figure 5.

This causes the newer APIs to be weak-linked into the application. It requires a little additional work by the developer to check the availability of an API in the code and gracefully handle cases where API is missing (running on an earlier version of the OS).

C function symbols need to be checked if their value is valid:

if (CGContextFillEllipseInRect != NULL)
{
   CGContextFillEllipseInRect(context, rect);
} else {
   // Older OS version actions
}

Objective-C methods can be detected using -[NSObject respondsToSelector:]


if ([tableView respondsToSelector:@selector(setColumnAutoresizingStyle)])
{
   [tableView setColumnAutoresizingStyle:NSTableViewLastColumnOnlyAutoresizingStyle];
} else {
   // Older OS version actions
}

This is the most powerful solution as it allows the developer to take advantage of the latest features while maintaining the broadest compatibility.

See Apple's documentation on cross development for more details:

http://developer.apple.com/documentation/DeveloperTools/Conceptual/cross_development/index.html

Debugging Bindings

There have been many complaints that bindings are difficult to debug. This is sadly still true, but Apple has begun to make things easier for us. There is now a default NSBindingDebugLogLevel. Set it to 1 to turn on logging. The easiest way is to pass it as an argument on the command-line. Under the Executables group in Xcode, select your application, and look at the info panel. Add the argument -NSBindingDebugLogLevel 1.


Figure 6.

In the short time that we have been using Tiger, we have found it to be a superior platform for developers. It is chock-full of fun new technologies and is even more beautiful than 10.3. Enjoy!


Aaron Hillegass, Chris Campbell, and Marquis Logan
Warning: include(/home/cust10011/www/site001/includes-mactech/includefiles/mt_footer.inc) [function.include]: failed to open stream: No such file or directory in /home/cust10011/www/site001_files/staticcontent/articles/mactech/Vol.21/21.05/TigerTime/index.html on line 177

Warning: include() [function.include]: Failed opening '/home/cust10011/www/site001/includes-mactech/includefiles/mt_footer.inc' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /home/cust10011/www/site001_files/staticcontent/articles/mactech/Vol.21/21.05/TigerTime/index.html on line 177