【问题标题】:Backward compatibility for OSX AppsOSX 应用程序的向后兼容性
【发布时间】: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 进行编译,但是要修复的错误太多了如果我能避免它就更好了。

有什么想法吗?

【问题讨论】:

    标签: objective-c macos cocoa sdk app-store


    【解决方案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 中找到。

    【讨论】:

      猜你喜欢
      • 2015-07-22
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      • 1970-01-01
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多