如何与iOS 5

如何与iOS 5

问题描述:

建立的ARMv6和ARMv7体系结构在iOS5的苹果下降从ARCHS_STANDARD_32_BIT的ARMv6架构如何与iOS 5

为了保持对iPhone3G的我还是想在的ARMv6即使在iOS5的编译支持。

有没有人找到解决方案?

我今天刚刚构建了一些东西,指定了iOS 4.0的部署目标。只有在架构中指定armv7,Xcode警告我说为了支持iOS4.2以下的任何东西,我必须在架构中包含armv6。只需编辑该字段,当弹出对话框并输入文字“armv6”时,单击“+”按钮。

在我的情况下,我们希望我们的应用程序在iOS4和iOS5下工作。我们必须做一些修改才能在iOS5下正常工作,但所有这些更改都是在iOS4友好的代码更改下完成的。

我们还添加了一些iOS5专用功能,允许应用在iOS4下运行时不会崩溃。具体而言,我们在尝试使用它们之前先测试了iOS5功能,并将iOS5专用库链接为可选。因此,在iOS5世界中支持iPhone3G可能就意味着“我们希望我们的应用在iOS4及更高版本上运行(不管任何iOS5功能使用)”,而不是“我们希望确保我们的应用运行在运行iOS5的旧设备“。这里有区别;考虑一下。 :-)

无论如何,加入armv6支持很容易。我猜测的重点是:在某个时候,当没有更多armv6设备出现时(无论出于何种原因),您不必为此构建它。苹果认为每个人都应该尽快升级到最新的硬件。所以在那个世界上,没有必要让这些工具默认最新最好的东西。 :-)幸运的是(或不),我们的开发人员生活在现实世界中,并认识到你必须在一段时间内支持旧的东西。我猜Xcode开发团队也知道这一点,这就是为什么你可以简单地添加armv6支持。

+3

谢谢您的确切答案:-)的确,我希望能够在iOS 4.2.1或更低版本(限制为4.0)的iPhone 3G上运行我的应用程序,并为当前设备提供一些iOS 5特定功能。我没有尝试在架构中简单地添加“armv6”,我正在寻找一个像ARCHS_STANDARD_32_BIT这样的环境变量,并且我刚刚找到了ARCHS_UNIVERSAL_IPHONE_OS,但似乎并不奏效。 – iGranDav

+3

想要补充说的是,有很多解决方案都建议它应该说“armv6 armv7” - 这对我来说不起作用。目前只有“armv6 $(ARCHS_STANDARD_32_BIT)”适合我,意思是不要去掉那里的东西,只需在架构设置中添加“armv6” – brack

+1

我完成了所有这些工作,并且我的构建仍然失败 - 原因是我有一个(未使用)发布版本设置为iOS 5.0的部署目标,而Debug and Distribution设置为3.0,这似乎阻止了为armv6构建xcode。为所有构建设置部署目标为3.0修复了问题。 –

不知道这实际上是否是一个解决方案,但我发现用“armv6 armv7”替换“架构”中的定义字符串$(ARCHS_STANDARD_32_BIT),这使我可以用iOS5编译为基础, iOS4作为部署目标,并通过验证。

我没有使用任何IOS5专有库或调用,但打算在我的下一个版本。

我认为苹果从标准设置中放弃armv6是有原因的。

我已经用iOS5 SDK编译armv7/armv6,但是,armv6编译器在发布模式下生成了错误的代码。经过数小时寻找解决方法(尝试使用不同优化级别的llvm或gcc),我放弃了。

所以,我回到iOS SDK 4.x,只要我支持旧的armv6设备。代码

例子:

// myView center=(160, 100) 
CGPoint p=myView.center; 
// now p=(100,100) (what the heck?) 
p.x=myView.center.x; 
p.y=myView.center.y; 
// now p=(160,100) 
p.y+=100; 
// now p =(200,200) (what the heck?) 

也许我有一些内存损坏,但是,对编译器的ARMv7和iOSSDK < 5.0它的行为预期。

问候

+0

我也看到armv6中的奇怪bug建立在旧设备上。你知道了吗,还是真的回到以前的XCode?另外我注意到他们不允许你再下载旧的SDK! –

+19

这是Xcode 4.2和CGPoint/CGSize结构中的LLVM Compiler 3.0的已知问题:https://devforums.apple.com/thread/122059?tstart = 15。在armv6上禁用Thumb的构建可防止这些类型的错误。 –

+0

哇!我很高兴你的回答,这也发生在我身上。 – Clafou

简单的答案是,你必须从“标准(ARMv7的) - $(ARCHS_STANDARD_32_BIT)”改变当前的设置,以刚需“ARMv6的”和“的ARMv7”。看到下面的图片。您必须删除以前设置才能使用的行。

Correct settings for armv6 and armv7

+3

感谢您用图像来解释这一点 - 它确实说得很清楚。 – radven

+0

谢谢。这对我有效。 – Undistraction

+0

比接受的答案要好。 –

也确保你设置这个项目中和目标......花了我一个小时来找出答案。已经为其中一个而不是其他的。希望这可以帮助。 GLTA

+0

另外,如果您有任何图书馆,则必须将其设置在项目中并定位在那里。 –

我不需要用armv7替换$(ARCHS_STANDARD_32_BIT),以便应用程序编译并上传到App Store。

正如MarkGranoff所建议的那样,我只是简单地将armv6添加为纯文本,通过敲击plus并在第二行输入。