“警告:iPhone应用程序应包含armv6架构”,即使使用构建配置集也是如此

时间:2010-11-16 20:35:59

标签: ios xcode

因为我不得不调整项目构建设置已经有一段时间了。升级到最近的SDK后,我无法构建我的ad hoc分发配置。

Build会生成此警告和错误:

  

警告:iPhone应用程序应该包含armv6架构(当前   ARCHS =“armv7”)

     

iPhone / iPod Touch:缺少必需的应用程序可执行文件   建筑。必须至少有以下架构之一   现在:armv6(-19033)

然而,在我的项目中,我认为我的设置正确:

  • 架构是:标准(armv6 armv7)
  • 基础SDK:最新的iOS(目前设置为iOS 4.2)
  • 有效架构:armv6 armv7

alt text

我清理了所有目标。

我感谢任何提示。

17 个答案:

答案 0 :(得分:417)

如果使用Xcode 4.2或更高版本,请尝试以下操作:

  1. 单击您的项目名称(在左栏中),然后单击目标:

    enter image description here

  2. 点击“构建设置”标签(右栏):

    enter image description here

  3. 点击“架构”下的“发布”或“分发”行,然后选择“其他...”:

    enter image description here

  4. 在出现的弹出窗口中双击名为“$(ARCHS_STANDARD_32_BIT)”的突出显示的行,然后键入“armv6”进行替换。然后使用弹出框左下角的加号按钮添加一个新行,并键入“armv7”,然后单击“完成”:

    enter image description here

  5. 更新:你应该添加armv7s来定位iPhone 5。 (如果使用Xcode 4.5或更高版本构建,则放下armv6,不再支持armv6。)

    就是这样。您现在应该能够构建/存档而不会产生错误。

    如果仍然无效,请参阅this answer from justinxreese,其中建议在info.plist文件中的“必需的设备功能”下添加armv6和armv7的条目。

答案 1 :(得分:62)

如果取消选中“仅构建活动体系结构”,则它将构建所有有效体系结构。

更新:从Xcode 4开始不再适用 - 请遵循Nick关于Xcode 4及更高版本的说明。

答案 2 :(得分:59)

即使按照接受的答案后我也遇到了这个问题,并发现以下情况:

在Info.plist中,添加必需设备功能的条目。这应该是一个数组,将有两个条目。

  • 项目0:armv6
  • 第1项:armv7

看起来像这样:

Required device capabilities entry

答案 3 :(得分:26)

除了Nick关于Xcode 4.2的回答,您可能还需要查看info.plist文件。似乎默认情况下在Xcode 4.2中启动的新项目在“必需的设备功能”中指定了“armv7”。如果想要支持运行armv6的设备(例如iPhone 3G),则需要删除它。

enter image description here

从您的ProjectName-Info.plist

中的'Required device capabilities'中删除armv7

答案 4 :(得分:21)

ios 6更新

ios 6的Xcode 4.5.x中的更改

  1. Xcode 4.5.x(及更高版本)不支持生成armv6二进制文件。
  2. 现在包括iPhone 5 / armv7s支持。
  3. Xcode 4.5.x或更高版本支持的最低部署目标是iOS 4.3。

答案 5 :(得分:6)

我也有这个问题。我只是将我的部署目标设置为4.3并且只保留了armv7体系结构并且它工​​作正常。几乎每个人都有5个,所以4.3很好。

答案 6 :(得分:3)

对我而言,它不适用于每个答案。但我尝试了TARGETS>架构>使用加号按钮调试并添加一个新行,并键入“armv6”(带有“)”,然后单击“完成”。

最后是CMD + B,然后右键单击PrjectName.app(在Products文件夹中)>在Finder中打开>压缩“PROJECT_NAME.APP”(在Debug-iphoneos中)>上传到AppStore

enter image description here

这是我的屏幕设置。 enter image description here

如果你有包含项目,请配置一切。 希望你的帮助。

答案 7 :(得分:3)

在尝试了这些答案的混合之后,我终于偶然发现了它的工作原理。我现在对Apple很生气。再过一个小时他们就让我浪费了。这是我的配置。

enter image description here

答案 8 :(得分:2)

我尝试了上面的所有答案,没有人解决我的问题。所以我创建了一个新项目并逐个区分构建设置。只有“备用权限文件”是不同的。 项目构建失败具有值armv7。删除它然后清理 - > build->存档。成功! 希望能解决你的问题

答案 9 :(得分:2)

哇,我每6个月更新/提交一次应用程序。每次我这样做,我都要学习“新”的方式来做到这一点......

运行iOS 5.1和Xcode 4.3.2时,与上述问题相同。

感谢帖子!我花了一段时间将所有项目设置更新到armv6,armv7,但没有快乐。当我将“仅构建活动体系结构”设置为“否”时,我遇到了关于将两个对象放在同一目录中的构建错误。

幸运的是,我注意到你们正在修改目标构建设置。这是最终工作的(armv6,armv7,并在Target build Settings下将“仅构建活动体系结构”设置为No)。作为免责声明,我已经在项目设置中将所有架构设置为armv6,armv7。

无论如何,谢谢你的帮助, 布伦特

答案 10 :(得分:2)

我必须确保在xCode 4.3.2上的目标和项目设置中更改这些设置,然后将其设置为armv6和armv7,无论我能够提交我的应用程序。

为了安全起见,我还在进行更改和执行清理,构建,归档周期之前退出了xCode。

答案 11 :(得分:0)

如果xCode继续抱怨armv7,请确保断开任何连接设备(特别是iPhone 5 !!)并重试。花了我几个小时才找到那条小信息。

答案 12 :(得分:0)

请注意;我必须为我的基础项目和我的应用程序中的嵌入式PhoneGap .xcodeproj文件执行这些步骤。

是的,我嵌入了PhoneGap;他们经常更新,我还有不到两个月的时间才能知道某个功能已被折旧。

答案 13 :(得分:0)

尝试将部署目标更改为高于armv6处理器的目标。 xCode的设置引用操作系统级别,例如:iOS版本#{3.1,3.2,4.0,4.1,4.2,4.3,5.0,5.1}

(i)您可以在构建设置选项卡或摘要选项卡中进行设置。从Project Navigator中窗口的左上角开始,其中列出了所有文件。单击最顶部的蓝色图标。

(ii)如果您打算使用通过openGL ES 2.0 API访问和控制的可编程着色器线路电路,那么您应该将“部署版本”设置为大约4.3,我认为这只能在设备上使用例如3GS或更新版本。 xCode报告需要运行armv7代码iOS 4.2.5或更高版本。我相信,这款处理器再一次从3GS开始。* iOS 4.3似乎是我的选择。

http://theiphonewiki.com/wiki/index.php?title=Armv7

http://en.wikipedia.org/wiki/List_of_iOS_devices

答案 14 :(得分:0)

以下是Apple的文档:

Technical Q&A QA1760

它说有两件事你必须做对:

  1. armv6添加到架构构建设置
  2. 仅将构建活动架构设置为No
  3. 如果这仍然无法帮助您,请仔细检查您是否真的在更改正确的构建配置的体系结构构建设置 - 我浪费了半个小时摆弄错误的一个并且想知道它为什么不起作用...

    在“产品”菜单中选择Edit Scheme...,单击左侧列表中的“存档”方案,然后选中“构建配置”。如果它不符合您的预期,请更改该值。

答案 15 :(得分:0)

对我来说也是一个痛苦的问题。花了大约一个小时试图建立和重建 - 没有快乐。最后我必须这样做:

  1. 将基础SDK升级到最新版本(在我的情况下为iOS 5)
  2. 重新启动xCode
  3. 清洁&构建
  4. 它奏效了!
  5. 我想这是关于arm6,arm7的一堆行话,因为看起来我的项目对两者都有效,至少设置似乎这么说了),我的猜测是这是一种玩世不恭的技术性的玩世不恭的方式,这是我们不理解的,所以我们只选择简单的选项并定位最新的iOS(适合Apple,更多人是最新的)....

答案 16 :(得分:0)

在Snow Leopard上使用Xcode 4.2,我使用以下设置构建了一个适用于armv6(Iphone 3G及更低版本)和armv7(比3G更新的一切,包括3GS)的应用程序。

  

架构:armv6和armv7(已删除$(ARCHS_STANDARD_32_BIT))
  仅构建活动体系结构:无需要的设备功能:   的ARMv6

如果您希望应用程序在3G及更低版本上运行,请不要将armv7置于所需的设备功能中。