Xcode 5.1 – 无需编译的架构(ONLY_ACTIVE_ARCH = YES,活动arch = x86_64,VALID_ARCHS = i386)

在更新到Xcode 5.1之后,我不能再为64位模拟器build立我的项目,接收到这个错误:

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

这些是我的目标版本设置:

Xcode目标构建设置

我尝试将“构build活动架构”更改为“否”,并将“i386”添加到“有效架构”,但是都不成功。 感谢您的任何build议!

升级到XCode 5.1后,我有相同的错误信息。 你在用CocoaPods吗? 如果是这样,这应该解决这个问题:

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

你需要做的只是设置ONLY_ACTIVE_ARCHNO (至less适用于我)。 下面是它的截图:


编辑:

据我所知( 请指出,如果有什么问题,谢谢 ),如果您设置ONLY_ACTIVE_ARCHYES ,这意味着Xcode将只为活动架构(指当前在Xcode中活动的设备)构build。 似乎Xcode的默认设置是将Debug设置为YES ,所以当您只想为连接到Mac的特殊设备构build时,它不会为其他体系结构构build二进制文件。

无法build立的原因可能是,该项目不支持您连接的设备的体系结构。 所以最好的解决scheme是为您的设备添加正确的架构。 以下是支持的体系结构和设备列表:

  • 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起作用? 因为设备仍然可以运行为所添加的所有体系结构(传递构build)构build的二进制文件,但是会失去一些性能。 这只是一个快速的解决scheme,但不是最好的。


注意 :您添加的体系结构越多,生成的二进制文件就越大。 所以为您的项目select正确的体系结构是很好的。 ;)

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

如果您使用的是CocoaPods,最可能的问题是因为您的Pods项目的“ Build Active Build Only ”的“生成设置”设置为是”以进行debugging。

解决scheme很简单。 将其更改为

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

我有类似的问题。 通过在“项目的生成设置”中将“体系结构”更改为“ $(ARCHS_STANDARD_32_BIT) ”解决。

现在,您必须select标准体系结构(armv7,arm64) – $(ARCHS_STANDARD),因为苹果build议应用程序构build在64位体系结构上。 点击: 苹果文件

添加:体系结构:$(ARCHS_STANDARD_INCLUDING_64_BIT)

有效的体系结构:arm64 armv7 armv7s

以防万一,任何人仍然遇到问题,尽pipe如此,检查您正在运行的模拟器也是支持的。 我有我的指定为arm7和arm7s,但试图在64位模拟器上运行应用程序。

为了避免在每次运行时将“pod install”重置为only_active_arch进行debugging,可以将以下内容添加到您的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 

只要在有效的架构中添加arm64,我希望它能为你工作。

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

要修复它,请select项目导航器中的Pods项目,并检查Pods PROJECT节点(介意你,而不是Pods目标)是否定位到iOS。 也就是说,体系结构的设置应该是:

  • 架构: $(ARCHS_STANDARD)
  • 基础SDK: iOS 8.1
  • 支持的平台: iOS
  • 有效的体系结构: $(ARCHS_STANDARD)

我也想构build所有的体系结构,所以我将以下内容添加到了Podfile中:

 post_install do | installer | installer.project.build_configurations.each do |config| config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO' end end 

我不得不将以下i386x86_64添加到Valid Architectures 。 我正在运行Xcode 7.2并定位iOS 8+。 我已经有armv7armv7sarm64在那里,并在Xcode 6.4工作。

由于在Xcode 7.2中模拟器的命令行构build问题,我到了这个问题。 如果有人遇到同样的问题,我将分享我find的解决scheme:

显然在Xcode 7.2中有一个错误 ,导致xcodebuild在尝试构build模拟器时失败。 解决scheme是指定选项“-destination”,例如:

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

更新

上面的示例命令将只生成包含iPhone 6graphics的二进制文件。 如果二进制文件在其他模拟器上运行,那么iPhone 6graphics将被缩放到平台。 包含所有平台的所有graphics的更好的解决方法是指定参数PLATFORM_NAME=iphonesimulator ,例如:

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

使用xcode 5.1在iPad上运行我的应用程序时遇到同样的问题。 它通过从“有效架构”中删除armv7并将“仅将构build活动架构”值设置为“无效”来解决。这两个字段都可以在您的应用程序 – >目标 – >构build设置 – >体系结构中find。

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

有时候为了支持6.0和7.0,我们排除了arm64

在架构 – > acrchitecture – select标准架构arm64 armv7 armv7s。 下面在有效的acrchitecture使用户arm64 armv7 armv7s是包括在内。 这对我有效。

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

“失败的原因可能是,该项目不支持你连接的设备的架构。”

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

在这里输入图像描述

这导致依赖性分析错误。

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

在这里输入图像描述

我不知道为什么这个工程,但这是一个非常快速的答案,节省了我在后台摆弄了很多,并立即让应用程序工作testing。 我永远不会想到,这可能是一件事情,而这样简单的事情就可以解决它,但在这种情况下,它确实。

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

在这里输入图像描述

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

在有效的体系结构中:select每个条目(发布,debugging)并构build并按退格键。 它应该工作