有没有办法告诉(在构建时)我的10.9应用程序是否会在10.8上运行?

时间:2014-03-31 18:16:43

标签: objective-c xcode macos cocoa

我有一个应用程序,我使用10.9 SDK在10.9下开发,我想将它分发给运行10.8的朋友。我知道我不能保证它会在没有找到OS X 10.8系统(可能在虚拟机中)并在那里运行它的情况下工作,但是有什么方法可以检查我没有使用任何仅10.9的API ?或者甚至获得我的应用程序使用的仅10.9的API列表?

我的理解是:

  • “部署目标”不执行此操作 - 这只是设置LC_VERSION_MIN_MACOSX,因此如果您尝试在早期版本的OS X上运行它,它将拒绝启动。

  • “Base SDK”不会这样做 - 这是它编译的API的版本。在较新版本的SDK中添加的某些功能甚至可以在运行时的旧版OS X上使用(例如,NSArray -firstObject)。

Xcode的静态分析非常适合识别我使用的符号(类/方法)的来源,所以看起来这应该很容易,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

" Base SDK"在 legalistic 意义上做你想要的。是的,你可能会得到一些假阴性 - 对于像firstObject这样的方法 - 但比假阳性更好。您可以检查任何报告的不存在的API并输入代码以动态检查(respondsToSelector:)并针对这些情况进行防御性编码,或者如果您必须且确定它们可用,则忽略它们。