Is there a way using Flash (CS3+AS3) to determine if the published swf is running in a debug player or in Flash\'s debug mode?
I\'m aware that Flex provides the ability
Check out this class http://blog.another-d-mention.ro/programming/how-to-identify-at-runtime-if-swf-is-in-debug-or-release-mode-build/
This class provides two pertinent (and different) pieces of information:
The Capabilities.isDebugger only answers the second question - is the user running the Flash Debug player. In your case, to gate portions of your application on a debug build, you want the -debug build check (and then don't deliver -debug builds into production).
Note however, that both these checks are runtime checks. Using conditional compilation (aka CONFIG::debug) around your debug code is still a good idea, as it will ensure that possibly sensitive debug code is NOT delivered in the final SWF, making it as small and secure as possible.
I'm reproducing the referenced code here, in case the blog link ever goes down:
package org.adm.runtime
{
import flash.system.Capabilities;
public class ModeCheck
{
/**
* Returns true if the user is running the app on a Debug Flash Player.
* Uses the Capabilities class
**/
public static function isDebugPlayer() : Boolean
{
return Capabilities.isDebugger;
}
/**
* Returns true if the swf is built in debug mode
**/
public static function isDebugBuild() : Boolean
{
var stackTrace:String = new Error().getStackTrace();
return (stackTrace && stackTrace.search(/:[0-9]+]$/m) > -1);
}
/**
* Returns true if the swf is built in release mode
**/
public static function isReleaseBuild() : Boolean
{
return !isDebugBuild();
}
}
}