- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在马拉松式的编码 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
/Users/mz/Dev/Working/Lumin/Lumin/LuminViewController.m
非常好。
我将以下内容放入项目的 .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/
我需要将我的数据库容器与我的服务器容器连接起来。现在我只是对遗留参数--link感到不满,它工作得很好 $> docker run -d -P --name rethinkdb1 rethinkdb
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
我的脚本中有以下代码: while (my ($key, $value) = each @values) { if ( $key < $arraySize-1) { if (
自周末以来,旧版 FCM 不再工作。 我的设备通过旧版 FCM 通过 fcm.googleapis.com/fcm/send 发送推送通知。我没有更改任何内容,但自周末以来我收到错误代码“HTTP/1
自周末以来,旧版 FCM 不再工作。 我的设备通过旧版 FCM 通过 fcm.googleapis.com/fcm/send 发送推送通知。我没有更改任何内容,但自周末以来我收到错误代码“HTTP/1
使用 LWJGL 和 PNGDecoder,我发现文档在纹理方面没有多大帮助。我了解有关它们的基本概念,但我不知道要调用什么函数(除了创建纹理ByteBuffer、上传数据的调用,但不实际使用它),而
大量使用主 iframe 的网站 我继承了一个遗留代码库/网站,http://ninjawars.net 。在我开始在网站上编码之前,iframe 就已就位。 我经常听说 iframe 的问题(安全性
我正在尝试在遗留 OpenGL 中为长方体制作纹理。无论我先渲染长方体的哪一侧,这一侧的纹理都不正确,而所有其他侧的纹理都正确。我尝试先渲染立方体的不同面。 这是绘制立方体的代码,包括它的纹理坐标:
我使用旧版 openGL。我在一个场景中绘制多个对象。我希望正在绘制的球体具有纹理,但所有其他对象都是纯色。但是,如果我在绘制球体后尝试禁用纹理,其他一切都是黑色的。 这是我创建纹理的代码 g
我在使用一些旧的 FBJS 时遇到了问题。验证我正在使用的字段的值 document.getElementById('email2').getValue() 这现在给了我错误 Error: a1979
我正在开发一个老式项目,其中我必须向 JSP 页面添加动态表单提交。该链接将动态生成,因此我需要跟踪单击了哪些链接。例如, Report Name
我已经将我的 FireFox 升级到 9.0.1,所以我无法检查我要问的是什么。我想在我的网站中使用 text-shadow css,但我不知道它是否适用于 3.5 等较旧的 FireFox 版本。
为什么第一批 Linux 开发人员选择实现非抢占式内核?是为了保存同步吗? 据我所知,Linux 是在 90 年代初开发的,当时 PC 还只有一个处理器。非抢占式内核在此类 PC 中具有哪些优势?但是
我真的很难在旧的 IE 版本 (6-8) 上显示背景图像。 这是我的代码: #top { background-image: url(http://some-domain.com/myimage.jp
阅读Java Code Conventions document from 1997 ,我在 P16 上关于变量命名约定的示例中看到了这一点: int i; char *cp; float myWid
我必须维护一个包含大量 Perl 代码的史前网站。移动到新服务器后,事情变得模糊: 当来自同一个客户端的多个请求在一个页面上运行(使用 GD 生成图像)时,这些脚本会覆盖彼此的变量,从而导致奇怪的结果
Visual Studio 2012 中的对象浏览器为可移植类库提供了两种不同的组件集: .NET 可移植子集 .NET 可移植子集(旧版) 当我创建可移植类库时,它使用 .NET 可移植子集。什么是
我“继承”了一个旧的 Spring 应用程序。目前它使用的是 Spring 2.5(刚刚升级了一次),并且希望进一步升级到 Spring 3。 我了解大部分应用程序配置。只有一个部分我“不是100%”
我正在开发一个 iPhone 应用程序,迄今为止,它使用的是统一定价模型。在下一个版本中,计划是降低基本功能集和价格,然后让用户可以选择为功能包进行应用内购买。 添加应用内购买似乎非常简单。我担心的是
我有点卡住了,因为我需要更好地了解 sugarCRM 中这种类型的自定义验证的语法。 我有这种验证: SUGAR.util.doWhen("typeof(check_form) != 'undefin
我是一名优秀的程序员,十分优秀!