Obj-C,SandboxModeFlag 听起来不错,但我如何在代码中检测到它?
Posted
技术标签:
【中文标题】Obj-C,SandboxModeFlag 听起来不错,但我如何在代码中检测到它?【英文标题】:Obj-C, SandboxModeFlag sounds great but how do I detect it in code? 【发布时间】:2011-02-01 14:47:04 【问题描述】:我在谷歌上搜索了一种从我的发布版本中隐藏我的 NSLog 语句的方法,并找到了这个 thread
评论中提到的地方...
defaults write my.bundle.identifier SandboxModeFlag -bool YES
这听起来很棒,它不依赖于我忘记删除我自己的标志,说我处于调试模式。
谁能告诉我如何在代码中检测SandModeFlag
?
【问题讨论】:
【参考方案1】:该命令行设置了 NSUserDefaults,因此可以读取:
[[[NSUserDefaults] standardUserDefaults] boolForKey:@"SandboxModeFlag"]
Here's a link to the Apple documentation.
编辑
详细地说,这使您能够在不使用其他构建的情况下打开和关闭日志记录。当然,在运行时检查这一点可能是不可取的开销。
如果可以接受使用不同的构建,那么宏就是前进的方向。 Here's a post describing your situation,有一些很好的例子。
【讨论】:
这确实回答了这个问题,但我不想每次或在每个屏幕上都阅读NSUserDefaults
文件,我会给你一点时间来回复。跨度>
我在一篇文章中添加了一个链接,该链接描述了如何在您的情况下使用宏。
这是你的意思吗?定义 DebugLog(s, ...) NSLog((@”%s %s:%d” s), func, basename(FILE), LINE, ## VA_ARGS);
不,从哪里来的?如果您包含博客文章中描述的代码,您实际上可以将 NSLog 替换为您只希望在调试版本中记录的 DLog,以及您始终希望它记录的 ALog。【参考方案2】:
我个人有两个构建目标:调试和发布。该代码不会直接使用 NSLog,而是使用 DGBTRACE(xxx) 之类的宏,它会在调试版本中映射到 NSLog,而在发布版本中则不映射。
例子:
#if defined(DEBUG)
#define DBGTRACE(x, ...) NSLog(@"DBG %s(%d): %@", __FILE__, __LINE__, [NSString stringWithFormat:x, ## __VA_ARGS__]);
#else
#define DBGTRACE(x, ...)
#endif
void func(void)
int val1 = 27;
NSString *val2 = @"james";
DBGTRACE(@"val1=%d, val2=%@", val1, val2);
【讨论】:
我从未在 xcode 中创建过宏,您提供了一些关于我如何使用它并确定调试和发布的详细信息? 已更新我的答案,以举例说明您如何做到这一点。此方法还打印出当前的源文件名和代码行,这通常是有价值的信息。当然,您需要在调试版本中定义 DEBUG,在发布版本中未定义。以上是关于Obj-C,SandboxModeFlag 听起来不错,但我如何在代码中检测到它?的主要内容,如果未能解决你的问题,请参考以下文章