Iterative Design/Development with Flash Catalyst and Flash Builder

September 8th, 2009 by ryanstewart

As I talk to more and more designers and developers one of the things that comes up is whether Catalyst makes it easier or harder to do iterative design on a project. The workflow most people have seen is you start in a tool like Illustrator, Photoshop, or Fireworks; create a high fidelity visual design in that tool; and then import that into Flash Catalyst where you can start turning that artwork into visual components. I think that’s a pretty powerful workflow for designers of all stripes.

The issue that comes up most is that not everyone starts that way. In a lot of cases people create a skeleton application first in Flash Builder and then want to apply visual designs later. Themes are one option, and we’ve got a new Theme chooser in Flash Builder to help with that, but one of the great things about Flex 4 is that it’s easy to create very customized, unique skins for components. So without the ability to do round-tripping between Flash Catalyst and Flash Builder in the 1.0 version of Catalyst, what can designers do to iterate on a design alongside a developer? The answer is the Flex Library project.

I realize this is far from an ideal workflow, but I think for Flash Catalyst 1.0 and Flash Builder 4 it works okay and provides a way for teams of designers and developer to iterate together without stepping on each other’s toes.

Core Steps

  • Export assets to a Library Project in Flash Catalyst.
  • Import that Library Project as a Library Project into Flash Builder
  • Link the imported Library Project to your main Flash Builder project.
  • Make design changes in Flash Catalyst.
  • Re-export the Library Project and import it by overwriting the old Flash Builder Library Project
  • Your main Flash Builder project will be updated with the new design.

Detailed Walkthrough

So let’s say a developer has an application that they’ve created with the default components. I’ll start with something really basic:

<s:Button x="19" y="78" label="Button"/>
<s:HSlider x="210" y="31" />
<s:List x="152" y="108">
 
</s:List>
<s:TextInput x="10" y="31"/>
<s:Button x="152" y="77"/>

iterate_design_01

Clearly a great RIA in the making. But I take a lot of pride in my work and I want to use the power of Flex 4 to create a unique set of skins and components that stand out. In the ideal workflow I would be able to give this to my designer, they would open it in Catalyst, create some great components, and send it back to me. I can’t do that, but I can do some design in Catalyst and then bring in those designs in a special way. First I’ll create some great looking components in Catalyst by starting with a blank project and importing Illustrator/Photoshop assets, and then convert them to components.

itreate_design_03

After I turn all of my artwork into interactive components I am going to pop over to the library panel and start giving them usable names. By default Catalyst calls the created components “Button1″, “Button2″, “ItemRenderer1″, etc. I give them names that will mean something to the developer and help differentiate components.

iterate_design_02

Once I do that, all I have to do is export my library file into an FXPL file by right-clicking anywhere in Catalyst’s Library panel. With that done, I have the ability to import that FXPL file as a new Flex Library project in Flash Builder.

iterate_design_04

That library file contains all of the assets and skinned components I just created. In order to use those, I simply add that project to my main Flex project from the project Properties->Flex Build Path and I can start changing the skinClass attribute for my components to point to those new files.

<s:Button x="19" y="78" label="Button" skinClass="components.BlackPushButton"/>
<s:HSlider x="210" y="31" skinClass="components.MetallicSlider"/>
<s:List x="152" y="108" skinClass="components.GreyDataList">
 
</s:List>
<s:TextInput x="10" y="31" skinClass="components.MetallicTextInput"/>
<s:Button x="152" y="77" label="Button" skinClass="components.GreyButton"/>

iterate_design_05

But now the client tells us they want that black button to be an interstate sign (who knows). I have that asset in Illustrator so I can open my original Flash Catalyst file that I created the library project in and I have a couple of options. I could create a new button with a unique name or I can change the original button component using the round-tripping between Illustrator. I’ll do the latter.

iterate_design_06

Once that’s finished toggle back to the Library panel and re-export the assets making sure to overwrite the original file. Then switch back to Flash Builder and go through the import process again. By default, it will try to create a new project and just append “_1″ to the project folder. Make sure you overwrite your project by removing that. You’ll get a warning, but that’s fine.

This is where the magic happens. Without doing anything, you can run your application and you’ll automatically have those new assets. Any event handlers you’ve wired up to the button or any code you’ve created that use that button will remain unchanged; only the button graphics will change. Because the projects are linked, any change we make to our imported assets filter down to our core project.

The designer can use that original Catalyst file and the re-export process to make modifications to any asset we want. They can also create new components from artwork, create custom components, or add image assets and all of those will be available to the developer inside of that main Flex project.

iterate_design_07

This is all still kind of a work in progress, but I think this will work for some of the design-develop problems people need to solve. While the 1.0 version of Flash Catalyst will have some limitations around the Flash Builder workflow, there are still a lot of basics there that can be built on. If you’ve tried this or have other ideas on how this could work, definitely drop me an email. I’d love to hear feedback.

Posted in Flash Catalyst, Flex, flash builder

10 Responses

  1. Steven Peeters

    Hey Ryan,

    That’s really a great idea. However, I still see a big issue here. I think that if you work like this, it would actually be ideal for creating a company styled library (kind of like a theme). But you do have to recreate the entire layout in Flash Builder, which is a bummer, ’cause Catalyst actually does that much faster.

    And I don’t know if catalyst would have any problems with that, but maybe it would be better to have the library project as an RSL? That way, you don’t need to import it again.

    Just my 2 cents,
    Steven

  2. ryanstewart

    Hey Steven, unfortunately there isn’t a way to do RSLs, but that’s a good idea.

    I agree that Catalyst is really well suited for doing the layout, but I think this still works. You can do the layout in Catalyst, import that project as a Flex project to Flash Builder, then use the steps above.

    It’s far from perfect and a few people have already pinged me with some issues, but it might still work for the use case of doing layout in Catalyst.

    Now *changing* layout wouldn’t work well at all.

    =Ryan
    ryan@adobe.com

  3. Steven Peeters

    Hey Ryan,

    Since we are somewhat brainstorming here. You know what would be the perfect idea? Flash Catalyst should be the design editor in Flash Builder. That would be a combination that rocks!

    Steven

  4. Todd

    I’m not really sold on the fact the designers are going to be using Catalyst. I’m pretty sure in 90% of the cases (maybe not in small web-shops where 1 man teams rule the roost) — especially from what I’ve seen at many big firms, it’s going to be up to the developer to be managing all the assets in Catalyst once the designer is done with the Illustrator/Photoshop comps.

    In fact, I’m pretty sure a new skill set developers is going to have to do is working in these programs (Illustrator/Photoshop) to make sure the layers are in order to even import in to Catalyst?

    Am I missing something?

  5. Tom Lee

    @Todd – I agree with you here. We’ve been evaluating Catalyst at my company, and the consensus so far seems to be that it would be used by our UI Developers rather than our Designers. We’d like to keep our designers focused on the product and user experience, not building prototypes. I’m not sure we have a logical place for Catalyst in our workflow – all our developers work without the aid of design view anyway.

  6. Erik

    At our company we usually do the ’skeleton’ way. We use a lot of custom components with custom skins. The skins I create are the ‘developer’ style ones, the required components in horizontal or vertical order.

    Is there a way for a designer to edit that bare skin in catalyst? I think they wouldn’t mind copying the mxml to catalyst and the edit it and replace.

    Greetz Erik

  7. Andrew Traviss

    The workflow you’ve described sounds more like it should fall into the domain of the CSS design view, if the CSS design view supported custom components.

    If you were using Catalyst in the described fashion, I doubt any company would be able to justify buying the additional licenses and adding another layer to the technology stack.

  8. Erik

    The CSS would not give us enough freedom. As a developer I just put the required skin parts on the stage. The designer should have full freedom to create the skin.

  9. Tim

    Hi Ryan, just trying this out with the Beta 2 products and found a couple of things. First (not consistent with your example), the “components” package doesn’t seem to appear in the compiled SWC – the components behave as if they are in the default package. (In the package explorer, under Referenced Libraries, I see my component with an .abc suffix.) Second, although setting skinClass inline works, setting it within separate CSS file fails.

    Good start though.

  10. ryanstewart

    @Tim, I haven’t tested this with Beta 2, so thanks for the heads up!

    =Ryan

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.

About Ryan Stewart – Rich Internet Application Mountaineer

A blog by a Platform Evangelist at Adobe covering Adobe's RIA platform. Includes posts about Adobe Flex, Adobe AIR, ColdFusion, LiveCycle, Thermo, and everything in between.