更新到Xcode 5.1后,我无法再为64位模拟器构建项目,收到此错误:
No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).
这些是我的目标构建设置:
我尝试将"Build Active Architecture"更改为No,并将"i386"添加到"Valid Architectures",但遗憾的是两者都没有.谢谢你的任何建议!
升级到XCode 5.1后,我收到了同样的错误消息.你在使用CocoaPods吗?如果是这样,这应该解决问题:
从Xcode左窗格中的工作区中删除"Pods"项目并关闭Xcode.
从命令行运行"pod install"以重新创建"Pods"项目.
重新打开Xcode并确保"Pods"项目和您自己的项目的构建设置中的"Build Active Architecture Only"设置为"No".
清洁和建造.
添加arm64
到目标valid architectures
.看起来它也x86-64
为模拟器有效的架构添加了架构.
你需要做的只是设置ONLY_ACTIVE_ARCH
为NO
(至少适合我).下面是它的截图:
据我所知(如果出现问题,请指出它,谢谢),如果设置ONLY_ACTIVE_ARCH
为YES
,则表示Xcode仅针对活动架构(指当前在Xcode中处于活动状态的设备)构建.似乎Xcode的默认设置是Debug to YES
,因此当您只想为连接到Mac的特殊设备构建时,它不会为其他体系结构构建二进制文件.
无法构建的原因可能是,该项目不支持您连接的设备的体系结构.因此,最佳解决方案是为您的设备添加正确的架构.以下是支持的体系结构和设备列表:
ARMv8/ARM64: ,iPhone 6
,,iPhone 5s
iPad Air
Retina iPad Mini
ARMv7s: ,,iPhone 5
iPhone 5c
iPad 4
的ARMv7: ,iPhone 3GS
,iPhone 4
,iPhone 4S
,iPod 3G/4G/5G
,iPad
,,iPad 2
iPad 3
iPad Mini
ARMv6的:iPhone
,iPhone 3G
,iPod 1G/2G
那么为什么"设定ONLY_ACTIVE_ARCH
为NO
"有效呢?因为设备仍然可以运行为您添加的所有体系结构构建的二进制文件(传递构建),但会丢失一些性能.这只是一个快速的解决方案,但不是最好的.
注意:您添加的架构越多,生成的二进制文件就越大.因此,为您的项目选择正确的架构是件好事.;)
如果您正在使用CocoaPods,最可能的问题是因为您的Pods项目Build Build Architecture for Build Active设置为Yes for Debug.
解决方案很简单.将其更改为否.
同样,对您的应用程序项目更改为" 否 ".
添加:架构:$(ARCHS_STANDARD_INCLUDING_64_BIT)
有效的架构:arm64 armv7 armv7s
为避免每次运行时"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
我有类似的问题.通过在项目的构建设置中将"架构"更改为" $(ARCHS_STANDARD_32_BIT) " 来解决它.
现在,您必须选择标准体系结构(armv7,arm64) - $(ARCHS_STANDARD),因为Apple建议在64位体系结构上构建应用程序.单击:Apple文档
为了以防万一,尽管仍然遇到上述问题仍然遇到问题,请检查您运行的模拟器是否也是受支持的模拟器.我有我的指定arm7和arm7s但是试图在64位模拟器上运行应用程序.