【问题标题】:Is it possible to target older iOS versions when using Xcode 4.5 and iOS 6 SDK?使用 Xcode 4.5 和 iOS 6 SDK 时是否可以针对较旧的 iOS 版本?
【发布时间】:2013-07-30 12:21:26
【问题描述】:

可以使用 IOS 6 新方法并在 IOS 5 上部署。 我应该遵循什么方法? 请指导。

【问题讨论】:

    标签: xcode ios5 ios6 xcode4.5 deprecated


    【解决方案1】:

    使用弱链接类来做到这一点:

    在使用晚于您的部署目标的 iOS 或 OS X 版本中引入的任何符号之前,请检查该符号是否可用。如果符号不可用,请提供备用代码路径。

    假设您将 Xcode 项目中的基本 SDK 设置为 iOS 4.0。这允许您的代码在该版本的操作系统中运行时使用该版本的功能。还假设您希望您的软件在 iOS 3.1 中运行,即使它不能使用该操作系统版本中的新功能。通过将部署目标设置为早期版本的操作系统来允许这样做。

    在 Objective-C 中,instancesRespondToSelector: 方法告诉您给定的方法选择器是否可用。例如,要使用 iOS 4.0 中首次提供的 availableCaptureModesForCameraDevice: 方法,您可以使用如下代码:

    if ([UIImagePickerController 实例RespondToSelector: @selector (availableCaptureModesForCameraDevice:)]) { // 方法可用。 // 您的代码可以检查视频捕获是否可用,并且, // 如果是,则提供该选项。 } 别的 { // 方法不可用。 // 仅使用静止图像捕获的替代代码。 }

    当您的代码在 iOS 4.0 或更高版本中运行时,它可以调用 availableCaptureModesForCameraDevice: 来确定设备上是否可以进行视频捕获。但是,当它在 iOS 3.1 中运行时,它必须假定只有静止图像捕获可用。

    如果您要使用各种设置构建此代码,您会看到以下结果:

    如果您指定 iphoneos3.1 的基本 SDK 设置: 构建将失败,因为该系统版本中未定义 availableCaptureModesForCameraDevice: 方法。

    如果指定了iphoneos4.0的base SDK设置,然后将部署目标设置为:

    iphoneos4.0:该软件只能在 iOS 4.0 或更高版本中运行,并且无法在早期系统上启动。

    iphoneos3.1:该软件可以在 iOS 4.0 和 iOS 3.1 中运行,但无法在早期系统上启动。在 iOS 3.1 中运行时,该软件将使用备用代码来捕获图像。

    通过将 getter 方法名称(与属性名称相同)传递给 instancesRespondToSelector: 来检查 Objective-C 属性的可用性。

    要确定弱链接 C 函数是否可用,请使用链接器将不可用函数的地址设置为 NULL 的事实。通过将地址与 NULL 或 nil 进行比较来检查函数的地址,从而检查其可用性。

    参考文献

    【讨论】:

      猜你喜欢
      • 2011-12-07
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 2014-07-25
      • 2015-06-23
      相关资源
      最近更新 更多