在 iOS5 中,Apple从 ARCHS_STANDARD_32_BIT 中删除 armv6 架构。
为了保持对 iPhone3G 的支持,即使在iOS5中,我仍然希望在 armv6 中编译。
有没有人为此找到解决方案?
答案 0 :(得分:97)
我今天刚刚构建了一些指定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支持。
答案 1 :(得分:51)
简单的答案是你必须将当前设置从“标准(armv7) - $(ARCHS_STANDARD_32_BIT)”更改为“armv6”和“armv7”。见下图。您必须删除具有先前设置的行才能使用。
答案 2 :(得分:11)
还要确保你在Project和Targets中设置了这个...花了我一个小时来计算出来。把它设置为一个而不是另一个。希望这可以帮助。 GLTA
答案 3 :(得分: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?)
然而,我可能在armv7编译器和iOSSDK上有一些内存损坏< 5.0它的行为符合预期。
祝你好运
答案 4 :(得分:7)
不确定这是否真的是一个解决方案,但我发现用“armv6 armv7”替换“架构”中定义的字符串($(ARCHS_STANDARD_32_BIT))允许我用iOS5作为基础和iOS4进行编译作为部署目标,并通过验证。
我没有使用任何IOS5独有的库或电话,但打算在我的下一个版本中使用。
答案 5 :(得分:1)
我只需用armv7替换$(ARCHS_STANDARD_32_BIT)即可编译并上传到App Store。
根据MarkGranoff的建议,我只是将armv6添加为纯文本,通过点击加号并在第二行输入。