我正在制作处理敏感信用卡数据的应用程序 .
如果我的代码在调试模式下运行,我想将此数据记录到控制台并进行一些文件转储 .
但是在最终的appstore版本上(即它在发布模式下运行时)必须禁用所有这些(安全隐患)!
我会尽力回答我的问题;所以问题就变成'Is this solution path the right or best way to do it?'
// add `IS_DEBUG=1` to your debug build preprocessor settings
#if( IS_DEBUG )
#define MYLog(args...) NSLog(args)
#else
#define MYLog(args...)
#endif
8 回答
在“Apple LVM - 预处理”,“预处理器宏”下检查项目的构建设置以进行调试,以确保设置“DEBUG” - 通过选择项目并单击构建设置选项卡来执行此操作 . 搜索'DEBUG'并查看是否确实设置了DEBUG .
但请注意 . 您可能会看到DEBUG已更改为另一个变量名称,例如DEBUG_MODE .
然后在源文件中有条件地为DEBUG编码
有关Swift的解决方案,请参阅SO上的this thread .
基本上 solution in Swift 看起来像这样:
此外,您需要通过
-D DEBUG
条目在Swift Compiler - Custom Flags
部分中为Swift Compiler - Custom Flags
部分设置DEBUG
符号 . 请参阅以下屏幕截图以获取示例:Apple已在调试版本中包含
DEBUG
标志,因此您无需定义自己的标志 .您可能还想考虑在不在
DEBUG
模式时将NSLog
重新定义为空操作,这样您的代码将更加可移植,您可以只使用常规的NSLog
语句:大多数答案说如何设置#ifdef DEBUG并且没有人说如何确定调试/发布版本 .
我的看法:
编辑方案 - >运行 - >构建配置:选择调试/发布 . 它可以控制模拟器和测试iPhone的代码状态 .
编辑方案 - >存档 - >构建配置:选择调试/发布 . 它可以控制测试包应用程序和App Store应用程序的代码状态 .
zitao xiong的回答非常接近我的用法;我还包括文件名(通过剥离 FILE 的路径) .
在xcode 7中, Apple LLVM 7.0 - preprocessing 下有一个字段,称为“预处理器宏未在预编译中使用...”我将 DEBUG 放在Debug前面,它通过使用下面的代码对我有用:
不确定我是否回答了你的问题,也许你可以试试这些代码:
还有一个想法是检测:
DebugMode.h
DebugMode.m
添加到头桥文件中:
#include "DebugMode.h"
用法:
DebugMode.isDebug()
不需要在项目属性swift标志内写一些东西 .