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 听起来不错,但我如何在代码中检测到它?的主要内容,如果未能解决你的问题,请参考以下文章

Obj-C 的 Swift 桥接头

obj-c 项目错误中的 PagingMenuController swift 库

Obj-c:从另一个对象分配一个子类对象并释放

Obj-c - 数字表格单元格降序而不是升序?

Obj-C - 展开选定的单元格,取消选中时折叠

obj-c AFNetworking 2.0 POST 请求不起作用