如何使用iOS 5构buildarmv6和armv7体系结构
在iOS5中, Apple从ARCHS_STANDARD_32_BIT中删除armv6架构。
为了保持对iPhone3G的支持,我还是想在iOS5中编译armv6 。
有没有人find这个解决scheme?
我今天刚刚构build了一些指定iOS 4.0部署目标的东西。 只有在架构中指定armv7,Xcode警告说,为了支持iOS4.2以下的任何东西,我必须在架构中包含armv6。 只需编辑该字段,popup对话框时单击“+”button并input文字“armv6”。
在我的情况下,我们希望我们的应用程序在iOS4和iOS5下工作。 我们不得不做一些修改,以便在iOS5下正常工作,但所有这些更改都是在iOS4友好的代码更改下完成的。
我们还添加了一些特定于iOS5的function,允许应用程序在iOS4下运行而不会崩溃。 具体而言,我们在尝试使用它们之前先testing了iOS5function,并将仅iOS5的库链接为可选。
因此,在iOS5世界中支持iPhone3G可能就意味着“我们希望我们的应用能够在iOS4及更高版本上运行(不pipe任何iOS5function使用)”,而不是“我们希望确保我们的应用在运行iOS5的旧设备上运行”。 这里有区别 考虑一下。 🙂
无论如何,joinarmv6支持很容易。 我想重点是:在某个时候,当没有更多的armv6设备在那里担心(无论什么原因),你将不必为它build设。 苹果认为每个人都应该尽快升级到最新的硬件。 所以在这个世界上,没有什么工具可以默认最新最好的东西了。 :-)幸运的是(或不),我们的开发人员生活在现实世界中,并认识到你必须支持一些旧的东西。 我猜Xcode开发团队也知道这一点,这就是为什么你可以简单地添加armv6的支持。
简单的答案是你必须把当前的设置从“Standard(armv7) – $(ARCHS_STANDARD_32_BIT)”改为“armv6”和“armv7”。 看到下面的图片。 您必须删除以前设置的行才能工作。
还要确保你在项目和目标中设置了这个…花了我一个小时来弄清楚。 已经设定了一个,而不是另一个。 希望这可以帮助。 GLTA
我认为苹果公司从标准设置中放弃armv6是有原因的。
我用iOS5 SDK编译了armv7 / armv6,然而,armv6编译器在发布模式下产生了错误的代码。 经过几个小时的寻找解决方法(尝试使用不同优化级别的llvm或gcc),我放弃了。
所以,只要我支持较老的armv6设备,我就会回到iOS SDK 4.x。
代码示例:
// myView center=(160, 100) CGPoint p=myView.center; // now p=(100,100) (what the heck?) px=myView.center.x; py=myView.center.y; // now p=(160,100) p.y+=100; // now p =(200,200) (what the heck?)
也许我有一些内存损坏,但是,在armv7编译器和iOSSDK <5.0它的行为如预期。
最好的祝福
不知道这是否真的是一个解决scheme,但我发现用“armv6 armv7”replace“架构”中的$(ARCHS_STANDARD_32_BIT)中定义的string,使我能够以iOS5作为基础,iOS4作为部署目标,并通过validation。
我没有使用任何IOS5专有库或调用,但打算在我的下一个版本。
我不需要用armv7replace$(ARCHS_STANDARD_32_BIT)来编译应用程序并上传到App Store。
正如MarkGranoff所build议的那样,我只是简单地将armv6添加为纯文本,通过打加号并在第二行input。