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).
这些是我的目标版本设置:
我尝试将“构build活动架构”更改为“否”,并将“i386”添加到“有效架构”,但是都不成功。 感谢您的任何build议!
升级到XCode 5.1后,我有相同的错误信息。 你在用CocoaPods吗? 如果是这样,这应该解决这个问题:
- 从Xcode的左窗格的工作区中删除“Pods”项目并closuresXcode。
- 从命令行运行“pod install”重新创build“Pods”项目。
- 重新打开Xcode,并确保“Pods”项目和您自己的项目的构build设置中的“Build Active Architecture Only”设置为“No”。
- 清理和build立。
你需要做的只是设置ONLY_ACTIVE_ARCH
为NO
(至less适用于我)。 下面是它的截图:
编辑:
据我所知( 请指出,如果有什么问题,谢谢 ),如果您设置ONLY_ACTIVE_ARCH
为YES
,这意味着Xcode将只为活动架构(指当前在Xcode中活动的设备)构build。 似乎Xcode的默认设置是将Debug设置为YES
,所以当您只想为连接到Mac的特殊设备构build时,它不会为其他体系结构构build二进制文件。
无法build立的原因可能是,该项目不支持您连接的设备的体系结构。 所以最好的解决scheme是为您的设备添加正确的架构。 以下是支持的体系结构和设备列表:
- 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
”起作用? 因为设备仍然可以运行为所添加的所有体系结构(传递构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
我不得不将以下i386
和x86_64
添加到Valid Architectures
。 我正在运行Xcode 7.2并定位iOS 8+。 我已经有armv7
, armv7s
和arm64
在那里,并在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并按退格键。 它应该工作