1

我正在尝试构建一个自动化测试来检查在当前部署目标之外调用的方法是否得到正确处理。这是一个具体的例子:

我的应用程序设置为使用 Mac OS X 10.8 sdk,部署目标设置为 10.6。

我经常使用 setTimingFunciton: 方法。它是在 10.7 中引入的。

[[NSAnimationContext currentContext] setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];

在大多数情况下,我通过检查正确地限制了这个方法调用,以确保该方法存在或者操作系统是正确的版本或更高版本。但我错过了一个。而且它在一个很少执行的代码路径中,所以即使是 beta 测试也没有注意到它。它只是在很久以后才回来咬我。

我想构建一种自动化的方法来测试可以部署在集成服务器或其他此类脚本回归测试上的此类事物。似乎必须有一种方法可以自动检查。

不幸的是,使用 10.6 sdk 重新编译会导致许多错误,主要是由于“现代 obj-c”。当然,这些并不是使用 10.8 sdk 时的错误。小心,我可以挑出错误并找到方法调用——但这过于复杂和手动。

有谁知道一种静态检查这类事情的方法,而无需人工挑选数百行错误错误?

PS我读过这个: 如果部署目标<基本sdk,如何检查是否使用了不可用的方法? 这建议使用另一个手动流程来挖掘它们。问题是,人类的方法让我失望了。我错过了一个。我想要一些更确定的东西。

4

2 回答 2

0

这是一个想法。undef 并重新定义可用性宏,以便它们包含 Clang 将反对但不会影响程序流程的内容。运行 Clang。

于 2012-06-22T13:38:34.190 回答
0

我已经使用了这个答案中的技术,并且效果很好。完全自动,不会遗漏任何东西。

于 2012-06-22T14:01:49.787 回答