我正在做一个处理敏感信用卡数据的应用程序。

如果我的代码在调试模式下运行,我想将这些数据记录到控制台并进行一些文件转储。

然而,在最终的appstore版本(即当它运行在发布模式时),必须禁用所有这些(安全隐患)!

我会尽力回答我的问题;所以问题就变成了“这个解决方案是正确的还是最好的方法?”

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

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

当前回答

在“Apple LLVM -预处理”下检查项目的构建设置,“预处理宏”用于调试,以确保正在设置调试-通过选择项目并单击构建设置选项卡来完成此操作。搜索DEBUG并查看是否确实设置了DEBUG。

不过要注意。您可能会看到DEBUG被更改为另一个变量名,例如DEBUG_MODE。

然后在源文件中有条件地为DEBUG编码

#ifdef DEBUG

// Something to log your sensitive data here

#else

// 

#endif

其他回答

大多数回答说如何设置#ifdef DEBUG,没有人说如何确定调试/发布构建。

我的意见:

编辑方案->运行->构建配置:选择调试/发布。它可以控制模拟器和测试iPhone的代码状态。 编辑方案->存档->构建配置:选择调试/发布。它可以控制测试包应用程序和app Store应用程序的代码状态。

在xcode 7中,在Apple LLVM 7.0下有一个字段-预处理,称为“Preprocessors Macros Not Used In Precompiled…” 我把DEBUG放在DEBUG前面,它为我使用下面的代码:

#ifdef DEBUG
    NSString* const kURL = @"http://debug.com";
#else
    NSString* const kURL = @"http://release.com";
#endif

不确定我是否回答了你的问题,也许你可以试试这些代码:

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

为使用Kotlin多平台ios调试模式的人添加此功能。下面是确定构建是调试还是发布的方法。

if (Platform.isDebugBinary) {
     NSLog(message ?: "", "")
}

在“Apple LLVM -预处理”下检查项目的构建设置,“预处理宏”用于调试,以确保正在设置调试-通过选择项目并单击构建设置选项卡来完成此操作。搜索DEBUG并查看是否确实设置了DEBUG。

不过要注意。您可能会看到DEBUG被更改为另一个变量名,例如DEBUG_MODE。

然后在源文件中有条件地为DEBUG编码

#ifdef DEBUG

// Something to log your sensitive data here

#else

// 

#endif