如何使用iOS 5构建armv6和armv7架构

iGr*_*Dav 96 ios ios5

iOS5中, Apple 从ARCHS_STANDARD_32_BIT中删除了armv6架构.

为了保持对iPhone3G的支持,即使在iOS5中,我仍然希望在armv6中编译.

有没有人为此找到解决方案?

Mar*_*off 96

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

就我而言,我们希望我们的应用程序在iOS4和iOS5下运行.我们不得不进行一些修改,以便在iOS5下正常工作,但所有这些更改都是通过iOS4友好的代码更改完成的.

我们还添加了一些iOS5特定功能,允许应用程序在iOS4下运行而不会崩溃.具体来说,我们在尝试使用它们之前测试了iOS5功能,并将仅支持iOS5的库链接为Optional.

因此,在iOS5世界中支持iPhone3G可以轻松地表示"我们希望我们的应用程序在iOS4及更高版本上运行(无论使用任何iOS5功能)"而不是"我们希望确保我们的应用程序在运行iOS5的旧设备上运行".这里有区别; 想一想.:-)

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

  • 它对我不起作用(即使在添加'armv6'之后).该应用程序甚至没有出现在我的iPod touch上.但后来我发现"必需的设备功能"(在信息选项卡下)中有armv7.我刚删除它,它开始运行完美 (6认同)
  • 感谢您的确切答案:-)确实,我希望能够在iOS 4.2.1或更低版本(限制为4.0)的iPhone 3G上运行我的应用程序,并为当前设备提供一些iOS 5特定功能.我没有尝试简单地在架构中添加"armv6",我正在寻找像ARCHS_STANDARD_32_BIT这样的环境变量,我刚刚找到了ARCHS_UNIVERSAL_IPHONE_OS,但它似乎没有用. (3认同)
  • 想要补充一点,那里的很多解决方案都表明它应该说"armv6 armv7" - 这对我来说不起作用.目前只有"armv6 $(ARCHS_STANDARD_32_BIT)"对我有用,这意味着不要去掉那里的东西,只需将"armv6"添加到Architectures设置中 (3认同)

adj*_*lli 51

简单的答案是你必须将当前设置从"标准(armv7) - $(ARCHS_STANDARD_32_BIT)"更改为"armv6"和"armv7".见下图.您必须删除具有先前设置的行才能使用.

正确设置armv6和armv7

  • 感谢您用图片解释这一点 - 它确实清楚了. (3认同)

小智 11

还要确保你在Project和Targets中设置它......花了我一个小时来计算出来.把它设置为一个而不是另一个.希望这可以帮助.GLTA


小智 9

我认为苹果公司放弃标准设置的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?)
p.x=myView.center.x;
p.y=myView.center.y;
// now p=(160,100) 
p.y+=100;
// now p =(200,200) (what the heck?)
Run Code Online (Sandbox Code Playgroud)

也许我有一些内存损坏,但是,在armv7编译器和iOSSDK <5.0上,它的行为符合预期.

最好的祝福

  • 这是Xcode 4.2和CGPoint/CGSize结构中的LLVM编译器3.0的已知问题:https://devforums.apple.com/thread/122059?tstart = 15.禁用armv6上的Thumb构建可防止出现这类错误. (19认同)

Pet*_*son 7

不确定这是否真的是一个解决方案,但我发现用"armv6 armv7"替换"架构"中定义的字符串($(ARCHS_STANDARD_32_BIT))允许我编译iOS5作为基础,iOS4作为部署目标,并通过验证.

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