2014-03-31 26 views
0

我有一个应用程序,我一直在使用10.9 SDK开发10.9,我想分发给我的朋友谁正在运行10.8。我知道我不能保证它不会在没有找到OS X 10.8系统(可能在虚拟机中)并在那里运行它,但是有什么办法可以检查我没有使用任何仅支持10.9的API ?甚至可以获得我的应用程序使用的10.9-only API的列表?有没有办法告诉(在构建时)我的10.9应用程序是否将在10.8上运行?

我的理解是:

  • “部署目标”并没有这样做 - 这只是设置LC_VERSION_MIN_MACOSX,所以如果你想在OS X的早期版本上运行它,它会拒绝启动。

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

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

+0

我不认为这样的工具存在。我很想被证明是错误的。 –

回答

1

“基础SDK”在合法性意义上做你想要的。是的,你可能会得到一些假阴性 - 对于像firstObject这样的方法 - 但比误报更好。您可以检查任何已报告的不存在的API,并输入代码以动态检查(respondsToSelector:)和防御性代码,或者在必要时忽略它们,并确定它们可用。

+0

我倾向于同意,除了Xcode/Clang在达到一定数量的问题后似乎放弃了,并且对于最初不是用旧的SDK编写的应用程序,可能会有很多假阴性。我的应用程序的一个干净的版本将报告十几个“firstObject”问题,然后保释。 – user3404855

+0

您可以通过'-ferror-limit = 0'来设置错误限制,缺省值为20,0表示无限制(参见[Clang命令行选项](http://clang.llvm.org/docs/UsersManual.html#选项 - - 控制错误和警告的消息))。对于测试,你也可以在'NSArray'上定义一个'#if'类来定义'preObject'前的10.9以消除这些特定的警告 - 在你的项目的'.pch'中包含类别的'.h'等。这并不完美,但是你可以做(​​和一些虚拟机帮助!) – CRD

相关问题