xcode - 检测我是否使用旧版 iOS 不可用的框架的简单方法

标签 xcode ios-frameworks ios

在马拉松式的编码 session 之后,我添加了太多代码而没有跟踪所有内容,我现在有一个应用程序可能有一些 iOS 5.0 和 5.1 特定的枚举、调用和框架,但是,我希望我的应用程序支持 iOS回到 4.3。

我希望有一种简单的方法可以将 Xcode 设置为像针对 iOS 4.3 进行编译一样进行编译,这样我就可以得到所有需要排除和/或编码的违规代码的错误, 适用于旧版 iOS。

我想我会通过使用编译器选项得到它:

-D__IPHONE_OS_VERSION_MAX_ALLOWED=__IPHONE_4_3

但这最终会在系统头文件中产生错误,而不是我的代码。

鉴于大多数枚举和框架的可用性都包含在头文件中,我不得不认为有一种简单的方法可以满足我的需要。

有没有人设法在不使用旧 SDK 下载旧 Xcode 的情况下做这样的事情?在那里,我可能会遇到 Xcode 无法在 Lion(我正在运行的)下正常运行的问题。

更新:我似乎无法在 Lion 上安装 Xcode 3.2.6。我现在必须找到 Snow Leopard Mac,除非我找到使用编译器选项或强制 Xcode 使用旧 SDK 的方法...

这是@mattjgalloway 的回答对我所做的示例:

Lumin 应用组

/Users/mz/Dev/Working/Lumin/Lumin/MyUIScreen.m

  • “亮度”已弃用:太新了!
  • “亮度”已弃用:太新了!
  • “亮度”已弃用:太新了!
  • “亮度”已弃用:太新了!

/Users/mz/Dev/Working/Lumin/Lumin/LuminViewController+Share.m

  • “TWTweetComposeViewController”已弃用:太新了!
  • “TWTweetComposeViewController”已弃用:太新了!
  • “TWTweetComposeViewController”已弃用:太新了!

/Users/mz/Dev/Working/Lumin/Lumin/LuminViewController.m

  • 'scrollView' 已弃用:太新了!
  • “connectionWithMediaType:”已弃用:太新了!
  • “connectionWithMediaType:”已弃用:太新了!
  • “AVCaptureDeviceSubjectAreaDidChangeNotification”已弃用:太新了!
  • “setSubjectAreaChangeMonitoringEnabled:”已弃用:太新了!

非常好。

我将以下内容放入项目的 .pch 文件中,并计划对所有项目都这样做:

#if DEBUG
#define __IPHONE_OS_VERSION_SOFT_MAX_REQUIRED __IPHONE_OS_VERSION_MIN_REQUIRED
#import "MJGAvailability.h"
#endif

对于任何项目,我现在都会根据我所针对的最早的 iOS 自动监视 SDK 问题。虽然我仍然需要担心 SDK 的变化,但至少我知道大多数框架添加对于旧的 iOS 版本是不可用的。

最佳答案

看看我的MJGAvailability.h here on GitHub .基本上它定义了正确的预处理器 #define 以便较新的 API 看起来像是已被弃用,因此您会收到编译器警告。文件顶部有一些文档,但基本上您只需在 PCH 文件中执行此操作:

#define __IPHONE_OS_VERSION_SOFT_MAX_REQUIRED __IPHONE_4_3
#import "MJGAvailability.h"

如果你想支持到 iOS 4.3。

它当然不是 100% 万无一失,但我发现它对于完成您的要求非常有用。

如果您想抑制警告,因为您可能知道可以使用该 API(例如,您已经用 respondsToSelector 包围了它),那么您可以这样做:

UINavigationBar *navBar = self.navigationController.navigationBar;
if ([navBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
    [navBar setBackgroundImage:[UIImage imageNamed:@"navbar_bg.png"] forBarMetrics:UIBarMetricsDefault];
#pragma clang diagnostic pop
}

关于xcode - 检测我是否使用旧版 iOS 不可用的框架的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10172383/

相关文章:

Xcode 4 : Framework localization not working

ios - Swift:应用程序被杀死时运行特定代码?

iphone - 如何使用 Graph api 将图像与文本一起发布?

ios - UIStackView 中包含多个 ViewController

ios - 本地通知 - 重复间隔(Xcode,swift2)

ios - Xcode 8.2 : Swift3- how to hide status bar?

objective-c - 需要使用BOOL*代替BOOL

ios - 如何在ios框架中覆盖值/文件

javascript - react native - react-native-maps initialRegion 不起作用

iphone - iOS9 AVSpeechUtterance 的 AVSpeechSynthesizer 问题