Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Determine if swf is in a "debug" player or mode

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 to setup different build targets (release/debug) and that you can use something like CONFIG::debug for #ifdef style inclusion of code at compile time.

I'm imagining something like System.isDebug() but can't find anything. I want to use this because there's debug functionality in my app that I definitely don't want to be available in a production environment.

like image 779
aaaidan Avatar asked Oct 09 '08 00:10

aaaidan


1 Answers

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:

  • Was the SWF built with the -debug switch (has debug symbols compiled in)?
  • Is the Flash player a debug player (has the ability to display errors, etc)?

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();
    }
  }
}
like image 194
TheBrain Avatar answered Nov 17 '22 07:11

TheBrain