在部署目标之外查找sdk使用情况的实例

时间:2012-06-22 00:21:43

标签: xcode macos sdk deployment-target

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

我的应用设置为使用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时的错误。小心,我可以挑选错误并找到方法调用 - 但这过于复杂和手动。

有没有人知道如何静态检查这些不涉及人类挑选数百行误报的事情?

P.S。我读过这个:How to check if not available methods are used if deployment target < base sdk? 建议使用另一个手动流程来挖掘它们。问题是,人类的方法让我失望了。我错过了一个。我想要更确定的东西。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我使用了this answer中的技术并且效果很好。完全自动,它不会错过任何东西。