如何确定代码运行在DEBUG/RELEASE版本?

285

我正在制作一款处理敏感信用卡数据的应用程序。

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

但是,在最终的应用商店版本中(即在发布模式下运行时),禁用所有这些功能是必不可少的(安全隐患)!

我会尽力回答我的问题,因此问题变成了“这种解决方案路径是否正确或最佳?”

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

#if( IS_DEBUG )  
#define MYLog(args...) NSLog(args)  
#else  
#define MYLog(args...)  
#endif  
12个回答

2
我在尝试弄清楚为什么我的代码在发布版本中没有执行时,找到了这里,而其他答案都没有解决如何使#if RELEASE工作的问题。
我不想在DEBUG模式下发生任何事情,所以我只是使用了#if RELEASE,假设(不正确地)它会正常工作。
#if RELEASE // 在此处执行特定于发布版本的操作 #endif
你可以(至少在XCode 14中)前往“项目”->“组合”->“Swift编译器”->“自定义标志”(见下面的截图)。将RELEASE值添加到发布部分,#if RELEASE将像上面那样工作。
请注意,您不要点击发布旁边的+号,只需双击空白处即可。如果这样做,它将添加一个“任何架构/任何SDK”行,这会导致RELEASE标志无法正常工作。
正确的版本: enter image description here 正确的版本: 在此输入图像描述

0

不确定我是否回答了您的问题,也许您可以尝试以下代码:

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

你能详细说明一下这个define的作用吗?看起来很不错,但我还是不太明白。__X__通常表示苹果保留的宏,而PRETTY_FUNCTION表示用户生成的内容,因此结果很令人困惑。 - P i
2
xx 是格式字符串,您可以使用任何您想要的,只要与之前的字符串相同即可。您可以使用 __FUNCTION__,但 PRETTY_FUNCTION 打印 Objective-C 方法名称。这个链接很好地解释了它:https://dev59.com/wHVC5IYBdhLWcg3wbQbA。 - Zitao Xiong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接