Iphone 使ios 6应用程序项目与ios 5兼容-向后

Iphone 使ios 6应用程序项目与ios 5兼容-向后,iphone,ios,xcode,xcode4.2,Iphone,Ios,Xcode,Xcode4.2,这个问题适用于使用Xcode 4.2的iOS 5。这就是我为iOS开发所做的 我从GitHub下载了一个示例项目,当我看到它的目标时,它说“6.0”,所以我把它切换到5.0并尝试编译代码。从我的截图中你可以看到,我没能走得很远。无数的错误 所以我的问题是,代码本身是否有问题,或者为iOS 6制作的项目永远无法在iOS 5上运行?我认为用户能够使应用程序向后兼容 有什么建议吗 一般答案 是的,应用程序可以与iOS5或更早版本向后兼容。“可以”是这里的一个重要问题--这样做可能会非常耗时,这取决于应

这个问题适用于使用Xcode 4.2的iOS 5。这就是我为iOS开发所做的

我从GitHub下载了一个示例项目,当我看到它的目标时,它说“6.0”,所以我把它切换到5.0并尝试编译代码。从我的截图中你可以看到,我没能走得很远。无数的错误

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

有什么建议吗


一般答案

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

显然,如果你的应用程序只使用iOS6的功能,你就被卡住了。否则,是的,您可以这样做,但要准备花时间这样做——不仅要编写/修改代码,还要测试代码

因此,就你而言,是的,这个项目是“失败的”,我们的意思是不为旧版本的iOS编写。要是能像更改项目设置那样简单就好了

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

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

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

  • 如果您确实需要iOS3兼容性,则不能使用ARC;它必须是旧式的内存管理。iOS4支持ARC,但有一些运行时限制:不支持引用的自动零化

电影播放是一个经典的例子,新的和更好的API可用,但旧的API仍然存在。较旧的
MPMoviePlayerController
早于iOS4,然后
MPMoviePlayerController
出现在iOS4中(注意“视图”一词——它是一个成熟的
UIViewController
)。通常您希望使用后者,但是为了iOS3的兼容性,您会根据运行时检查决定使用前者

具体答案

您的
CV_XADD
问题:这看起来像是一个预处理器定义,它在某个地方是
\define
d,但编译器没有接收它。有关提示,请尝试通过搜索
#define CV_XADD
来查找
CV_XADD
的定义。如果找不到,请尝试只查找
cvxadd
,并在所有结果中查找定义

你试过在谷歌上搜索“CV_XADD预期表达式”这个词吗?我得到了很多关于这个问题的答案


你的项目使用C++,它增加了混合的复杂性。p> 谢谢你对occulus的详细解释——我想得到比我更有经验的人的确认,这个项目已经失败了。一直在抱怨CV_XADD-这与苹果API无关。嗨,山姆,我在回答你的具体问题的最后加了一点。哈哈-说真的,我放弃了。我只是想看看这些家伙在github上做了些什么,以及它是如何工作的。如果我连C++编译器层的复杂性都不能编译,那就浪费了我的时间。谢谢你的解释!嗨,山姆,我是Max,Instaoverlay的开发者。您遇到的问题可能与XCode版本有关,而不是与iOS SDK有关。InstaPDF,我为其编写组件的应用程序实际上也是针对5.1版的-你确定你已经正确添加了所有依赖项吗?嗨,Mmackh-你确定这只是iOS 5.1版的问题吗。我认为这可能不是那么简单-我在CV_XADD中得到了大多数错误-这是在opencv2中-不幸的是,我无法验证它是否真的在iOS 5.1上工作,因为我使用Xcode 4运行iOS 5。2@Adbizem-我所做的只是下载并打开instaoverlay项目,然后尝试编译它。我创建自己的项目并不是为了合并它——所有依赖项都应该包含在instaoverlay项目中。我想你需要更具体一点——我对项目进行了git直接克隆,将部署目标更改为5.0,它的构建和运行没有错误。所以,为了回答这个问题,这个项目并没有被破坏,它是你的机器本地的东西。