更新到 Xcode 5.1 后,我无法再为 64 位模拟器构建项目,收到以下错误:
No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).
这些是我的目标构建设置:
https://i.stack.imgur.com/NFX1J.png
我尝试将“构建活动架构”更改为“否”,并将“i386”添加到“有效架构”中,但不幸的是两者都不起作用。感谢您的任何建议!
您需要做的只是将 ONLY_ACTIVE_ARCH
设置为 NO
(至少对我有用)。下面是它的截图:
https://i.imgur.com/e918pG7.png
编辑:
据我所知(如果有问题请指出,谢谢),如果您将 ONLY_ACTIVE_ARCH
设置为 YES
,则意味着 Xcode 只会为活动架构构建(指到当前在 Xcode 中活动的设备)。似乎 Xcode 的默认设置将调试设置为 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
” 有效?因为设备仍然可以运行为您添加的所有架构构建的二进制文件(通过构建),但会损失一些性能。这只是一个快速的解决方案,但不是最好的。
注意:您添加的架构越多,生成的二进制文件就越大。因此,最好为您的项目选择正确的架构。 ;)
升级到 XCode 5.1 后,我收到了同样的错误消息。你在使用 CocoaPods 吗?如果是这样,这应该可以解决问题:
从 Xcode 左侧窗格的工作区中删除“Pods”项目并关闭 Xcode。从命令行运行“pod install”以重新创建“Pods”项目。重新打开 Xcode 并确保在“Pods”项目和您自己的项目的构建设置中将“Build Active Architecture Only”设置为“No”。清洁和建造。
将 arm64
添加到目标的 valid architectures
。看起来它也将 x86-64
架构添加到模拟器有效架构中。
如果您使用的是 CocoaPods,最可能的问题是因为您的 Pods 项目 Build Settings for Build Active Architecture Only 设置为 Yes 进行调试。
解决方案很简单。将其更改为否。
同样,将您的应用程序项目更改为否。
我有类似的问题。通过在项目的构建设置中将“架构”更改为“$(ARCHS_STANDARD_32_BIT)”来解决它。
现在,您必须选择 Standard architectures (armv7, arm64) - $(ARCHS_STANDARD),因为苹果建议应用程序构建在 64 位架构上。点击:Apple document
$(ARCHS_STANDARD_INCLUDING_64_BIT)
?
$(ARCHS_STANDARD_32_BIT)
还是 $(ARCHS_STANDARD_INCLUDING_64_BIT)
?
添加:架构:$(ARCHS_STANDARD_INCLUDING_64_BIT)
有效架构:arm64 armv7 armv7s
以防万一,对于尽管遵循上述操作仍遇到问题的任何人,请检查您正在运行的模拟器是否也是受支持的模拟器。我已将我的指定为 arm7 和 arm7s,但试图在 64 位模拟器上运行该应用程序。
为了避免“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
只需在有效架构中添加 arm64。我希望它对你有用。
我的问题是 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
我必须将以下 i386
和 x86_64
添加到 Valid Architectures
。我正在运行 Xcode 7.2 并针对 iOS 8+。我已经有 armv7
、armv7s
和 arm64
并且在 Xcode 6.4 中工作。
使用 xcode 5.1 在 iPad 上运行我的应用程序时,我遇到了同样的问题。它通过从“有效架构”中删除 armv7 并将“仅构建活动架构”值设置为否来解决。这两个字段都可以在您的应用程序->目标->构建设置->架构中找到。
由于 Xcode 7.2 中模拟器的命令行构建问题,我遇到了这个问题。万一其他人遇到同样的问题,我将分享我找到的解决方案:
显然有 a bug in Xcode 7.2 导致 xcodebuild
在尝试构建模拟器时失败。解决方案是指定选项“-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
尝试在将 i386 添加到架构的同时删除所有以前的架构(即删除 ARCHS_STANDARD 设置)。这应该将活动架构更改为 i386。我在默认情况下尝试为 armv7 构建时遇到了类似的问题,但它一直在尝试为 arm64 构建。我将ARCHS_STANDARD 更改为ARCHS_STANDARD_32_BIT,这改变了所选的活动架构。
在架构中-有时为了支持 6.0 和 7.0,我们排除 arm64
在架构 -> 架构 - 选择标准架构 arm64 armv7 armv7s。就在下面的有效架构中使用户 arm64 armv7 armv7s 包括在内。这对我有用。
我使用@Kjuly 的答案和特定行解决了这个问题:
“构建失败的原因可能是,该项目不支持您连接的设备的架构。”
加载 Xcode 后,它会自动将我的 iPad 应用程序设置为 iPad Air
https://i.stack.imgur.com/4Z4c5.png
这导致了依赖性分析错误。
更改设备类型立即解决了问题:
https://i.stack.imgur.com/xuKTw.png
我不知道为什么会这样,但这是一个非常快速的答案,它为我节省了很多在后台摆弄的时间,并立即让应用程序开始测试。我永远不会想到这可能是一件事,而且这么简单的事情就可以解决它,但在这种情况下它确实做到了。
我发现有必要手动输入架构名称:
https://i.stack.imgur.com/DOMSb.png
我不知道为什么这是必要的,即为什么这些值不是从 Xcode 本身继承的。但是一旦我这样做了,问题就消失了。
在有效架构中:选择每个条目(发布、调试)并构建并按退格键。它应该工作