Porting UNIX/Linux Applications to Mac OS X
PDF
Introduction
Overview of Mac OS X
The Family Tree
Mac OS X and Darwin
What Macintosh Users Expect
Preparing to Port
The Mac OS X Command-Line Environment
Installing the Mac OS X Developer Tools
Building Makefile Projects With Xcode
Windowing Environment Considerations
Working with 64-bit Software
Compiling Your Code in Mac OS X
Using GNU Autoconf, Automake, and Autoheader
Compiling for Multiple CPU Architectures
Conditional Compilation on Mac OS X
Choosing a Default Compiler
Setting Compiler Flags
Understanding Two-Level Namespaces
Executable Format
Dynamic Libraries and Plug-ins
Bundles
Using Mac OS X Native Application Environments
Choosing a Native Application Environment
Lower-Level Graphics Technologies
Choosing a Graphical Environment for Your Application
What Kind of Application Are You Porting?
How Well Does It Need to Integrate With Mac OS X?
Does Your Application Require Cross-Platform Functionality?
Using Traditional UNIX Graphical Environments
Choosing a UNIX Graphical Environment
X11R6
Tcl/Tk
Qt
GTK+/GTKmm
wxWidgets
Wrapping a Command Line Application with a GUI Interface
Porting File, Device, and Network I/O
How Mac OS X File I/O Works
How Mac OS X Device I/O Works
File System Organization
How Mac OS Networking Works
Distributing Your Application
Bundles vs. Installers
Packaging Basics
Creating Disk Images Programmatically Using hdiutil
Tell the World About It
Additional Features
AppleScript and AppleScript Studio
Audio Architecture
Boot Sequence
Configuration Files
Device Drivers
The File System
The Kernel
Open Directory and the dscl Tool
Printing (CUPS)
Bonjour
Scripting Languages
Security and Security Services
(Re)designing for Portability
What is Portability?
Using Abstraction Layers
Using Plug-Ins and Libraries Effectively
Architectural Portability
Glossary
Revision History