267 votes

Xcode / iOS: Comment déterminer si le code est exécuté dans la version DEBUG / RELEASE?

Je crée une application qui traite les données de carte de crédit sensibles.

Si mon code s'exécute en mode débogage, je souhaite consigner ces données sur la console et effectuer des vidages de fichiers.

Cependant, sur la version finale de l'appstore (c'est-à-dire quand il s'exécute en mode release), il est essentiel que tout soit désactivé (risque de sécurité)!

Je vais essayer de répondre à ma question du mieux que je peux; La question devient donc: "Est-ce que le chemin de la solution est le meilleur ou le meilleur moyen de le faire?"

 // add `IS_DEBUG=1` to your debug build preprocessor settings  

#if( IS_DEBUG )  
#define MYLog(args...) NSLog(args)  
#else  
#define MYLog(args...)  
#endif  
 

261voto

Damo Points 5382

Vérifiez les paramètres de construction de vos projets pour le débogage afin de vous assurer que «DEBUG» est défini. Pour ce faire, sélectionnez le projet et cliquez sur l'onglet Paramètres de construction. Recherchez 'DEBUG' et vérifiez si DEBUG est en cours de définition.

Onglet Paramètres de construction de mes paramètres de projet

puis conditionnellement le code pour DEBUG dans vos fichiers sources

 #ifdef DEBUG

// Something to log your sensitive data here

#else

// 

#endif
 

93voto

Nick Lockwood Points 23277

Apple inclut déjà un indicateur DEBUG dans les versions de débogage, vous n'avez donc pas besoin de définir les vôtres.

Vous pouvez également envisager de redéfinir NSLog en une opération null lorsque vous n'êtes pas en mode débogage. Ainsi, votre code sera plus portable et vous pourrez simplement utiliser des instructions NSLog classiques:

 //put this in prefix.pch

#ifndef DEBUG
#undef NSLog
#define NSLog(args, ...)
#endif
 

8voto

geowar Points 2120

La réponse de zitao xiong est assez proche de ce que j'utilise; J'inclus également le nom du fichier (en supprimant le chemin du fichier ).

 #ifdef DEBUG
    #define NSLogDebug(format, ...) \
    NSLog(@"<%s:%d> %s, " format, \
    strrchr("/" __FILE__, '/') + 1, __LINE__, __PRETTY_FUNCTION__, ## __VA_ARGS__)
#else
    #define NSLogDebug(format, ...)
#endif
 

1voto

Zitao Xiong Points 498

Je ne sais pas si j'ai répondu à votre question, vous pourriez peut-être essayer ces codes:

 #ifdef DEBUG
#define DLOG(xx, ...)  NSLog( \
    @"%s(%d): " \
    xx, __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__ \  
    )
#else
#define DLOG(xx, ...)  ((void)0)
#endif 
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X