Xcode 5.1-无需编译架构(ONLY _ Aactive _ ARCH = YES,active arch = x86 _ 64,VALID _ ARCHS = i386)

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

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

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

Xcode target build settings

我尝试将“ Build Active Architecture”改为“ No”,并将“ i386”添加到“ Valid Architecture”,但不幸的是,两者都没有起作用。 谢谢你的建议!

133387 次浏览

地址: 架构: $(ARCHS _ STANDARD _ INCLUDING _ 64 _ BIT)

有效架构: arm64 armv7 armv7

在升级到 XCode 5.1之后,出现了相同的错误消息。你在用可可豆吗?如果是这样,这应该能解决问题:

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

你需要做的只是将 ONLY_ACTIVE_ARCH设置为 NO(至少对我有用)。下面是它的截图:


编辑:

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

未能构建的原因可能是,该项目不支持所连接的设备的体系结构。因此,最好的解决方案是为您的设备添加正确的架构。下面是一个支持架构和设备的列表:

  • ARMv8/ARM64: iPhone 6iPhone 5siPad AirRetina iPad Mini
  • iPhone 5iPhone 5ciPad 4
  • iPhone 3GSiPhone 4iPhone 4SiPod 3G/4G/5GiPadiPad 2iPad 3iPad Mini
  • iPhoneiPhone 3GiPod 1G/2G

那么为什么 “将 ABC0设置为 NO会起作用呢?因为设备仍然可以运行为您添加的所有架构构建的二进制文件(通过构建) ,但是会失去一些性能。这只是一个快速的解决方案,但不是最好的。


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

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

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

我也遇到过类似的问题。通过在项目构建设置中将 “建筑”更改为“ $(ARCHS _ STANDARD _ 32 _ BIT)”解决了这个问题。

现在,你必须选择 标准体系结构(armv7,arm64)-$(ARCHS _ STANDARD),因为苹果推荐的应用程序都是建立在64位元上的

当我使用 xcode 5.1在 iPad 上运行应用程序时,也遇到了同样的问题。通过从“有效架构”中移除 armv7,并将“仅构建活动架构”值设置为“ No”,这个问题得到了解决。这两个字段都可以在应用程序-> 目标-> 构建设置-> 体系结构中找到。

如果您正在使用 CocoaPods,那么最可能的问题是因为您的 Pods 项目的 仅构建活动体系结构构建设置被设置为 是的 for Debug。

解决方法很简单,把它改成 没有

类似地,将应用程序项目更改为 没有

在建筑学中——有时为了支持6.0和7.0,我们排除了 arm64

在体系结构-> 体系结构-选择标准体系结构 arm64 armv7 armv7。 下面的有效体系结构中包含了用户 arm64 armv7 armv7。 这招对我很管用。

以防万一,对于任何人仍然遇到这个问题,尽管遵循以上,检查您正在运行的模拟器也是受支持的。我把我的指定为 arm7和 arm7,但试图在64位模拟器上运行应用程序。

为了避免每次运行“ pod install”时只重置 _ 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

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

我的问题是 Pods 项目是针对 OS X 的,尽管我的 Podfile 有 platform :ios

要修复这个问题,请在项目导航器中选择 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

我用@KJuly 的回答和一句特别的话解决了这个问题:

“未能构建的原因可能是,该项目不支持所连接设备的体系结构。”

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

enter image description here

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

改变设备类型立即解决了这个问题:

enter image description here

我不知道为什么这个工作,但这是一个非常快速的答案,节省了我很多在后台摆弄,并立即让应用程序工作测试。我从来没有想到,这可能是一个东西,这么简单的东西会修复它,但在这种情况下,它做到了。

我必须将以下 i386x86_64添加到 Valid Architectures。我正在运行 Xcode 7.2,目标是 iOS 8 + 。我已经有 armv7armv7sarm64在那里,这是工作在 Xcode 6.4。

由于 Xcode 7.2中模拟器命令行构建的问题,我遇到了这个问题。如果其他人也有同样的问题,我将分享我发现的解决方案:

显然有 Xcode 7.2中的 bug,导致 xcodebuild失败时,试图建立模拟器。解决方案是指定选项“-target”,例如:

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

更新

上面的示例命令将构建一个二进制文件,其中仅包含 iPhone6的图形。如果二进制文件在其他模拟器上运行,iPhone6的图形将被缩放到该平台上。包含所有平台的所有图形的 更好的解决办法是指定参数 PLATFORM_NAME=iphonesimulator,例如:

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

我发现有必要手工输入建筑名称:

enter image description here

我不知道为什么这是必要的,也就是说,为什么这些价值观没有继承自 Xcode 本身。但一旦我这么做了,问题就解决了。

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