-5

这个问题适用于带有 Xcode 4.2 的 iOS 5。这就是我为 iOS 开发而运行的。

我从 git hub InstaOverlay下载了一个示例项目,当我查看它的目标时,它显示“6.0”,所以我将它切换到 5.0 并尝试编译代码。从我的屏幕截图中可以看出,我无法走得太远。吨和吨的错误。

所以我的问题是,代码本身是否存在问题,或者为 iOS 6 制作的项目永远无法在 iOS 5 上运行?我认为用户能够使应用程序向后兼容?

有什么建议么

在此处输入图像描述

4

1 回答 1

2

一般回答

是的,应用程序可以向后兼容 iOS5 或更早版本。“可能”是这里的重要问题 -这样做可能非常耗时,具体取决于您的应用程序的功能,它使用的 API 等等。另一方面,非常简单的项目可以正常工作,如果他们使用非常标准自 (iOS) 时间开始以来,API 无需太多更改即可使用。

显然,如果您的应用程序仅使用 iOS6 功能,那么您将陷入困境。否则,是的,您可以这样做,但要准备好花时间这样做——不仅要编写/更改代码,还要测试它。

所以就您而言,是的,该项目已“损坏”,我们的意思是不是为旧版本的 iOS 编写的。如果只是像更改项目设置一样简单!

以下是制作向后兼容应用程序的一些策略:

  • 如果 API 上存在变体,并且具有不同兼容性的不同方法,则使用最兼容的变体。例如,一些NSFileManager方法出现在较新版本的 iOS 中,但较旧的变体仍然有效。Apple 倾向于不顾一切地发布使用新代码的源代码 (IME),而没有任何关于“顺便说一句,这不适用于旧版本的 iOS”,因此需要小心

  • 如果您想让某些功能仅出现在较新的 iOS 版本上,您需要在运行时检查所需的方法/API 是否可用,并且仅在它们可用时使用它们。在这些情况下,您还需要小心链接您的项目和“弱链接”某些项目。

  • 如果真的需要iOS3的兼容性,就不能用ARC;它必须是老式的内存管理。iOS4 支持 ARC,但有一些运行时限制:不支持自动取消引用。

电影播放是更新更好的 API 可用但旧的 API 仍然存在的典型示例。旧版本MPMoviePlayerController是 iOS4 之前的版本,然后MPMoviePlayerViewController出现在 iOS4 中(注意“视图”这个词——它是一个成熟的UIViewController. 通常您想使用后者,但为了 iOS3 兼容性,您会根据运行时检查决定使用前者。

具体答案

你的问题CV_XADD: 这看起来像是一个预处理器定义,它在#define某个地方,但编译器没有拾取它。如需提示,请尝试CV_XADD通过搜索来查找 的定义#define CV_XADD。如果找不到,请尝试CV_XADD在所有结果中寻找 just 并寻找定义。

您是否尝试过在谷歌上搜索“CV_XADD 预期表达式”这一术语?我得到了一些与这个问题有关的命中。

您的项目正在使用 C++,这增加了一些复杂性!

于 2013-02-09T14:29:24.520 回答