如何仅在 DEBUG 和 AdHoc 模式下执行特定功能

Posted

技术标签:

【中文标题】如何仅在 DEBUG 和 AdHoc 模式下执行特定功能【英文标题】:How to execute a specific function only in DEBUG and AdHoc modes 【发布时间】:2012-06-21 05:53:59 【问题描述】:

我想做的是一个带有动作方法的简单按钮,这个按钮被初始化、创建、分配给它的动作方法,并且只在调试和 AdHoc 模式下显示。因此,作为开发人员或测试人员,我可以看到按钮,但在发布中,客户端将无法看到该按钮。

到目前为止,我所做的如下:

-在我的project-->Build Settings 选项卡中,我在 Debug 和 Adhoc 中将 Debug 值设置为 1,如下所示:

-然后我打开了prefix.pch文件,在那里,我被阻止了,我不知道该怎么办。

基本上,我的操作方法是这样的:

UIButton btnSwitch=[[UIButton alloc]init];

//Etc...

上述代码应在特定文件中调用(应包含按钮的 UIViewController 类)。

我该怎么做,我的意思是,我如何告诉我的应用程序仅在 DEBUG 和 Adhoc 模式下执行特定文件中的代码。

提前感谢。

【问题讨论】:

此链接可能对您有所帮助。 ***.com/questions/7252176/ios-detect-ad-hoc-from-code 【参考方案1】:

我不确定您对 prefix.pch 文件的看法。暂时不要管它。

您可以在视图控制器内的代码中创建一个按钮,并像这样有条件地执行此操作。

#ifdef DEBUG
    UIImage *buttonImage = [UIImage imageNamed:@"btnSwitchImage"];

    btnSwitch = [UIButton buttonWithType:UIButtonTypeCustom];
    //frame size given as a point of reference only but when you create a button this
    //way you have to set the frame otherwise you will see nothing.
    btnSwitch.frame = CGRectMake(0.0f, 0.0f, buttonImage.size.width, buttonImage.size.height);
    [btnSwitch setBackgroundImage:buttonImage forState:UIControlStateNormal];

    [btnSwitch addTarget:self action:@selector(buttonAction:)forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:btnSwitch];
#endif

【讨论】:

【参考方案2】:

您可以将代码包装在守卫中:

#ifdef DEBUG
    // Code here to only run when DEBUG is defined
#else
    // Code here to run only when DEBUG is not defined
#endif

// code here to execute regardless of the state of DEBUG

另外 - 如果您使用的是 Xcode 4,您不需要自己定义 DEBUG,它已经为您完成了。您可以通过查看方案来控制是否设置。

默认的 Xcode 方案是针对设置调试标志的调试配置构建的。如果您想创建一个设置此构建标志的 AdHoc 方案,则基于 Debug 配置添加一个 AdHoc 配置,然后基于该配置创建一个方案。

【讨论】:

感谢您的回复,我会测试您的解决方案并回复您:) 嗨,这个解决方案是否也适用于Adhoc 模式?如果没有,我应该提什么directive?谢谢:) 正如我所说的——根据调试配置创建一个名为 AdHoc 的新配置,然后在此基础上创建一个新方案。 你能描述一下步骤吗,我应该在哪里设置 Adhoc,Debug 配置在哪里? 在 Swift 中 #ifdef 现在只是 #if。指令保持不变。

以上是关于如何仅在 DEBUG 和 AdHoc 模式下执行特定功能的主要内容,如果未能解决你的问题,请参考以下文章

设计模式 - 如何仅在某些情况下强制执行对象属性(构建器模式,依赖注入)

[FIRApp 配置] 在 iOS 上是不是以 DEBUG 模式发送统计信息?

执行计划--Adhoc和Prepare

如何在 iOS AdHoc 构建上调试 Firebase

C# Debug模式下才执行的语句

代码仅在调试模式下执行