By Tom Krcha
14 March 2012
14 March 2012
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
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.
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.
Follow these steps to join SWF files in preparation for deploying your game on iOS:
- 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.
- Download and unzip the sample files for this article.
- Download and install REBOL/View, the graphical version of REBOL.
- 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.
- 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.
- 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
- Open Game.rswf in a text editor and update the
import-swflines 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
- Run the REBOL script. (Change the path to the
rebolcommand below to where you installed it.)
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
775for a more restrictive setting):
chmod 777 filename.bat
- When the script completes, the SWF will open in Flash Player and you can use the
adttool 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
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.
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.
More Like This
- Multitouch and gesture support on the Flash Platform
- Designing for a multi-device, multi-resolution world
- Optimizing Flash performance
- Using the Adobe Flash Sprite Sheet Generator
- Optimizing performance for mobile AIR applications
- Using SWC files to build large Flash and AIR projects with multiple SWF files for iOS
- Optimizing content for Apple iOS devices
- Guide for Apple App Store submissions
- Saving state in AIR applications for iOS devices
- Creating mobile projects with the shared assets feature and the Project panel in Flash