Xcode 5.1 - 没有架构可供编译 (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386)

170

更新到Xcode 5.1后,我无法再为64位模拟器构建我的项目,出现以下错误:

 No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).
这是我的目标构建设置: Xcode目标构建设置 我尝试将“构建活动架构”更改为“否”,以及将“i386”添加到“有效架构”,但不幸的是两者都没有起作用。感谢任何建议!

4
最近iOS 7.1更新后,我看到了很多类似的问题,解决方案是去除arm64。诚然,这并不能解决你具体的问题,但有理由相信苹果出了点问题。 - dandan78
谢谢,那很有道理,我想在苹果发布更新之前我不会使用64位。 - ebi
1
可能是[EXC_BAD_ACCESS,code 1,iOS 7.0.x 64位设备]的重复问题(https://dev59.com/DH3aa4cB1Zd3GeqPdnuj)。 - Vlad Z.
在Xcode 6.1上遇到了同样的问题,尝试了下面提供的所有解决方案,但都没有起作用。我的项目中有CocoaPods。请问有没有什么解决方法可以在Xcode 6.1上解决这个问题? - Vinayaka Karjigi
18个回答

184
你需要做的就是将ONLY_ACTIVE_ARCH设置为NO(至少对我有效)。以下是截图:


编辑:

据我所知(如有错误,请指出,谢谢),如果你将ONLY_ACTIVE_ARCH设置为YES,那么Xcode只会为当前活动设备建立构建(即Xcode当前活动的设备)。看来Xcode的默认设置为Debug设置为YES, 因此,在您只想为连接到您的Mac的特殊设备构建时,它不会为其他体系结构构建二进制文件。
构建失败的原因可能是项目不支持您连接的设备的架构。因此,最好的解决方案是为您的设备添加正确的架构。下面是支持的设备及其体系结构的列表:
  • ARMv8/ARM64: iPhone 6iPhone 5siPad AirRetina iPad Mini
  • ARMv7s: iPhone 5iPhone 5ciPad 4
  • ARMv7: iPhone 3GSiPhone 4iPhone 4SiPod 3G/4G/5GiPadiPad 2iPad 3iPad Mini
  • ARMv6: iPhoneiPhone 3GiPod 1G/2G
所以为什么将ONLY_ACTIVE_ARCH设为NO可以生效呢?因为设备仍然可以运行为所有架构构建的二进制文件(通过构建),但会降低一些性能。这只是一个快速的解决方案,而不是最佳选择。
注意:你添加的架构越多,生成的二进制文件就越大。所以为你的项目选择正确的架构是很重要的。 ;)

@EmilMarashliev 只需构建目标。当您选择根项目(带有蓝色图标)时,您将看到它。 - Kjuly
@Praveen 不确定,似乎这个选项在 Xcode 5.1 中已更改。 - Kjuly
1
这非常有帮助。如果您能添加如何下载所需的架构,答案将更加完整。 - Kalpesh Popat

102

在升级到XCode 5.1之后,我也遇到了同样的错误消息。您是否在使用CocoaPods?如果是,则应执行以下操作以解决问题:

  1. 从Xcode左侧窗格中的工作区中删除“Pods”项目并关闭Xcode。
  2. 从命令行运行“pod install”以重新创建“Pods”项目。
  3. 重新打开Xcode,并确保在“Pods”项目和您自己的项目的构建设置中,“仅构建活动架构”设置为“否”。
  4. 进行清理和构建。

1
通过从Pods架构中移除arm64来解决问题。 - ebi
同样的问题在我的 Cordova/PhoneGap 项目中也得到了解决。谢谢。 - Rocco

29

arm64添加到目标的valid architectures中。看起来它还将x86-64架构添加到模拟器有效体系结构中。


27

如果您正在使用CocoaPods,最有可能的问题是因为您的Pods项目构建设置中仅构建活动架构在调试模式下设置为Yes

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

同样地,将应用程序项目更改为No


12

我曾遇到类似问题。通过在项目的构建设置中将"Architecture"更改为"$(ARCHS_STANDARD_32_BIT)",我解决了该问题。

现在,你需要选择标准体系结构(armv7、arm64) - $(ARCHS_STANDARD),因为苹果公司建议应用程序构建在64位体系结构上。点击:苹果文档


@JayprakashDubey,这个怎么样?$(ARCHS_STANDARD_INCLUDING_64_BIT) - Hemang
我应该使用 $(ARCHS_STANDARD_32_BIT) 还是 $(ARCHS_STANDARD_INCLUDING_64_BIT) - Hemang
@hagile: 使用$(ARCHS_STANDARD_INCLUDING_64_BIT)。 - Jayprakash Dubey

10

添加: 架构: $(ARCHS_STANDARD_INCLUDING_64_BIT)

有效的架构: arm64 armv7 armv7s


嗯,你尝试过重置所有内容、模拟器内容、模拟器、清理项目、重新启动xCode和Mac吗?因为我使用的是xCode5.1,我的模拟器运行良好。 - AntonijoDev
你是用iPhone 4英寸64位运行你的应用程序/模拟器吗? - ebi

5
为了避免每次运行“pod install”时都会重置debug的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

5

如果您遵循上述步骤仍然遇到问题,请确保您运行的模拟器也是受支持的。我将我的指定为arm7和arm7s,但尝试在64位模拟器上运行应用程序。


+1 是的,就是这个!在检查、重新检查和三重检查确认一切仍然正常后,发现这就是问题所在! - JOM
1
哇,我必须实际插入我想要构建的设备,以便编译正确的目标代码?我刚刚有点反胃了。你的帖子解决了我的问题,谢谢。 - user562566

3
我的问题是,Pods项目针对的是OS X,尽管我的Podfile中有“platform:ios”。我使用的是cocoapods 0.35.0.rc2。
要解决这个问题,请在项目导航器中选择Pods项目,并检查Pods PROJECT节点(请注意,不是Pods target)是否以iOS为目标。也就是说,建筑设置应该是:
架构: $(ARCHS_STANDARD) 基本SDK: iOS 8.1 支持平台: iOS 有效的结构: $(ARCHS_STANDARD)
我还想构建所有架构,所以我在Podfile中添加了以下内容:
post_install do | installer |
    installer.project.build_configurations.each do |config|
        config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
    end
end

3

我需要将以下内容添加到有效架构中:i386x86_64。 我正在运行Xcode 7.2,并针对iOS 8+进行开发。 在Xcode 6.4中,我已经将armv7armv7sarm64添加进去了,那时是可以工作的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接