OSX 应用程序的向后兼容性
Posted
技术标签:
【中文标题】OSX 应用程序的向后兼容性【英文标题】:Backward compatibility for OSX Apps 【发布时间】:2014-06-16 11:12:44 【问题描述】:好的,这是我的情况:
我在 10.9(Mavericks)机器上安装了 Xcode 5.1.1 我想构建我的应用,使其在 10.6 及更高版本上运行 已安装 SDK:10.6、10.8、10.9我必须做些什么才能确保它在应用商店中显示为“10.6 及更高版本”兼容?
在 Base SDK 设置为 10.8
或 10.9
并且 Deployment Target 设置为 10.6
的情况下,我设法让它编译良好。够了吗?
P.S.我也尝试过将 Base SDK 设置为 10.6
进行编译,但是要修复的错误太多了如果我能避免它就更好了。
有什么想法吗?
【问题讨论】:
【参考方案1】:是的;使用 10.9 SDK 和 10.6 的部署目标可以正常工作。
您可能会发现必须在运行时确定的条件代码路径,可能基于respondsToSelector
,这需要一些#pragma
s 才能成功编译。
【讨论】:
能否根据系统版本使用#pragma
条件来判断是否使用某种基础方法?我不想检查是否应该在运行时调用某个方法...【参考方案2】:
部署目标定义了您的应用在运行时所需的最低操作系统版本。 Base SDK 定义了编译时可用的 API 功能级别。
因此,在构建可在 10.6 及更高版本上运行的应用程序时,您可以使用 10.9 作为基础 SDK。 当您的应用在 10.6 机器上运行时,您只需确保避免使用 10.7/10.8/10.9 API 的代码路径。
正如木马已经指出的那样,您可以使用respondsToSelector:
来检查某个类/方法是否可用。
另一种方法是使用 NSAppKitVersionNumber:
if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_8)
最新 SDK 的 NSAppKitVersionNumber 常量可以在 AppKit Release Notes 中找到。 更多详细信息可以在 Apple 的SDK Compatibility Guide 中找到。
【讨论】:
以上是关于OSX 应用程序的向后兼容性的主要内容,如果未能解决你的问题,请参考以下文章
如何保持从 Blender 导出的 Three.js JSON 文件的向后兼容性