【问题标题】:making ios 6 app project compatible with iOS 5 - backwards使 ios 6 应用程序项目与 iOS 5 兼容 - 向后
【发布时间】:2013-02-09 14:21:32
【问题描述】:

此问题适用于带有 Xcode 4.2 的 iOS 5。这就是我正在为 iOS 开发而做的事情。

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

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

任何建议

【问题讨论】:

  • 嗨 Sam,我是 Max - Instaoverlay 的开发者。您遇到的问题可能与 XCode 版本有关,而不是与 iOS SDK 有关。 InstaPDF,我为其编写组件的应用程序实际上是针对 5.1
  • 另外 - 你确定你已经正确地添加了所有的依赖吗?
  • 嗨 Mmackh - 你确定它只是 iOS 5.1 的问题。我认为这可能不是那么简单 - 我得到了 CV_XADD 的大多数错误 - 这是针对 opencv2 - 不幸的是,我无法验证它是否真的在 iOS 5.1 上有效,因为我正在运行带有 Xcode 4.2 的 iOS 5
  • @Adbizem - 我所做的只是下载并打开 instaoverlay 项目并尝试编译它。我没有创建自己的项目来合并它 - 所有依赖项都应该包含在 instaoverlay proj 中。
  • 我认为您需要更具体一些 - 我对项目进行了直接的 git 克隆,将部署目标更改为 5.0,它构建并运行没有错误。所以 - 回答这个问题 - 项目没有损坏 - 它是您机器本地的东西。

标签: iphone ios xcode xcode4.2


【解决方案1】:

一般答案

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

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

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

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

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

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

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

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

具体答案

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

您是否尝试过在谷歌上搜索“CV_XADD 预期表达式”一词?我收到了许多与此问题相关的点击。

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

【讨论】:

  • 感谢 Occlus 的详细解释 - 我想从比我更有经验的人那里得到确认,该项目已损坏。一直抱怨 CV_XADD - 这与 Apple API 无关。
  • 嗨,Sam,关于您的具体问题,我在回答的末尾添加了一些内容。
  • 大声笑 - 说真的,我放弃了。我想做的就是看看这些人在 github 上拼凑了什么以及它是如何工作的。如果我什至无法在添加 C++ 编译器层复杂性的情况下对其进行编译,那么这只是浪费我的时间。感谢您的所有解释!
猜你喜欢
  • 2012-02-12
  • 1970-01-01
  • 2023-03-06
  • 2013-10-29
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多