2009-03-28 11 views
7

Recentemente mi sono imbattuto in una situazione imbarazzante con alcune codifiche Flash in cui dovevo accidentalmente inviare ai client una build in cui non tutte le variabili e le variabili di debugging erano disattivate. (Stava mandando richieste al debug invece del server di rilascio, ecc ...)Configurazioni di rilascio/debug con Flash + AS3

Parte di questo era una cattiva organizzazione del codice da parte mia; L'ho risolto.

Tuttavia, Flash non sembra consentire a uno di configurare configurazioni di compilazione diverse e le impostazioni di Compilazione Actionscript ospitano una varietà di interruttori disposti in modo tale da dimenticare di selezionare/deselezionare qualcosa (OMG, ho dimenticato di disabilitare il debugger supporto!) potrebbe semplicemente accadere, come ha fatto con me. In ogni caso, trovo che saltare manualmente tra la mia configurazione di rilascio e il debug di configurazione sia facile da rovinare.

Quindi, altri sviluppatori, quali tecniche utilizzate per saltare a prova di errore tra la vostra configurazione di test e la configurazione di build che inviate al vostro capo/clienti/chiunque?

So che probabilmente dovrei rallentare ma preferirei impostare qualcosa su dove potrei semplicemente capovolgere un interruttore. Sto solo tornando in Flash dopo una lunga interruzione (Flash MX + un po 'del 2004).

Oh, e sono a conoscenza dell'inutilità di disabilitare il supporto per il debug e di impostare le password di importazione e tutto il resto, il mio obiettivo è quello di mantenere gli script kiddies fuori dal mio progetto. I decompilatori vincono così tanto .....

In ogni caso, grazie!

risposta

5

Io uso un ambiente di classe, come questo:

public class MyEnvironment { 
    public static const DEBUG:Boolean = true; 
    public static const SERVER:String = 'localhost'; 
    // More here 
} 

Importa questo nella vostra classe principale di ActionScript, e assicurarsi che tutte le funzioni di supporto fare riferimento a esso. Ad esempio, le funzioni del debugger devono essere eseguite solo se MyEnvironment.DEBUG è true e le funzioni di rete devono inviare richieste a MyEnvironment.SERVER.

Nel mio setup, salverei questo come MyEnvironment.as. (Ovviamente, il nome della classe sarebbe diverso nella vita reale.) Vorrei anche salvare le copie come MyEnvironment.as-debug e MyEnvironment.as-release; quest'ultimo avrebbe impostazioni diverse. Quindi, se ho bisogno di una build di rilascio, il mio script di costruzione copia MyEnvironment.as-release a MyEnvironment.as (sovrascrivendo l'originale) e ricompila. Questo caricherà tutte le mie impostazioni di rilascio nella mia classe ActionScript principale; opposto se eseguo lo script per una build di debug.

+0

Ok. È quindi possibile controllare le impostazioni di pubblicazione di ActionScript 3 nel codice? Grazie per la risposta! –

3

Una buona idea è quella di utilizzare un suggerimento visivo quando si è in modalità di debug. Quando il flag DEBUG è impostato, visualizza un TextField con 'modalità di debug' e magari il numero di versione, o qualcosa del genere, in uno degli angoli dello schermo.

Quando esegui i test finali prima di inviarlo a un client, vedrai che ti sei dimenticato di disabilitare la modalità DEBUG.

Dipende sicuramente da come strutturate il vostro progetto. Come descritto in un'altra risposta, è opportuno archiviare il flag in una classe 'globale' di alto livello accessibile attraverso l'intera applicazione.

9

Se si utilizza Flash CS4, è possibile utilizzare le costanti di configurazione. Li trovi in ​​Impostazioni pubblicazione | Impostazioni ActionScript3.0 ...| Config Costanti

Se è stato aggiunto DEBUG :: LETTORE quindi è possibile utilizzare il codice come questo:

config namespace DEBUG; 

//... code here ... 

DEBUG::PLAYER 
{ 
    trace("Player state here"); 
} 

Ora si può semplicemente cambiare la costante tra vero e falso.

+0

Fantastico! Tuttavia, sembrerebbe che questo tipo di cose non siano disponibili in CS3, giusto? –

+0

Sì, sono abbastanza sicuro che sia una nuova funzionalità in CS4. Ma non sono sicuro al 100%. –

0

Uso un flashvar denominato "TestingEnvironment". All'avvio dell'applicazione, eseguo il check in loaderInfo.parameters per vedere se è impostato su 'true' (un letterale stringa, non un booleano) e, in caso affermativo, imposto una var debugMode statica pubblica su un'istanza di classe Environment globale su true. Quindi tutte le mie classi possono vedere che siamo in un ambiente di test e agiranno di conseguenza.

Inoltre, poiché utilizzo codice di pagina diverso da incorporare per test e produzione, mi aspetto che il flashvar non finisca mai nella pagina di produzione incorporata. E se lo fa, è semplice da disattivare, nessuna ricompilazione necessaria.