如何检测应用程序是否从Xcode启动?

4

如何检测我的应用程序是从Xcode编译后启动还是从从iTunes下载的软件包中启动?

以下代码似乎不起作用,因为当我从Xcode构建并运行它时,else块总是被执行。

#if (TARGET_OS_SIMULATOR)

#else
    //Xcode did not launch this app
#endif

4
你确定你实际需要的就是这个吗?也许多种配置(调试、发布、生产)可以解决你的问题? - dreamzor
你可以使用https://dev59.com/ym445IYBdhLWcg3wq8Lp来检测是否正在进行调试(这并不完全是你想要的,因为你可以启动它,但从XCode禁用调试)。 - Larme
你的 TARGET_OS_SIMULATOR 测试只是测试是否为模拟器构建。它与如何启动无关。一般来说,正确的答案是一个构建配置,而不是“我是从 Xcode 启动”的测试。 - Rob Napier
2个回答

9

我不认为这个功能有广泛的应用,但是可以通过查看环境变量来实现。特别是在通过xcode启动时OS_ACTIVITY_DT_MODE" = YES

示例:

NSDictionary *environment = [[NSProcessInfo processInfo] environment];
UITextView *v = self.view.subviews.firstObject;

if([environment[@"OS_ACTIVITY_DT_MODE"] boolValue]) {
    v.text = @"xcode attached";
}
else {
    v.text = @"not xcode";
}

注意:

env中的参数是私有的,可能会更改,但env通常是检查此参数的好地方。


我们可以在iOS和OSX目标上都依赖这个吗? - dev4life
3
现在你已经有了一个起点,不妨试一下看看? - Ashley Mills

2
这是我认为最好的解决方案,我在许多应用程序中使用它。 首先,在项目的“Build Setting”中设置一个DEBUG变量,如图片所示。 enter image description here 然后在代码中这样使用它。当应用程序被构建为发布或分发时,#ifdef分支中的代码甚至都不会被编译。
#ifdef DEBUG
    // in debug mode when running off of XCode in debug mode
#else
    // running off of XCode in release mode or downloaded from App Store
#endif

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