【问题标题】:how to detect if app was launched from xcode?如何检测应用程序是否从 xcode 启动?
【发布时间】:2017-06-05 14:49:04
【问题描述】:

如何检测我的应用是在编译后从 xcode 启动还是从从 iTunes 下载的包包启动?

下面的代码似乎不起作用,因为当我从 xcode 构建和运行 else 块时总是会执行它。

#if (TARGET_OS_SIMULATOR)

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

【问题讨论】:

  • 您确定这是您真正需要的吗?也许几种配置(调试、发布、生产)可以解决您的问题?
  • 您可以使用stackoverflow.com/questions/4744826/… 来检测它是否正在调试(不完全是您想要的,因为您可以启动它但禁用XCode 的调试)。
  • 您的TARGET_OS_SIMULATOR 测试只是测试它是否为模拟器构建。它与它的启动方式无关。一般来说,这里的正确答案是构建配置,而不是“我是从 Xcode 启动”测试。

标签: ios objective-c xcode macos


【解决方案1】:

我没有看到它有广泛的用途,但可以通过查看环境变量来实现。即通过 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 目标吗?
  • 现在你已经有了一个起点,也许试试看?
【解决方案2】:

这是我认为是我在许多应用程序中使用它的最佳解决方案。 首先在图片所示部分的项目的“构建设置”中设置一个 DEBUG 变量。

然后以这种方式在您的代码中使用它。在为发布或分发构建应用程序时,#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

【讨论】:

    猜你喜欢
    • 2012-01-15
    • 2015-12-06
    • 2010-10-15
    • 2015-06-27
    • 2016-01-15
    • 2015-01-30
    • 1970-01-01
    • 2019-03-12
    • 2013-04-29
    相关资源
    最近更新 更多