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


168

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

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

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

Xcode目标构建设置

我尝试将“构建活动体系结构”更改为“否”,并在“有效体系结构”中添加“ i386”,但不幸的是,这两个方法均无效。感谢您的任何建议!


4
在最新的iOS 7.1更新之后,我已经看到了很多类似的问题,解决方案是省去arm64。诚然,这不能解决您的特定问题,但是有理由相信Apple会搞砸了。
dandan78 2014年

谢谢,这是有道理的,我想我不会使用64位,除非Apple发布了此更新。
ebi 2014年


Xcode 6.1上存在相同的问题,尝试了下面给出的所有解决方案,但它们无法正常工作。我的项目中有CocoaPods。关于如何在Xcode 6.1上修复它的任何解决方案
Vinayaka Karjigi,2014年

Answers:


102

升级到XCode 5.1后,我有相同的错误消息。您正在使用CocoaPods吗?如果是这样,这应该可以解决问题:

  1. 从Xcode左窗格的工作区中删除“ Pods”项目,然后关闭Xcode。
  2. 从命令行运行“ pod install”以重新创建“ Pods”项目。
  3. 重新打开Xcode,并确保在“ Pods”项目和您自己的项目的构建设置中将“仅构建活动体系结构”设置为“否”。
  4. 清洁并建造。

1
通过从Pods架构中删除arm64进行修复。
ebi 2014年

我也解决了Cordova / PhoneGap项目中的相同问题。谢谢
Rocco 2014年

182

您需要做的只是将其设置ONLY_ACTIVE_ARCHNO(至少对我有用)。下面是它的屏幕截图:


编辑:

据我所知(请指出,如果有什么问题,谢谢),如果将其设置ONLY_ACTIVE_ARCHYES,则意味着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/5GiPad,,iPad 2iPad 3iPad Mini
  • ARMv6的:iPhoneiPhone 3GiPod 1G/2G

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


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


@EmilMarashliev只是构建目标。选择根项目(带有蓝色图标)时,您会看到它。
2014年

@Praveen不确定,似乎此选项在Xcode 5.1中已更改。
2014年

这是正确的答案,您在这里救了我一辈子,谢谢:)
Bikramjit Singh 2014年

2
这是最清晰,最完整的答案。绝对应该是批准的!!!谢谢
MeV

1
这非常有帮助。如果您可以添加如何下载所需的体系结构,那么答案将是完整的。
Kalpesh Popat'Mar

29

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


27

如果您使用的是CocoaPods,则最可能的问题是因为Pods项目“ 用于构建活动架构的构建设置对于调试设置为“ ”。

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

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


12

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

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


@JayprakashDubey,这个呢?$(ARCHS_STANDARD_INCLUDING_64_BIT)
Hemang 2015年

我应该使用$(ARCHS_STANDARD_32_BIT)还是$(ARCHS_STANDARD_INCLUDING_64_BIT)
Hemang 2015年

@hagile:使用$(ARCHS_STANDARD_INCLUDING_64_BIT)
Jayprakash Dubey

10

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

有效架构:arm64 armv7 armv7s


嗯,您是否尝试过重设所有内容,模拟器内容,模拟器,清理项目,重新启动xCode和Mac,原因是我拥有xCode5.1并且我的模拟器运行良好
AntonijoDev 2014年

您是否正在使用4英寸64位iPhone运行您的应用/模拟器?
ebi 2014年

5

为了以防万一,对于尽管遵循上述步骤仍然遇到问题的任何人,请检查您所运行的模拟器是否也受支持。我已将我的代码指定为arm7和arm7s,但尝试在64位模拟器上运行该应用程序。


+1是的,这是一个!经过检查,重新检查和三重检查后,一切仍然正常,这就是问题所在!
2014年

1
哇。我实际上必须插入要构建的设备,才能编译正确的目标代码?我只是吐了一点口。您的帖子为我解决了这个问题,谢谢。

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


3

我的问题是,尽管我的Podfile具有,但Pods项目却以OS X为目标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

3

我不得不添加以下i386x86_64Valid Architectures。我正在运行Xcode 7.2,并定位到iOS 8+。我已经有了armv7armv7s并且arm64在那里,并且正在Xcode 6.4中工作。


2

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


2

由于Xcode 7.2中用于模拟器的命令行构建存在问题,因此我遇到了这个问题。万一其他人遇到同样的问题,我将分享我发现的解决方案:

显然,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图形将缩放到该平台。包含所有平台的所有图形的一个更好的解决方法是指定参数PLATFORM_NAME=iphonesimulator,例如:

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

0

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


0

在结构设计中-有时支持6.0和7.0,我们排除了arm64

在体系结构->结构中-选择标准体系结构arm64 armv7 armv7s。仅在有效架构下方,包括用户arm64 armv7 armv7s。这对我有用。


0

我使用@Kjuly的答案和特定行解决了这个问题:

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

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

在此处输入图片说明

这导致依赖性分析错误。

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

在此处输入图片说明

我不知道为什么会这样,但这是一个非常快速的答案,这使我节省了很多在后台的麻烦,并立即使该应用程序可以进行测试。我从没想过这可能是一件事,那么简单的事情就能解决它,但在这种情况下,它确实可以解决。


0

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

在此处输入图片说明

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.