Xcode 4.5和iOS 4.2.1不兼容

时间:2012-09-17 16:11:55

标签: ios xcode cocoa-touch

最新发行说明表明4.2.1及更低版本将不受支持,我们现在必须使用2版本的Xcode来支持旧设备?如果我们想要开发iOS6并支持4.2及更低版本,这将很难支持旧设备。

我认为Xcode 4.4不支持iOS6。所以这就是问题所在。开发人员如何在没有这么多麻烦的情况下轻松支持这些平台?

6 个答案:

答案 0 :(得分:29)

你可以这样做,但它需要一些小的Xcode黑客攻击和一些牺牲。根据“支持iOS 6”的含义,这可能对您有用,也可能不够。如果您只是希望您的应用在iOS 6上运行,那么这应该可行。如果您还需要应用程序来合并新的iOS 6功能,那么它就不会。

(对于使用多个Xcode版本没有问题的其他人请注意:this similar question的答案允许您也使用新的iOS 6 API并直接定位armv7)

See basic instructions on chpwn's blog here(但也请阅读下面的其他内容!)

基本上,您可以使用Xcode 4.5为iOS 4及更高版本构建,但是您无法利用仅限iOS 6的新功能。所以,你真的在​​为iOS 4和5构建,并假设应用程序在iOS 6上运行正常(应该是真的,但你需要自己测试一下)。

您需要复制iOS 5 SDK文件夹

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.*.sdk

来自旧的Xcode安装(您需要暂时保留,或重新安装到非标准位置)。然后,您可以将Build Settings中的 Deploy Target 设置为iOS 4.0(或任何您想要的最低操作系统)。您可能需要在文本编辑器中打开project.pbxproj文件以手动设置:

IPHONEOS_DEPLOYMENT_TARGET = 4.0;

您还需要将架构设置为armv6armv7。您不能直接定位armv7s。但是,这并不意味着您的应用程序无法在iPhone 5上运行。armv7可执行文件应该在iPhone 5上运行,而不需要在armv7s中添加任何优化。只是兼容性不适用于其他方向(例如,armv7可执行文件不能在armv6 iPhone 3G上运行。

enter image description here

还有一个步骤可能是必要的,在chpwn的博客中提到。您可能会收到这些警告(这确实是错误,因为Xcode无法正确生成您的可执行文件):

  

警告:没有规则来处理架构armv6类型sourcecode.c.objc的文件'$(PROJECT_DIR)/main.m'

为了解决此问题,您需要为目标设置自定义构建规则,告知Xcode使用 LLVM GCC 4.2 生成armv6代码。为与模式*.[mc]匹配的文件定义规则:

enter image description here

这将是一个与Xcode默认不同的编译器,您可能需要调整Objective-C代码中的一些语法。尽管许多想要这样做的人可能在ARC之前编写了他们的应用程序,但重要的是要注意LLVM gcc 4.2 does not support ARC

最后,您可能仍会看到来自Xcode的关于iOS部署目标低于4.3的警告,并且armv6不受支持。我发现,这些不是问题,可以忽略不计:

enter image description here

在我的应用程序可执行文件上运行lipo -info后显示所需的结果:

lipo -info MyAppName
Architectures in the fat file: MyAppName are: armv6 armv7 

答案 1 :(得分:22)

Xcode 4.5使iOS 4.3成为最早支持的操作系统,它有效地孤立了原有的iPhone和3G。

如果您想支持4.3之前的iOS版本,则需要保留4.4版本的Xcode。

更清楚一点:你不能轻松(意味着Xcode不开箱即用)支持4.3之前的设备并在同一个应用程序中使用iOS 6功能。这是因为iOS 6功能需要XCode 4.5,它也将iOS 4.3设置为支持的最低操作系统。

所以,你有3个选择:

  1. 继续使用XCode 4.4。你将能够定位4.3之前的iOS。您将无法利用iOS 6的功能,但假设您在实际的iOS 6设备上执行了足够的测试,您的应用程序应该可以正常运行。
  2. 迁移到XCode 4.5。您将无法定位4.3之前的iOS,但您将能够利用iOS 6的功能。
  3. 为您的应用制作两个版本。使用XCode 4.4(如选项1中)构建一个版本,使用4.5构建另一个版本(如选项2中所示)。从分发的角度来看,这些将是2个独立的应用程序,它们每个都有自己的软件包ID等。您将在应用程序商店中有两个条目。
  4. 如果您对超越Xcode直接支持的内容感到满意,请参阅Nate的回答。

答案 2 :(得分:2)

最初的iPhone和iPhone 3G是唯一不支持iOS 5的设备。现在iPhone 3G已经有4年了。您可能需要考虑放弃对iOS 4的支持。如果您不想这样做,我认为您必须开发两个不同版本的Xcode。

答案 3 :(得分:2)

我认为对iOS 4.2.1的支持不是核心问题。事实上,我试图解决这个问题并执行以下操作:

  • 使用iOS 6 SDK构建应用程序,将部署目标设置为iOS 4.2.1(可行)。
  • 打包应用以进行临时安装,并在iOS 4.2.1设备(iPod touch 2G)上安装该应用。
  • 测试应用程序。

但是,安装失败。这里的原因是 - afaik - 不是iOS版本。原因是架构。 XCode 4.5不再允许您为armv6构建。它只适用于armv7。另一方面:所有拥有armv7或更高版本的设备都可以运行iOS 5.唯一不支持armv7的设备是iPhone,iPhone 3G,iPod touch 1G和iPod touch 2G。

所以对我来说问题是:你能用XCode 4.5和iOS 6作为基础SDK构建armv6吗?

编辑:你不能这样做,因为iOS 6基础SDK不适用于armv6。正确?

答案 4 :(得分:0)

根据ios version statistics

,我认为定位到4.3是最佳选择

答案 5 :(得分:0)

尝试使用IPHONEOS_DEPLOYMENT_TARGET=4.0手动设置项目设置。但是,我不知道是否有任何副作用。