Objective c OSX应用程序的向后兼容性

Objective c OSX应用程序的向后兼容性,objective-c,macos,cocoa,sdk,app-store,Objective C,Macos,Cocoa,Sdk,App Store,好的,我的情况如下: 我在10.9(Mavericks)机器上安装了Xcode 5.1.1 我想构建我的应用程序,使其在10.6及更高版本上运行 已安装SDK:10.6、10.8、10.9 我必须做什么才能确保它在应用商店中显示为“10.6及更高版本”兼容 我成功地将基本SDK设置为10.8或10.9,并将部署目标设置为10.6,使其编译良好。这够了吗 p.S.我也尝试过用Base SDK编译10.6,但是有太多错误需要修复,如果我能避免的话会更好 有什么想法吗?有;使用部署目标为10.6

好的,我的情况如下:

  • 我在10.9(Mavericks)机器上安装了Xcode 5.1.1
  • 我想构建我的应用程序,使其在10.6及更高版本上运行
  • 已安装SDK:10.6、10.8、10.9
我必须做什么才能确保它在应用商店中显示为“10.6及更高版本”兼容

我成功地将基本SDK设置为
10.8
10.9
,并将部署目标设置为
10.6
,使其编译良好。这够了吗


p.S.我也尝试过用Base SDK编译
10.6
,但是有太多错误需要修复,如果我能避免的话会更好


有什么想法吗?

有;使用部署目标为10.6的10.9 SDK可以正常工作


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

部署目标定义了您的应用程序在运行时所需的最低操作系统版本。
基本SDK定义了编译时可用的API功能的级别

因此,在构建可在10.6及以上版本上运行的应用程序时,您可以使用10.9作为基本SDK。
当应用程序在10.6机器上运行时,您只需确保避免使用10.7/10.8/10.9 API的代码路径

正如特洛伊敌人已经指出的,您可以使用
respondsToSelector:
检查某个类/方法是否可用。
另一种方法是使用NSAppKitVersionNumber:

if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_8)
<代码>(楼层(NasaPkyToLoNo.No.))是否可以使用“代码>PrimaMaule/Case>条件来确定是否使用基于系统版本的某个基础方法?我不想检查在运行时是否应该调用某个方法……