繁体   English   中英

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

[英]How to build for armv6 and armv7 architectures with iOS 5

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

为了保持对iPhone3G的支持,即使在iOS5中,我仍然想在armv6中进行编译。

有人找到解决方案了吗?

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

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

我们还添加了一些特定于iOS5的功能,以使应用程序在iOS4下运行而不会崩溃的方式。 具体来说,我们在尝试使用iOS5功能之前进行了测试,并将仅iOS5的库链接为可选。

因此,在iOS5世界中支持iPhone3G可能很容易意味着“我们希望我们的应用程序在iOS4及更高版本上运行(无论使用任何iOS5功能)”,而不是“我们希望确保我们的应用程序在运行iOS5的旧设备上运行”。 这里有所不同; 考虑一下。 :-)

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

简单的答案是,您必须将当前设置从“标准(armv7)-$(ARCHS_STANDARD_32_BIT)”更改为“ armv6”和“ armv7”。 参见下图。 您必须先删除具有先前设置的行,然后才能使用它。

正确设置armv6和armv7

还请确保您在“项目和目标”中进行了设置...花了我一个小时才能弄清楚。 将它设置为一个,但没有另一个。 希望这可以帮助。 GLTA

我认为Apple从标准设置中删除armv6是有原因的。

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

因此,只要支持较旧的armv6设备,我将返回iOS SDK4.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上,它的行为符合预期。

最好的祝福

不确定这是否真的是解决方案,但是我发现用“ armv6 armv7”替换“ architectures”中的已定义字符串($(ARCHS_STANDARD_32_BIT)),使我可以将iOS5作为基础,将iOS4进行部署定位并通过验证。

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

我不需要用armv7替换$(ARCHS_STANDARD_32_BIT)即可编译应用程序并将其上传到App Store。

正如MarkGranoff所建议的那样,我只需将armv6添加为纯文本,只需点击加号并在第二行中键入它即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM