Here is a glimpse of a new internal use application that I am finishing up. I’m calling it Credenza.
The inspiration for the name is based on my personal interest in Mid-Century Modern design, furniture, and architecture. A Credenza is essentially a furniture cabinet popular in the 1950’s and 1960’s that may have included space to store folders, media, barware, or anything else for that matter. Credenza the application is a custom designed storage repository or database intended to support my subjective methods of logging data relative to my work.
The pictured chart below displays the flow of data based on how I manage personal business records on a monthly basis: The sourceView contains a list of active clients who submit groups (Batches) of monthly assignments (Jobs). For example September Post Production … Program 1, Program 2, Program 3 … and so on. I’ve added a Task Manager that is linked to each individual Job, detailed contact/account information, a text editor, billing/payment records, and past due information. The only thing Credenza lacks is support for generating invoices.
For the past year I have been studying the process of building Cocoa databases using Core Data and Bindings in Xcode.
Two specific resources sparked my interest in Core Data: The Core Data exercise in this Cocoa Programing book by Aaron Hillegas, and this Core Data tutorial movie supplied by Apple.
Credenza takes advantage of the basic Core Data principals with the addition of custom code that enhances the functionality of the application.
There were two significant challenges:
• A user option defining the state of the application at runtime
• Migration and Versioning
Credenza is a Document based application. By default a “new” blank document is displayed when launching the application. This can be a handy option, allowing the user to create multiple unique databases within the application. But what if the user uses a single dedicated database? In this case the default blank document would need to be closed, and the user must manually navigate to and open a previously saved database from the File Menu. With a bit of research I figured out how to make this behavior (blank or previously saved) a user defined option. It is now available within the application Preferences.
By default Core Data applications will not display data that was input and saved using a previously created data model. Data Models consist of Entities, Attributes, and Relationships. Using the concept of Credenza as an example: Clients would be a cumulative Entity, and a specific client’s email address would be an Attribute. Relationships create interaction between Entities.
This excellent documentation was a tremendous help. The implementation worked perfectly. The bottom line is that as application development continues to progress, I am no longer at risk of data incompatibility issues. Incidentally the database format is SQLITE, and all saved documents maintain Credenza as the default application by way of a custom file extension (.credenza).
This project is an example of designing and building a useful customized application, all made possible by taking advantage of Core Data’s robust capabilities and simplicity.
Cocoa, Core Data, Migration and Versioning