By Tom Krcha
 
Created
14 March 2012
 

Requirements

 
Prerequisite knowledge

This article is intended for advanced developers with knowledge of Flash Builder or Flash Professional. You'll also need to know how to work with the command line on Mac OS X or Windows.
 

 
 
Additional required other products
 

 
User level

Advanced
 

 
Required products

 
Sample files

One of the issues you run into in game development on the Flash platform is how to combine the numerous SWFs that make up your game into a single SWF for iOS deployment. As an example, Machinarium, a point-and-click puzzle game developed by Amanita Design, has 28 SWF files. When Amanita Design used Adobe AIR to produce the iPad version of Machinarium, they needed a way to join the multiple SWF files into one (see Figure 1).
 
Figure 1. Combining multiple SWF files into one to prepare for creating a single IPA file.
Figure 1. Combining multiple SWF files into one to prepare for creating a single IPA file.
In my article Using SWC files to build large Flash and AIR projects with multiple SWF files for iOS, I covered a technique that relies on SWC libraries to address this issue. In some cases, however, you may prefer to keep using SWFs instead of SWC files. If your game will run on Android as well as iOS, for example, your workflow may be more straightforward with SWFs. Remember that on Android, you can load SWF files at runtime, which enables efficient memory usage. On iOS you also have to keep memory usage in mind, especially when you have all your code in one SWF. It is a good practice to separate any assets that do not contain ActionScript (including pictures, videos, and music) into SWF files, which your game can load on demand and then discard when no longer needed.
 
After you've separated out your assets, you still need a way to join the SWFs that do contain ActionScript. In this article, I describe the technique used by David "Oldes" Oliva, lead developer of Machinarium, for joining SWFs together using a REBOL script. For more information on REBOL, visit http://www.rebol.com.
 

 
Steps for combining multiple SWF files into one

Follow these steps to join SWF files in preparation for deploying your game on iOS:
 
  1. The first step is to build the SWFs in Flash Professional or Flash Builder as you would normally, but make each SWF a class. Instead of loading a SWF dynamically via the Loader class, SWFLoader, or a similar mechanism, you'll instantiate the SWF class. Once you join all SWFs together, you will be instantiating its contents, not loading it.
  2. Download and unzip the sample files for this article.
  3. Download and install REBOL/View, the graphical version of REBOL.
  4. Navigate to the samples folder and locate the three scripts that you might want to update to customize for your workflow: compile-and-run.r, Game.bat, and Game.rswf.
  5. If you're interested, you can explore the compile-and-run.r file in a text editor. This is a REBOL script that does some initial set up and runs Game.bat.
  6. Open Game.bat in a text editor and edit the path to your AIR SDK so that it points to your installed version of AIR Debug Launcher (ADL). The file contains the following lines:
cd ./public/ adl Game.xml
Change them as follows:
 
cd ./public/ [/path/to/your/AIR_SDK]/bin/adl Game.xml
  1. Open Game.rswf in a text editor and update the import-swf lines to reflect the SWFs you want to combine. The initial example joins four SWF files:
import-swf %assets/Preloader.swf no show import-swf %assets/ExampleLevel1.swf no show import-swf %assets/ExampleLevel2.swf no show import-swf %assets/ExampleMain.swf no show
  1. Run the REBOL script. (Change the path to the rebol command below to where you installed it.)
/path/to/REBOL/rebol compile-and-run.r
Note: If you see a permission denied error when you try to run any of the executable files, make sure the files have the proper permission settings. You can set the permissions using chmod , for example (substitute 755 or 775 for a more restrictive setting):
 
chmod 777 filename.bat
  1. When the script completes, the SWF will open in Flash Player and you can use the adt tool included in the AIR SDK to compile the final IPA file for iOS. For example, you can run the following at the command line, replacing the bracketed sections as appropriate:
[AIRSDK]/bin/adt -package -target ipa-app-store -provisioning-profile [YOURPROFILE].mobileprovision -storetype pkcs12 -keystore [YOURCERTIFICATE].p12 -storepass [CERTIFICATE_PASSWORD] [FINALAPP].ipa air-app-descriptor.xml [SWFTOCOMPILE].swf

 
Where to go from here

If you think the SWC approach may better meet your needs, see my article Using SWC files to build large Flash and AIR projects with multiple SWF files for iOS. To learn more about REBOL, see the REBOL Quick Start. If you are interested in the main rules for Rebol/Flash Dialect (RSWF), Oldes has documented them here. Lastly, if you want to see what a small, independent game development studio can do with the Flash Platform, visit Amanita Design.
 
Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License+Adobe Commercial Rights
 
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License. Permissions beyond the scope of this license, pertaining to the examples of code included within this work are available at Adobe.