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.810.9 并且 Deployment Target 设置为 10.6 的情况下,我设法让它编译良好。够了吗?


P.S.我也尝试过将 Base SDK 设置为 10.6 进行编译,但是要修复的错误太多了如果我能避免它就更好了。

有什么想法吗?

【问题讨论】:

【参考方案1】:

是的;使用 10.9 SDK 和 10.6 的部署目标可以正常工作。

您可能会发现必须在运行时确定的条件代码路径,可能基于respondsToSelector,这需要一些#pragmas 才能成功编译。

【讨论】:

能否根据系统版本使用#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 应用程序的向后兼容性的主要内容,如果未能解决你的问题,请参考以下文章

使用 Core Data 时的向后兼容性

使用 iOS 4.0 库时的向后兼容性

如何保持从 Blender 导出的 Three.js JSON 文件的向后兼容性

Android Studio 上的向后兼容性 (AppCompat)

为新指令集扩展优化编译的代码的向后兼容性

从 BLE v4.2 到 4.0 的有效载荷大小的向后兼容性