MacApp
Encyclopedia
MacApp was Apple Computer
's primary object oriented application framework
for the Mac OS
for much of the 1990s. First released in 1985, it is arguably the first such system to be widely used, notably on a microcomputer
platform. Microsoft
's MFC and Borland
's OWL
were both based directly on MacApp concepts.
It seems that Apple paid less attention to it than others, however, as it was alternately developed intensely and then ignored for long periods through the 1990s. Many Mac developers eventually gave up on it and moved to newer tools such as Metrowerks
' PowerPlant
and Symantec
's Think Class Library (TCL). MacApp had a brief reprieve between 2000 and 2001, but after demoing a new version at WWDC
in June 2001, all development was cancelled that October.
Even with this checkered career, MacApp was used for a variety of major applications, including Adobe Photoshop
and Freeway.
. The engineering team for the Toolkit and the initial implementation of MacApp included Larry Rosenstein, Scott Wallace, and Ken Doyle. MacApp was based on Object Pascal
, Apple’s object-oriented extension to Pascal, developed in consultation with Pascal inventor Niklaus Wirth
. At the time, Pascal was Apple's language of choice for Mac programming.
Writing a Mac program without an application framework is not an easy task, but at the time the object-oriented programming
field was still very new and considered somewhat suspect by many developers. Early frameworks tended to confirm this suspicion, being large, slow, and typically inflexible.
MacApp was perhaps the first truly usable framework in all meanings of the term. Compiled applications were quite reasonable in terms of size and memory footprint, and the performance was not bad enough to make developers shy from it. Although "too simple" in its first releases, a number of follow-up versions quickly addressed the main problems. By this point, around 1987, the system had matured into a useful tool, and a number of developers starting using it on major projects. Given the small memory sizes and slow speeds of machines of the era, however, even the small overhead of MacApp was considered a bother, and developer uptake was not particularly widespread.
At this point the market was moving towards C++
, and Apple was forced to move as well. The resulting MacApp 3.0 was subject to a long and heated debate between proponents of Object Pascal and C++ in the Usenet
and other forums. Nevertheless 3.0 managed to garner a reasonable following after its release in 1991, even though the developer suite, Macintosh Programmer's Workshop
(MPW), was growing hopelessly outdated. Poised for what appeared to be a success story, Apple then downsized the entire developer tools group, leaving both MacApp and MPW high and dry.
One of the reasons for this downsizing was Apple's long saga of attempting to introduce the "next great platform" for development, almost always in the form of a cross-platform system of some sort. Their first attempt was Bedrock
, a class library created in partnership with Symantec that ran on the Mac and Windows, which died a lingering death as both parties eventually gave up on working with the other. One of the reasons for their problems was the creation of OpenDoc
, which was itself developed into a cross-platform system that competed directly with Bedrock. There were some attempts to position Bedrock as an OpenDoc platform, but everyone involved knew this was nothing more than smoke and mirrors.
So with the next big thing just around the corner, MPW and MacApp simply were not important. It was much more important to put those developer resources into these new projects to help them reach the market sooner. But when none of them really did reach the market (OpenDoc's "success" was arguable at best) the Mac was left with tools that were now almost a decade old and simply could not compete with the newer products from third parties. Through the early 1990s competing frameworks grew into real competitors to MacApp. First Symantec's TCL garnered a small following, but then Metrowerks' PowerPlant
generally took over the entire market.
Nevertheless, the core developers of MacApp refused to let it die, and continued to work on the system throughout the 1990s. When all of Apple's "official" cross-platform projects were finally in their death throes, the team decided to take it upon themselves to fix the problem, and announced in late 1996 that they would be providing a cross-platform version of MacApp instead. By this point in time Apple was in serious trouble in the marketplace, and most developers had long given up believing any of their claims after watching one such product after another disappear.
Throughout the continuing saga there remained a core of loyal MacApp users who grew increasingly frustrated at Apple's behavior, which by the late 1990s had grown to outright dismissal of their own product during the introduction of Cocoa. Things were so bad that a group of MacApp users went so far as to organize their own meeting at WWDC '98
under an assumed name, in order to avoid having Apple staffers refuse them a room to meet in.
These antics did not go entirely unnoticed within Apple, and in late 1999 a "new" team, consisting of members who had worked on it all along, was put together to bring out a new version. Included was the new Apple Class Suites (ACS), a thinner layer of C++ wrappers for many of the new Mac OS features being introduced from OpenStep
. MacApp 3.0 Release XV was released on August 28, 2001 to the delight of many, all of whom were around to see history repeat itself in October when the product was killed once again, this time likely forever.
MacApp is still being kept alive by a dedicated group of developers who have maintained and enhanced the framework since Apple stopped supporting it in 2001. MacApp has been updated to fully support Carbon Events, Universal Binaries, Unicode Text, MLTE control, DataBrowser control, FSRefs, XML parsing, Custom Controls, Composite Window, Drawer Window, HIView Window and Custom Windows. MacApp also has C++ wrapper classes for HIObject and HIView. Also the Pascal version, based mainly on MacApp-2, has been ported to Mac OS X and Xcode. It features long Unicode filenames and streamed documents with automatic byte-swapping.
MacApp supports the Xcode
IDE. In fact at WWDC 2005
, after Apple announced the transition to Intel CPUs, it took a single developer 48 hours to update MacApp and the MacApp example apps to support Universal Binaries.
An application built in MacApp followed the command pattern
, in which user actions are encapsulated in objects containing event details, and then sent to the proper object to carry them out. In the Mac OS this simple chain of events is actually not all that easy to code "by hand", as the OS only supports extremely basic events like "mouse click" or "keypress". It is the role of MacApp's internal machinery to take these basic events, translate them into semantically higher-level commands, and then route the command to the proper object.
Not only did MacApp relieve the author of having to write this code, which every program requires, but also as a side-effect cleanly separated code into commands and their handlers. In doing so, the resulting program was considered to be, in Apple parlance, factored. This was important under System 7
and later versions of the Mac OS, where commands were expected to flow in not only from the user's actions, but from AppleScript
and its underlying Apple Events
system as well. Under MacApp, Apple Events were decoded into the same commands as if they had been initiated by direct user actions, meaning that the developer didn't have to write much, if any, code to directly handle Apple Events. This was a major problem for developers using earlier systems, including MacApp 2.0, which had no such separation and often led to Apple Event support being too difficult to bother with.
In keeping with its role as an application framework, MacApp also included a number of pre-rolled objects covering most of the basic Mac GUI
—windows, menus, dialogs and similar widgets were all represented within the system. Unfortunately, Apple typically supplied lightweight wrappers over existing internal Mac OS code instead of providing systems that were usable in the "real world". For instance, the TTEView class was offered as the standard text editor, but the underlying TextEdit implementation was severely limited and Apple itself often stated it should not be used at all after the MLTE control was introduced. As a result, developers were often forced to buy add-on objects to address these sorts of needs, or roll their own. The lack of a set of professional quality GUI objects can be considered one of MacApp's biggest problems.
These problem has been addressed with the release of MacApp R16. MacApp R16 uses standard Carbon controls for all MacApp GUI objects. The EditText Carbon control uses the MLTE control for full Unicode Text support. The TTEView class has been superseded by the TMLTEView class which uses the MLTE control for full Unicode Text support.
Apple Computer
Apple Inc. is an American multinational corporation that designs and markets consumer electronics, computer software, and personal computers. The company's best-known hardware products include the Macintosh line of computers, the iPod, the iPhone and the iPad...
's primary object oriented application framework
Application framework
In computer programming, an application framework consists of a software framework used by software developers to implement the standard structure of an application for a specific development environment ....
for the Mac OS
Mac OS
Mac OS is a series of graphical user interface-based operating systems developed by Apple Inc. for their Macintosh line of computer systems. The Macintosh user experience is credited with popularizing the graphical user interface...
for much of the 1990s. First released in 1985, it is arguably the first such system to be widely used, notably on a microcomputer
Microcomputer
A microcomputer is a computer with a microprocessor as its central processing unit. They are physically small compared to mainframe and minicomputers...
platform. Microsoft
Microsoft
Microsoft Corporation is an American public multinational corporation headquartered in Redmond, Washington, USA that develops, manufactures, licenses, and supports a wide range of products and services predominantly related to computing through its various product divisions...
's MFC and Borland
Borland
Borland Software Corporation is a software company first headquartered in Scotts Valley, California, Cupertino, California and finally Austin, Texas. It is now a Micro Focus subsidiary. It was founded in 1983 by Niels Jensen, Ole Henriksen, Mogens Glad and Philippe Kahn.-The 1980s:...
's OWL
Object Windows Library
The Object Windows Library is a Borland C++ object-oriented framework originally designed for WinAPI. It was used in Turbo Pascal for Windows, Borland Pascal and their Borland C++ package. It was a competitor to the Microsoft Foundation Class Library .OWL had incomplete support by the Borland C++...
were both based directly on MacApp concepts.
It seems that Apple paid less attention to it than others, however, as it was alternately developed intensely and then ignored for long periods through the 1990s. Many Mac developers eventually gave up on it and moved to newer tools such as Metrowerks
Metrowerks
Metrowerks was a company that developed software development tools for various desktop, handheld, embedded, and gaming platforms. Its flagship product, CodeWarrior, comprised an IDE, compilers, linkers, debuggers, libraries, and related tools...
' PowerPlant
PowerPlant
PowerPlant is an object-oriented GUI toolkit, application framework and set of class libraries for Mac OS, created by Metrowerks. The framework was fairly popular at the height of the Classic Mac OS era, and was primarily used with CodeWarrior...
and Symantec
Symantec
Symantec Corporation is the largest maker of security software for computers. The company is headquartered in Mountain View, California, and is a Fortune 500 company and a member of the S&P 500 stock market index.-History:...
's Think Class Library (TCL). MacApp had a brief reprieve between 2000 and 2001, but after demoing a new version at WWDC
Worldwide Developers Conference
The Apple Worldwide Developers Conference, commonly abbreviated WWDC, is a conference held annually in California by Apple Inc. The conference is primarily used by Apple to showcase its new software and technologies for developers, as well as offering hands-on labs and feedback sessions...
in June 2001, all development was cancelled that October.
Even with this checkered career, MacApp was used for a variety of major applications, including Adobe Photoshop
Adobe Photoshop
Adobe Photoshop is a graphics editing program developed and published by Adobe Systems Incorporated.Adobe's 2003 "Creative Suite" rebranding led to Adobe Photoshop 8's renaming to Adobe Photoshop CS. Thus, Adobe Photoshop CS5 is the 12th major release of Adobe Photoshop...
and Freeway.
History
MacApp was a direct descendent of the Lisa Toolkit, Apple’s first effort in designing an object-oriented application framework. The MacApp and Lisa Toolkit projects were headed by Larry TeslerLarry Tesler
Larry Tesler is a computer scientist working in the field of human-computer interaction. Tesler has worked at Xerox PARC, Apple Computer, Amazon.com, and Yahoo!...
. The engineering team for the Toolkit and the initial implementation of MacApp included Larry Rosenstein, Scott Wallace, and Ken Doyle. MacApp was based on Object Pascal
Object Pascal
Object Pascal refers to a branch of object-oriented derivatives of Pascal, mostly known as the primary programming language of Embarcadero Delphi.-Early history at Apple:...
, Apple’s object-oriented extension to Pascal, developed in consultation with Pascal inventor Niklaus Wirth
Niklaus Wirth
Niklaus Emil Wirth is a Swiss computer scientist, best known for designing several programming languages, including Pascal, and for pioneering several classic topics in software engineering. In 1984 he won the Turing Award for developing a sequence of innovative computer languages.-Biography:Wirth...
. At the time, Pascal was Apple's language of choice for Mac programming.
Writing a Mac program without an application framework is not an easy task, but at the time the object-oriented programming
Object-oriented programming
Object-oriented programming is a programming paradigm using "objects" – data structures consisting of data fields and methods together with their interactions – to design applications and computer programs. Programming techniques may include features such as data abstraction,...
field was still very new and considered somewhat suspect by many developers. Early frameworks tended to confirm this suspicion, being large, slow, and typically inflexible.
MacApp was perhaps the first truly usable framework in all meanings of the term. Compiled applications were quite reasonable in terms of size and memory footprint, and the performance was not bad enough to make developers shy from it. Although "too simple" in its first releases, a number of follow-up versions quickly addressed the main problems. By this point, around 1987, the system had matured into a useful tool, and a number of developers starting using it on major projects. Given the small memory sizes and slow speeds of machines of the era, however, even the small overhead of MacApp was considered a bother, and developer uptake was not particularly widespread.
At this point the market was moving towards C++
C++
C++ is a statically typed, free-form, multi-paradigm, compiled, general-purpose programming language. It is regarded as an intermediate-level language, as it comprises a combination of both high-level and low-level language features. It was developed by Bjarne Stroustrup starting in 1979 at Bell...
, and Apple was forced to move as well. The resulting MacApp 3.0 was subject to a long and heated debate between proponents of Object Pascal and C++ in the Usenet
Usenet
Usenet is a worldwide distributed Internet discussion system. It developed from the general purpose UUCP architecture of the same name.Duke University graduate students Tom Truscott and Jim Ellis conceived the idea in 1979 and it was established in 1980...
and other forums. Nevertheless 3.0 managed to garner a reasonable following after its release in 1991, even though the developer suite, Macintosh Programmer's Workshop
Macintosh Programmer's Workshop
Macintosh Programmer's Workshop or MPW, is a software development environment for the Classic Mac OS, written by Apple Computer. For Macintosh developers, it was one of the primary tools for building applications for System 7.x and Mac OS 8.x and 9.x. Initially, MPW was sold as a commercial product...
(MPW), was growing hopelessly outdated. Poised for what appeared to be a success story, Apple then downsized the entire developer tools group, leaving both MacApp and MPW high and dry.
One of the reasons for this downsizing was Apple's long saga of attempting to introduce the "next great platform" for development, almost always in the form of a cross-platform system of some sort. Their first attempt was Bedrock
Bedrock (framework)
Bedrock was a joint effort by Apple Computer and Symantec to produce a cross platform programming framework for writing applications on the Apple Macintosh and Microsoft Windows platforms. The project was a failure for various political reasons, and after delivering a beta version the project died...
, a class library created in partnership with Symantec that ran on the Mac and Windows, which died a lingering death as both parties eventually gave up on working with the other. One of the reasons for their problems was the creation of OpenDoc
OpenDoc
OpenDoc was a multi-platform software componentry framework standard for compound documents, intended as an alternative to Microsoft's Object Linking and Embedding ....
, which was itself developed into a cross-platform system that competed directly with Bedrock. There were some attempts to position Bedrock as an OpenDoc platform, but everyone involved knew this was nothing more than smoke and mirrors.
So with the next big thing just around the corner, MPW and MacApp simply were not important. It was much more important to put those developer resources into these new projects to help them reach the market sooner. But when none of them really did reach the market (OpenDoc's "success" was arguable at best) the Mac was left with tools that were now almost a decade old and simply could not compete with the newer products from third parties. Through the early 1990s competing frameworks grew into real competitors to MacApp. First Symantec's TCL garnered a small following, but then Metrowerks' PowerPlant
PowerPlant
PowerPlant is an object-oriented GUI toolkit, application framework and set of class libraries for Mac OS, created by Metrowerks. The framework was fairly popular at the height of the Classic Mac OS era, and was primarily used with CodeWarrior...
generally took over the entire market.
Nevertheless, the core developers of MacApp refused to let it die, and continued to work on the system throughout the 1990s. When all of Apple's "official" cross-platform projects were finally in their death throes, the team decided to take it upon themselves to fix the problem, and announced in late 1996 that they would be providing a cross-platform version of MacApp instead. By this point in time Apple was in serious trouble in the marketplace, and most developers had long given up believing any of their claims after watching one such product after another disappear.
Throughout the continuing saga there remained a core of loyal MacApp users who grew increasingly frustrated at Apple's behavior, which by the late 1990s had grown to outright dismissal of their own product during the introduction of Cocoa. Things were so bad that a group of MacApp users went so far as to organize their own meeting at WWDC '98
Worldwide Developers Conference
The Apple Worldwide Developers Conference, commonly abbreviated WWDC, is a conference held annually in California by Apple Inc. The conference is primarily used by Apple to showcase its new software and technologies for developers, as well as offering hands-on labs and feedback sessions...
under an assumed name, in order to avoid having Apple staffers refuse them a room to meet in.
These antics did not go entirely unnoticed within Apple, and in late 1999 a "new" team, consisting of members who had worked on it all along, was put together to bring out a new version. Included was the new Apple Class Suites (ACS), a thinner layer of C++ wrappers for many of the new Mac OS features being introduced from OpenStep
OpenStep
OpenStep was an object-oriented application programming interface specification for an object-oriented operating system that used a non-NeXTSTEP operating system as its core, principally developed by NeXT with Sun Microsystems. OPENSTEP was a specific implementation of the OpenStep API developed...
. MacApp 3.0 Release XV was released on August 28, 2001 to the delight of many, all of whom were around to see history repeat itself in October when the product was killed once again, this time likely forever.
MacApp is still being kept alive by a dedicated group of developers who have maintained and enhanced the framework since Apple stopped supporting it in 2001. MacApp has been updated to fully support Carbon Events, Universal Binaries, Unicode Text, MLTE control, DataBrowser control, FSRefs, XML parsing, Custom Controls, Composite Window, Drawer Window, HIView Window and Custom Windows. MacApp also has C++ wrapper classes for HIObject and HIView. Also the Pascal version, based mainly on MacApp-2, has been ported to Mac OS X and Xcode. It features long Unicode filenames and streamed documents with automatic byte-swapping.
MacApp supports the Xcode
Xcode
Xcode is a suite of tools, developed by Apple, for developing software for Mac OS X and iOS. Xcode 4.2, the latest major version, is available on the Mac App Store for free for Mac OS X 10.7 , and on the Apple Developer Connection website for free to registered developers Xcode is a suite of tools,...
IDE. In fact at WWDC 2005
Worldwide Developers Conference
The Apple Worldwide Developers Conference, commonly abbreviated WWDC, is a conference held annually in California by Apple Inc. The conference is primarily used by Apple to showcase its new software and technologies for developers, as well as offering hands-on labs and feedback sessions...
, after Apple announced the transition to Intel CPUs, it took a single developer 48 hours to update MacApp and the MacApp example apps to support Universal Binaries.
Description
- This description is based on MacApp 3.0, which had a more advanced underlying model than the earlier 2.0 and differed in many significant ways.
An application built in MacApp followed the command pattern
Command pattern
In object-oriented programming, the command pattern is a design pattern in which an object is used to represent and encapsulate all the information needed to call a method at a later time...
, in which user actions are encapsulated in objects containing event details, and then sent to the proper object to carry them out. In the Mac OS this simple chain of events is actually not all that easy to code "by hand", as the OS only supports extremely basic events like "mouse click" or "keypress". It is the role of MacApp's internal machinery to take these basic events, translate them into semantically higher-level commands, and then route the command to the proper object.
Not only did MacApp relieve the author of having to write this code, which every program requires, but also as a side-effect cleanly separated code into commands and their handlers. In doing so, the resulting program was considered to be, in Apple parlance, factored. This was important under System 7
System 7 (Macintosh)
System 7 is a single-user graphical user interface-based operating system for Macintosh computers. It was introduced on May 13, 1991 by Apple Computer. It succeeded System 6, and was the main Macintosh operating system until it was succeeded by Mac OS 8 in 1997...
and later versions of the Mac OS, where commands were expected to flow in not only from the user's actions, but from AppleScript
AppleScript
AppleScript is a scripting language created by Apple Inc. and built into Macintosh operating systems since System 7. The term "AppleScript" may refer to the scripting system itself, or to particular scripts that are written in the AppleScript language....
and its underlying Apple Events
Apple events
Apple events are the canonical message-based interprocess communication mechanism in Mac OS, first appearing in System 7 and supported by every version since then, including Mac OS X. Apple events describe "high-level" events such as "open document" or "print file", whereas earlier OS's had...
system as well. Under MacApp, Apple Events were decoded into the same commands as if they had been initiated by direct user actions, meaning that the developer didn't have to write much, if any, code to directly handle Apple Events. This was a major problem for developers using earlier systems, including MacApp 2.0, which had no such separation and often led to Apple Event support being too difficult to bother with.
In keeping with its role as an application framework, MacApp also included a number of pre-rolled objects covering most of the basic Mac GUI
Gui
Gui or guee is a generic term to refer to grilled dishes in Korean cuisine. These most commonly have meat or fish as their primary ingredient, but may in some cases also comprise grilled vegetables or other vegetarian ingredients. The term derives from the verb, "gupda" in Korean, which literally...
—windows, menus, dialogs and similar widgets were all represented within the system. Unfortunately, Apple typically supplied lightweight wrappers over existing internal Mac OS code instead of providing systems that were usable in the "real world". For instance, the TTEView class was offered as the standard text editor, but the underlying TextEdit implementation was severely limited and Apple itself often stated it should not be used at all after the MLTE control was introduced. As a result, developers were often forced to buy add-on objects to address these sorts of needs, or roll their own. The lack of a set of professional quality GUI objects can be considered one of MacApp's biggest problems.
These problem has been addressed with the release of MacApp R16. MacApp R16 uses standard Carbon controls for all MacApp GUI objects. The EditText Carbon control uses the MLTE control for full Unicode Text support. The TTEView class has been superseded by the TMLTEView class which uses the MLTE control for full Unicode Text support.
External links
- Programmer's Guide to MacApp - full documentation from the Inside MacintoshInside MacintoshInside Macintosh is the name of the developer documentation manuals published by Apple Computer, documenting the APIs and machine architecture of the Macintosh computer....
series - ClubMacApp Home page of post-Apple MacApp maintenance and development community, mothered by Apple's former tech lead.