2012-09-17 76 views
36

最新版本注释表明4.2.1和更低版本将不被支持,我们现在必须在支持旧设备时使用2版本的Xcode进行开发?如果我们想开发iOS6并支持4.2或更低版本,这将很难支持较旧的设备。Xcode 4.5和iOS 4.2.1不兼容

我不认为Xcode 4.4将支持iOS6。所以这是问题。开发人员如何轻松支持这些平台而没有太多麻烦?

回答

29

你可以做到这一点,但它需要一些次要的Xcode黑客攻击和一些牺牲。根据你的意思“支持iOS 6”,这可能会或可能不足以满足你的需求。如果你只是想让你的应用在iOS 6上运行,那么这应该工作。如果你还需要你的应用程序来整合新的iOS 6功能,那么它不会。

    (注他人使用Xcode中的多个版本没有问题谁:this similar question有答案,那些让你也可以使用新的iOS 6 API和直接针对armv7s)

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

基本上,您可以使用Xcode 4.5为iOS 4或更高版本构建,但不能充分利用新的iOS 6特性。所以,你真的为iOS 4和5构建,并假设应用程序将在iOS 6上运行良好(这应该是真的,但你需要自己测试)。

你需要

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

从旧的Xcode的安装(你需要保持简单各地,或重新安装到非标准位置)复制的iOS 5 SDK文件夹。然后,您将您的Build Settings中的部署目标设置为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中就不能正常生成可执行文件):

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

为了解决这个问题,你需要设置你的目标定制构建规则告诉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 
+0

非常感谢,你让我的晚上!我一直在使用chpwn的文章挣扎于XCode,但是没有任何运气 –

+0

如果我的文件是* .mm,那么如何在*。[cm]语法中包含这些文件?谢谢 – malhal

+0

@indiekiduk,我没有在我的iOS项目中真正使用C++,但我猜测你可以再次**添加构建规则** *,这一次,定义构建规则为'* .mm',也指向LLVM GCC 4.2编译器。 – Nate

2

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

+5

的iOS 4设备仍然有显著市场分享。特别是对于商业应用程序,这些设备仍然有足够的能力来运行它们。我想大多数应用程序仍然会支持他们,至少在一年之后才会真正淡出。 – mskw

+0

大部分剩余的iOS 4.X用户将升级到iPhone 5.使用iOS 6时,在4上浪费精力毫无意义。随着我们的下一个版本,我们正式放弃4.X. – ahwulf

+3

有趣的是,为什么没有人回答我的问题,毕竟人们对我的支持/说服力不支持4.2.1,我仍然需要出于商业原因。那么,是否有人需要支持4.2.1和4.3以及更高版本,如果是的话,他们如何应对? – mskw

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等。您将在应用程序商店中拥有两个条目。

如果您对超越Xcode直接支持的内容感到满意,请参阅Nate的答案。

+8

+1用于回答而不是猜测他的业务需求。 –

+0

如何在2个版本的Xcode中开发?我看到你如何创建2个不同的二进制文件,但是如何在App Store中管理这两个二进制文件?这里是关于这个主题的讨论:http://stackoverflow.com/questions/12574851/support-both-armv6-and-ios-6-in-an-app-store-app – lschult2

+0

你不能同时支持pre- 4.3设备并在同一应用中使用iOS 6功能。 –

0

我认为,靶向4.3是最好的选择,根据ios version statistics

+3

相反,每一个iOS 4.3设备可以升级到iOS 5和/或6.去支持iOS 4.3的麻烦是浪费时间。以iOS 4.2.1为目标,可以为您带来数百万设备,让您放弃。看到我对上面的答案的评论。 –

0

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

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。对?