The Briefs toolkit was created for rapidly building & iterating design concepts. It allows one to quickly prototype those concepts and run them on iPhone OS devices. These prototypes run directly on the phone, like actual apps, but require much less time and code to produce than a prototype built using only the native APIs. Less code means faster design cycles followed by more a efficient development cycle.
The purpose of Briefs is to create better apps that have a tested interaction before you begin development. Unlike traditional mockups, a brief is used just like an actual app. Thinking about the interaction design will ensure a more thought out experience for your users.
A brief is a single binary XML file that contains the structure and layout of your concept. All resources, including image data are bundled inside of a single .brieflist document. Briefs are image-based allowing you define images for screen and control backgrounds. This allows you to quickly go from Photoshop mockup to running prototype in hours instead of days.
The logical structure of a brief is broken down into scenes and actors. Using a hierarchy of these objects, one can define an entire application flow and position controls (and their associated graphics) into a designed layout.
A brief may be shared in a number of ways, but the most common is to publish your brief in a briefcast. A briefcast, much like its semantic sibling, is a container that holds references to one or more briefs. Just as a podcast is used to publish and distribute music, so your briefcast can be used to distribute briefs. More information on how to share briefs can be found here.
A scene is the fundamental building block representing the entire screen of the device. It has an image property that defines the background of the scene. Each scene contains a set of controls, called actors. These actors are responsible for movement between scenes, instead of an explicit ordering of the scenes themselves. This allows for non-linear flows and pathways through the brief.
It is easy to think of a scene like a slide in a presentation. However, this metaphors breaks down when you consider that a series of scenes, not just one can be used to denote a user function. A scene represents a particular state in a given configuration, not the entire configuration.
As mentioned above, an actor belongs to a scene. Each actor represents a control that accomplishes a particular task for the user. Often an actor will merely transfer the user to another scene. Actors can perform actions on themselves or other actors as well. A detailed listing of every action an actor can perform is given in the authoring section of this document.
Actors must be positioned and sized according to their scene’s coordinate system. The top left corner of a scene represents (0,0). There sized is defined as a rectangular area with pixel precise coordinates. When a scene loads, there are a host of properties that can be defined on actor which effect its presentation. For example, actors can be hidden, scrollable or disabled at load. To find out more, visit the “Building Briefs” section of this document.
A briefcast is a way to share your briefs amongst colleagues or publish it out to the world. It’s a standard RSS 2.0 feed that uses enclosures (much like podcasts) to embed briefs. The Briefs.app iPhone application allows you to read these feeds and download the embedded briefs onto your device. When designing your brief, you can use a briefcast to transfer new versions of the brief to your device. Likewise, when conducting user tests, a briefcast allows your testers to monitor progress on an in-progress brief and update their copy when needed.
Briefcasts are a powerful way to distribute your brief and make it accessible to a population of people using the Briefs iPhone application. More information about briefcasts can be found here.
There several components to the Briefs ecosystem. There is the iPhone application, which serves as a mobile library and player for your briefs. To ease in authoring briefs, we’ve created BS, a simple scripting syntax that allows you to rapidly build up and maintain your briefs. The bs command-line tool acts as a parser that compiles the brief into a format that can be sent and stored in the iPhone application. Look here to start authoring your first brief.
Briefs is an open-source library with a liberal license. Along with the source for the iPhone application, there are also several Cocoa libraries that can be easily integrated into a Mac, iPhone or iPad application. Below is a short explanation of each project.
The briefs data format is a crucial component of the Briefs framework. It enumerates each state of your concept along with graphics that support each control. To reuse that file in other applications, a developer can include the Briefs-data framework and easily support both reading and writing of briefs. This is a fully portable Cocoa library that can be used in Mac, iPhone & iPad projects.
The following code snippet will open a brief (aBrief.brieflist in the resource bundle of the app) from a file reference:
// Load the brief into memory
NSString *path = [[NSBundle mainBundle] pathForResource:@"aBrief" ofType:@"brieflist"];
BFSceneManager *manager = [[BFSceneManager alloc] initWithPathToDictionary:path];
// get the total number of scenes
int numberOfScenes = [manager totalNumberOfScenes];
This is the same library used by the Briefs.app iPhone application.
The playback of a brief, including the event dispatch control is embedded in a single Cocoa framework called Briefs-sharedUI. Like Briefs-data, this library is used by the Briefs.app iPhone application to handle briefs playback and control on iPhone OS devices.
One could easily create a skeleton iPhone application that would start a brief upon app launch by adding the following code to the App Delegate:
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
// Hide the status bar
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];
// Load the brief into memory
NSString *path = [[NSBundle mainBundle] pathForResource:@"aBrief" ofType:@"brieflist"];
BFSceneManager *manager = [[BFSceneManager alloc] initWithPathToDictionary:path];
// Construct the view controller and
// initialize the dispatch singleton
BFSceneViewController *controller = [[BFSceneViewController alloc] initWithSceneManager:manager];
[[BFPresentationDispatch sharedBFPresentationDispatch] setViewController:controller];
// add the brief view to the window
[window addSubview:[controller view]];
[window makeKeyAndVisible];
// Cleanup
[manager release];
[path release];
}
1. How do I exit a running brief?
Tap and hold anywhere on the screen for about 1 second, then a dialog will appear.
2. Where is the iPad version?
We have something special planned for the iPad version. Right now Briefs is on sale for half-price until we release the iPad version. When it’s released, it will be a free upgrade (a Universal app) for all existing users.
3. I don’t like BS, is there a more visual editor planned?
There are plans to build a visual, drag & drop style editor for both the iPad and the Mac. However, I’m only one developer and I’m picky about details.
In the meantime, feel free to check out http://giveabrief.com/ to find out how you can download the source and build the visual editor of your dreams. After all, Briefs is open-source software. I even pulled out the code for the file format into it’s own library. Wasn’t that nice?
4. Why are you charging so much? Isn’t it open-source?
Open source on the iPhone does not mean free. In fact, Apple requires anyone who wants to put software on the device without going through the App store to pay $100/year for that privilege. So, that means I get to have a completely open-source app for developers and still make money. Isn’t that dandy?