Xcode 5.1 - 没有要编译的体系结构(ONLY_ACTIVE_ARCH = YES,活动arch = x86_64,VALID_ARCHS = i386)

ebi*_*ebi 166 xcode ios xcode5.1

更新到Xcode 5.1后,我无法再为64位模拟器构建项目,收到此错误:

 No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).
Run Code Online (Sandbox Code Playgroud)

这些是我的目标构建设置:

Xcode目标构建设置

我尝试将"Build Active Architecture"更改为No,并将"i386"添加到"Valid Architectures",但遗憾的是两者都没有.谢谢你的任何建议!

Kju*_*uly 182

你需要做的只是设置ONLY_ACTIVE_ARCHNO(至少适合我).下面是它的截图:


编辑:

据我所知(如果出现问题,请指出它,谢谢),如果设置ONLY_ACTIVE_ARCHYES,则表示Xcode仅针对活动架构(指当前在Xcode中处于活动状态的设备)构建.似乎Xcode的默认设置是Debug to YES,因此当您只想为连接到Mac的特殊设备构建时,它不会为其他体系结构构建二进制文件.

无法构建的原因可能是,该项目不支持您连接的设备的体系结构.因此,最佳解决方案是为您的设备添加正确的架构.以下是支持的体系结构和设备列表:

  • ARMv8/ARM64: ,iPhone 6,,iPhone 5siPad AirRetina iPad Mini
  • ARMv7s: ,,iPhone 5iPhone 5ciPad 4
  • 的ARMv7: ,iPhone 3GS,iPhone 4,iPhone 4S,iPod 3G/4G/5G,iPad,,iPad 2iPad 3iPad Mini
  • ARMv6的:iPhone,iPhone 3G,iPod 1G/2G

那么为什么"设定ONLY_ACTIVE_ARCHNO"有效呢?因为设备仍然可以运行为您添加的所有体系结构构建的二进制文件(传递构建),但会丢失一些性能.这只是一个快速的解决方案,但不是最好的.


注意:您添加的架构越多,生成的二进制文件就越大.因此,为您的项目选择正确的架构是件好事.;)

  • 这是最清晰,最完整的答案.绝对应该是批准的!!! 谢谢 (2认同)

Mik*_*ato 102

升级到XCode 5.1后,我收到了同样的错误消息.你在使用CocoaPods吗?如果是这样,这应该解决问题:

  1. 从Xcode左窗格中的工作区中删除"Pods"项目并关闭Xcode.
  2. 从命令行运行"pod install"以重新创建"Pods"项目.
  3. 重新打开Xcode并确保"Pods"项目和您自己的项目的构建设置中的"Build Active Architecture Only"设置为"No".
  4. 清洁和建造.


xar*_*das 29

添加arm64到目标valid architectures.看起来它也x86-64为模拟器有效的架构添加了架构.


sam*_*ize 27

如果您正在使用CocoaPods,最可能的问题是因为您的Pods项目Build Build Architecture for Build Active设置为Yes for Debug.

解决方案很简单.将其更改为.

同样,对您的应用程序项目更改为" ".


Jay*_*bey 12

我有类似的问题.通过在项目的构建设置中将"架构"更改为" $(ARCHS_STANDARD_32_BIT) " 来解决它.

现在,您必须选择标准体系结构(armv7,arm64) - $(ARCHS_STANDARD),因为Apple建议在64位体系结构上构建应用程序.单击:Apple文档


Ant*_*Dev 10

添加:架构:$(ARCHS_STANDARD_INCLUDING_64_BIT)

有效的架构:arm64 armv7 armv7s


irs*_*925 5

为了以防万一,尽管仍然遇到上述问题仍然遇到问题,请检查您运行的模拟器是否也是受支持的模拟器.我有我的指定arm7和arm7s但是试图在64位模拟器上运行应用程序.


Jak*_*all 5

为避免每次运行时"pod install"重置only_active_arch进行调试,您可以将以下内容添加到pod文件中

# Append to your Podfile
post_install do |installer_representation|
    installer_representation.project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
        end
    end
end
Run Code Online (Sandbox Code Playgroud)