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

时间:2014-03-11 14:35:33

标签: ios xcode xcode5.1

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

 No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).

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

Xcode target build settings

我尝试将“构建活动架构”更改为“否”,并将“i386”添加到“有效架构”,但遗憾的是两者都没有工作。 谢谢你的任何建议!

18 个答案:

答案 0 :(得分:182)

您需要做的只是将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 3,{{1 }}
  • ARMv6:iPad MiniiPhoneiPhone 3G

为什么“将iPod 1G/2G设置为ONLY_ACTIVE_ARCH有效?因为设备仍然可以运行为您添加的所有体系结构构建的二进制文件(传递构建),但会丢失一些性能。这只是一个快速的解决方案,但不是最好的。


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

答案 1 :(得分:102)

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

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

答案 2 :(得分:28)

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

答案 3 :(得分:27)

如果您使用的是CocoaPods,最可能的问题是因为您的Pods项目仅构建活动架构的构建设置被设置为以进行调试。

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

同样,更改为应用项目的

答案 4 :(得分:12)

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

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

答案 5 :(得分:10)

添加: 架构:$(ARCHS_STANDARD_INCLUDING_64_BIT)

有效的架构:arm64 armv7 armv7s

答案 6 :(得分:5)

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

答案 7 :(得分:5)

避免安装" pod安装"每次运行时重置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

答案 8 :(得分:3)

只需在有效的架构中添加arm64。我希望它能为您服务。

答案 9 :(得分:3)

我的问题是Pods项目的目标是OS X,尽管我的Podfile有platform :ios。我使用的是cocoapods 0.35.0.rc2。

要修复它,请在项目导航器中选择Pods项目,并检查Pods PROJECT节点(请注意,而不是Pods目标)是否针对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

答案 10 :(得分:3)

我必须将以下i386x86_64添加到Valid Architectures。我正在运行Xcode 7.2并定位到iOS 8+。我已经在那里armv7armv7sarm64,这在Xcode 6.4中有效。

答案 11 :(得分:2)

I arrived at this question due to a problem with command line build for simulator in Xcode 7.2. In case anyone else gets here with the same issue, I will share the solution I found:

Apparently there is a bug in Xcode 7.2导致xcodebuild在尝试构建模拟器时失败时整个页面在iframe中加载。解决方案是指定选项“-destination”,例如:

xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6' build

<强>更新

上面的示例命令将构建一个二进制文件,仅包含iPhone 6的图形。如果二进制文件在其他模拟器上运行,则iPhone 6图形将缩放到平台。包含所有平台的所有图形的better workaround是指定参数PLATFORM_NAME=iphonesimulator,例如:

xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -arch i386 PLATFORM_NAME=iphonesimulator build

答案 12 :(得分:1)

我在使用xcode 5.1在iPad上运行我的应用时遇到了同样的问题。它通过从“有效架构”中删除armv7并将“仅构建活动架构”值设置为否来解决。这些字段都可以在您的app-&gt; targets-&gt; build settings-&gt;架构中找到。

答案 13 :(得分:0)

在acrhiecture中 - 有时支持6.0和7.0,我们排除arm64

在架构中 - &gt; acrchitecture - 选择标准架构arm64 armv7 armv7s。  在有效的架构下面,包括用户arm64 armv7 armv7s。 这对我有用。

答案 14 :(得分:0)

尝试删除所有以前的体系结构(即删除ARCHS_STANDARD设置),同时将i386添加到体系结构中。这应该将活动架构更改为i386。我在默认情况下尝试构建armv7时遇到了类似的问题,但它一直在尝试为arm64构建。我将ARCHS_STANDARD更改为ARCHS_STANDARD_32_BIT,这改变了所选的活动架构。

答案 15 :(得分:0)

我使用@Kjuly的答案和具体的一行解决了这个问题:

&#34;无法构建的原因可能是,项目不支持您连接的设备的架构。&#34;

加载Xcode后,它会自动将我的iPad应用程序设置为iPad Air

enter image description here

这导致了依赖性分析错误。

立即更改设备类型解决了问题:

enter image description here

我不知道为什么会这样,但这是一个非常快速的答案,它让我在后台摆弄了很多东西,并立即让应用程序正在测试。我永远不会想到这可能是一件事情,而这么简单的东西会修复它,但在这种情况下确实如此。

答案 16 :(得分:0)

我发现有必要手工输入架构名称:

enter image description here

我不知道为什么这是必要的,即为什么这些值不是从Xcode本身继承的。但是一旦我这样做,问题就消失了。

答案 17 :(得分:0)

在有效体系结构中:选择每个条目(发布,调试)并构建并按退格键。它应该工作

相关问题