在马拉松式的编码 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/