CurrencyConverter HOWTO

# Building the Application

Both the user interface and the behavior of the CurrencyConverter are complete now. All that remains for us to do is to build the application executable into a Cocoa application bundle. Apple's tutorial relies on XCode to build the application from Objective-C source files; we will use the Clozure CL IDE to build it from our Lisp source file.

We build the application using the optional BUILD-APPLICATION feature, distributed as part of Clozure CL. The steps to build the Cocoa application are:

1. Load the application code into the IDE

2. Load the BUILD_APPLICATION feature

3. Run BUILD_APPLICATION with the proper arguments

This sequence of steps causes Clozure CL to construct a Cocoa application bundle and write out the application executable to it, then quit. If all goes well, you should be able to run the application by double-clicking it, and use the UI you built in InterfaceBuilder to convert currencies.

## Building the Application, Step-by-Step

1. Launch the Clozure CL IDE. It's safest to build the application with a fresh IDE session, so if you have it running, you may wish to quit and relaunch before following the rest of the steps.

2. For convenience, set the working directory to your "currency-converter" folder. For example, you can do something like this (using your pathnames in place of mine, of course:):

   `(setf (current-directory) "/Users/mikel/Valise/clozure/openmcl/example-code/currency-converter/")`

3. Load the application code:

   `(load "currency-converter")`

4. Load the BUILD-APPLICATION feature:

   `(require "build-application")`

5. Run BUILD-APPLICATION (be sure to correct the pathname to your CurrencyConverter nibfile. It is safest to use a full, absolute pathname—not the relative pathname you see below):

       (ccl::build-application :name "CurrencyConverter"
                               :main-nib-name "CurrencyConverter"
                               :nibfiles
         '(#P"currency-converter/CurrencyConverter.nib"))

By default, BUILD-APPLICATION constructs the application bundle in the current working directory. If you followed the instructions here, that means it will build CurrencyConverter.app in your currency-converter folder. You can control where BUILD-APPLICATION puts the application bundle by passing a pathname as the value of the keyword argument :DIRECTORY, like so:

    (ccl::build-application :name "CurrencyConverter"
                            :directory #P"/Users/mikel/Desktop/"
                            :main-nib-name "CurrencyConverter"
                            :nibfiles
      '(#P"currency-converter/CurrencyConverter.nib"))

If all goes well, BUILD-APPLICATION constructs an application bundle, copies "CurrencyConverter.nib" into it, writes the application executable, and quits. You should now be able to launch CurrencyConverter.app by double-clicking the application icon:

CurrencyConverter.app launches and displays your user interface, which you can then use to convert currencies:

## Correcting the Application Name

You'll notice when you run the application that, even though you named it CurrencyConverter, the name in the main menu appears as "Clozure CL". That's because OS X takes the application's name, not from the application bundle's name, nor from the running code, but from an InfoPlist.strings file hidden inside the application bundle. To make the name appear correctly in the running application, you need to edit the file

CurrencyConverter.app/Contents/Resources/English.lproj/InfoPlist.strings

Find the entry named "CFBundleName" and change its value from "Clozure CL" to "CurrencyConverter". The application's name in the main menu bar should now appear correctly, as "CurrencyConverter". You may also want to change the other strings in the "InfoPlist.strings" file.