Je crée une application qui traite des données sensibles de carte de crédit.
Si mon code est en cours d'exécution en mode débogage, je souhaite consigner ces données dans la console et effectuer des vidages de fichiers.
Cependant, dans la version finale de l’appstore (c’est-à-dire lorsqu’elle fonctionne en mode release), il est essentiel que tout cela soit désactivé (risque de sécurité)!
Je vais essayer de répondre à ma question du mieux que je peux; alors la question devient 'Ce chemin de solution est-il la bonne ou la meilleure façon 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
Vérifiez les paramètres de construction de votre projet sous "Apple LVM - Prétraitement", "Macros de préprocesseur" pour le débogage afin de vous assurer que "DEBUG" est en cours de configuration. Pour ce faire, sélectionnez le projet et cliquez sur l'onglet Paramètres de construction. Recherchez 'DEBUG' et vérifiez si DEBUG est bien défini.
Faites attention cependant. DEBUG peut être remplacé par un autre nom de variable tel que DEBUG_MODE.
puis conditionnez le code pour DEBUG dans vos fichiers source
#ifdef DEBUG
// Something to log your sensitive data here
#else
//
#endif
Pour une solution dans Swift, veuillez vous reporter à ce fil sur SO.
En gros, la solution dans Swift ressemblerait à ceci:
#if DEBUG
println("I'm running in DEBUG mode")
#else
println("I'm running in a non-DEBUG mode")
#endif
De plus, vous devrez définir le symbole DEBUG
dans la section Swift Compiler - Custom Flags
pour la touche Other Swift Flags
via une entrée -D DEBUG
. Voir la capture d'écran suivante pour un exemple:
Apple inclut déjà un indicateur DEBUG
dans les versions de débogage, vous n'avez donc pas besoin de définir le vôtre.
Vous pouvez également envisager de redéfinir NSLog
en une opération null lorsque vous n'êtes pas en mode DEBUG
. Ainsi, votre code sera plus portable et vous pourrez simplement utiliser les instructions NSLog
classiques:
//put this in prefix.pch
#ifndef DEBUG
#undef NSLog
#define NSLog(args, ...)
#endif
La plupart des réponses ont indiqué comment définir #ifdef DEBUG et aucune d’entre elles ne dit comment déterminer la version de débogage/édition.
Mon avis:
Edit scheme -> run -> build configuration: choisissez debug/release. Il peut contrôler le simulateur et le statut du code de votre iPhone de test.
Edit scheme -> archive -> build configuration: choisissez debug/release. Il peut contrôler l'application du package de test et le statut du code de l'application App Store.
la réponse de zitao xiong est assez proche de ce que j'utilise; J'inclus aussi le nom du fichier (en enlevant le chemin de FICHIER).
#ifdef DEBUG
#define NSLogDebug(format, ...) \
NSLog(@"<%s:%d> %s, " format, \
strrchr("/" __FILE__, '/') + 1, __LINE__, __PRETTY_FUNCTION__, ## __VA_ARGS__)
#else
#define NSLogDebug(format, ...)
#endif
Dans xcode 7, il existe un champ sous Apple LLVM 7.0 - prétraitement, appelé " Macros de préprocesseurs non utilisés dans les fichiers précompilés ... "Je mets DEBUG devant Debug et cela fonctionne pour moi en utilisant le code ci-dessous:
#ifdef DEBUG
NSString* const kURL = @"http://debug.com";
#else
NSString* const kURL = @"http://release.com";
#endif
Encore une idée à détecter:
DebugMode.h
#import <Foundation/Foundation.h>
@interface DebugMode: NSObject
+(BOOL) isDebug;
@end
DebugMode.m
#import "DebugMode.h"
@implementation DebugMode
+(BOOL) isDebug {
#ifdef DEBUG
return true;
#else
return false;
#endif
}
@end
ajouter dans le fichier de pont d'en-tête:
#include "DebugMode.h"
usage:
DebugMode.isDebug()
Il n'est pas nécessaire d'écrire quelque chose dans les propriétés du projet Swift flags.
Xcode 10 +
#if DEBUG
passera dans TOUT développement, construction ad-hoc, périphérique ou simulateur. C'est seulement faux pour une version de l'App Store.
Exemple:
#if DEBUG
print("Not App Store build")
#else
print("App Store build")
#endif
Je ne sais pas si j'ai répondu à votre question, vous pourriez peut-être essayer le code suivant:
#ifdef DEBUG
#define DLOG(xx, ...) NSLog( \
@"%s(%d): " \
xx, __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__ \
)
#else
#define DLOG(xx, ...) ((void)0)
#endif