如何仅在 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 模式下执行特定功能的主要内容,如果未能解决你的问题,请参考以下文章
设计模式 - 如何仅在某些情况下强制执行对象属性(构建器模式,依赖注入)