这个问题适用于带有Xcode 4.2的iOS 5。这就是我为iOS开发而运行的。
我从git hub InstaOverlay下载了一个示例项目,当我查看其目标时,它显示“6.0”,所以我将其切换为5.0并尝试编译代码。从截图中我可以看到,我无法走得太远。吨和吨的错误。
所以我的问题是,代码本身是否存在问题,或者为iOS 6制作的项目永远不能在iOS 5上运行?我认为用户可以向后兼容应用程序吗?
任何建议
答案 0 :(得分:2)
一般回答
是的,应用程序可以向后兼容iOS5或更早版本。 “可以”是这里的重要问题 - 这样做可能非常耗时,具体取决于您的应用程序的功能,使用的API等。另一方面,非常简单的项目可以只是工作,如果他们使用非常标准的API,自(iOS)时间开始以来没有太大的变化。
显然,如果您的应用仅使用iOS6功能,那么您就会陷入困境。否则,是的,您可以这样做,但要准备好花时间这样做 - 不仅要编写/更改代码,还要测试它。
所以,就你而言,是的,该项目是“破碎的”,我们的意思是不是为旧版本的iOS编写的。如果它只是像改变项目设置一样简单!
以下是制作向后兼容应用的一些策略:
如果存在API上的变体,不同的方法具有不同的兼容性,请使用最兼容的变体。例如,某些NSFileManager
方法出现在较新版本的iOS中,但旧的变化仍然有效。 Apple倾向于发布使用新代码的源代码(IME)而没有任何关于“BTW的条款,这对旧版本的iOS无效”,因此需要谨慎
如果您想使某些功能仅出现在较新的iOS版本上,则需要对所需的方法/ API进行运行时检查,并且只在它们出现时才使用它们。 / strong>在这些情况下,您还需要小心链接您的项目和某些项目的“弱链接”。
如果你真的需要iOS3兼容性,你就不能使用ARC;它必须是旧式的内存管理。 iOS4支持ARC,但有一些运行时限制:不支持自动填充引用。
电影播放是一个典型的例子,可以使用更新更好的API,但旧的API仍然存在。较旧的MPMoviePlayerController
在iOS4之前,然后MPMoviePlayerViewController
出现在iOS4中(请注意“查看”一词 - 它是一个完全成熟的UIViewController
)。通常你想使用后者,但是对于iOS3兼容性,你决定根据运行时检查使用前者。
具体答案
你对CV_XADD
的问题:这看起来像是#define
某处的预处理器定义,但编译器没有把它拿起来。有关提示,请尝试通过搜索CV_XADD
来查找#define CV_XADD
的定义。如果您找不到,请尝试查找CV_XADD
并在所有结果中查找定义。
您是否尝试使用Google搜索“CV_XADD预期表达式”这一术语?我得到了很多关于这个问题的点击。
您的项目正在使用C ++,这会增加混合的复杂性!