Mac SDK:使用最新的SDK,但确保与早期部署目标的向后兼容性

Fra*_* R. 14 macos sdk xcode cocoa xcode4

与Apple一起更新OS X时一样,最新的XCode 4.4转储旧的(10.6)SDK,我发现自己需要使用10.7 SDK(或者我认为是10.8)并将我的部署目标设置为10.6以保持兼容性.

我更喜欢链接到较旧的SDK,因为我知道我不能错误地引入对尚不存在的API的调用.当我上次尝试逆向方法时,我发现自己经常做的事情.

我发现自己在做的是我使用XCode中的代码完成功能来选择像NSWorkspace这样的简单类的"正确"调用,然后在开发过程中一切正常,我忘了它,当我发布新版本时:Kaboum!整个应用程序在运行时在早期的OS X版本上爆炸; 经常在那些难以到达的地方:-)

或者至少这是我几年前的情况.

当然,到目前为止,有一种方法可以:

  • 确保您不引入部署目标中尚未提供的API调用,即使它们已在SDK中定义

  • 在构建或静态分析时检测此类调用

我确定我错过了什么,在某个地方的某个地方..请赐教!

最好的祝福,

坦率

Rob*_*ier 8

当然,到目前为止,有一种方法可以:

  • 确保您不引入部署目标中尚未提供的API调用,即使它们已在SDK中定义

  • 在构建或静态分析时检测此类调用

不,那里没有.是的,你应该打开雷达(bugreport.apple.com).如果你愿意,你可以欺骗我:rdar:// 11985733

是的,尽管Apple建议,唯一可行的解​​决方案是复制旧的SDK并链接它们.

我花了很长时间与Xcode团队讨论WWDC 2012上的这个问题.他们一致认为它已经坏了.目前没有计划修复它.升级雷达是我们如何影响Apple对这些事情的影响.

  • 现在的答案是:是的,使用编译器标志`-Wpartial-availability` (4认同)