ChatGPT解决这个技术问题 Extra ChatGPT

Xcode 5.1 - 没有要编译的架构 (ONLY_ACTIVE_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).

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

https://i.stack.imgur.com/NFX1J.png

我尝试将“构建活动架构”更改为“否”,并将“i386”添加到“有效架构”中,但不幸的是两者都不起作用。感谢您的任何建议!

在最新的 iOS 7.1 更新之后,我看到了很多类似的问题,解决方案是省略 arm64。诚然,这并不能解决您的具体问题,但有理由相信 Apple 搞砸了。
谢谢,这是有道理的,我想在 Apple 为此发布更新之前我不会使用 64 位。
Xcode 6.1 上的同样问题,尝试了下面给出的所有解决方案,但它们不起作用。我的项目中有 CocoaPods。关于如何在 Xcode 6.1 上修复它的任何解决方案

K
Kjuly

您需要做的只是将 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 有效?因为设备仍然可以运行为您添加的所有架构构建的二进制文件(通过构建),但会损失一些性能。这只是一个快速的解决方案,但不是最好的。

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


@EmilMarashliev 只是构建目标。当您选择根项目(带有蓝色图标)时,您会看到它。
@Praveen 不确定,似乎这个选项在 Xcode 5.1 中得到了改变。
这是正确的答案,你在这里救了我一辈子,谢谢:)
这是最清楚最完整的答案。绝对应该是认可的!!!谢谢
这很有帮助。如果您可以添加如何下载所需的架构,答案将是完整的。
M
Mike Onorato

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

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


通过从 Pod 架构中移除 arm64 来修复。
在 Cordova/PhoneGap 项目中也为我解决了同样的问题。谢谢
x
xardas

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


s
samwize

如果您使用的是 CocoaPods,最可能的问题是因为您的 Pods 项目 Build Settings for Build Active Architecture Only 设置为 Yes 进行调试。

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

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


J
Jayprakash Dubey

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

现在,您必须选择 Standard architectures (armv7, arm64) - $(ARCHS_STANDARD),因为苹果建议应用程序构建在 64 位架构上。点击:Apple document


@JayprakashDubey,这个呢? $(ARCHS_STANDARD_INCLUDING_64_BIT) ?
我应该使用 $(ARCHS_STANDARD_32_BIT) 还是 $(ARCHS_STANDARD_INCLUDING_64_BIT)
@hagile:使用 $(ARCHS_STANDARD_INCLUDING_64_BIT)
A
AntonijoDev

添加:架构:$(ARCHS_STANDARD_INCLUDING_64_BIT)

有效架构:arm64 armv7 armv7s


嗯,您是否尝试重置所有内容、模拟器内容、模拟器、清理项目、重新启动 xCode 和 Mac,因为我有 xCode5.1 并且我的模拟器运行良好
您是否使用 iPhone 4 英寸 64 位运行您的应用程序/模拟器?
i
irs8925

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


+1 是的,就是这个!在检查并重新检查和三次检查一切仍然正常之后,这就是问题所在!
哇。我必须实际插入要构建的设备才能编译正确的目标代码?我只是在嘴里吐了一点。你的帖子为我解决了这个问题,谢谢。
J
Jake Hall

为了避免“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

M
Muhammad Shauket

只需在有效架构中添加 arm64。我希望它对你有用。


J
Jano

我的问题是 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

t
timgcarlson

我必须将以下 i386x86_64 添加到 Valid Architectures。我正在运行 Xcode 7.2 并针对 iOS 8+。我已经有 armv7armv7sarm64 并且在 Xcode 6.4 中工作。


A
Anubha

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


J
JRV

由于 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

h
halifix

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


A
Ankish Jain

在架构中-有时为了支持 6.0 和 7.0,我们排除 arm64

在架构 -> 架构 - 选择标准架构 arm64 armv7 armv7s。就在下面的有效架构中使用户 arm64 armv7 armv7s 包括在内。这对我有用。


s
sam_smith

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

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

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

https://i.stack.imgur.com/4Z4c5.png

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

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

https://i.stack.imgur.com/xuKTw.png

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


m
matt

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

https://i.stack.imgur.com/DOMSb.png

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


K
Khaled Annajar

在有效架构中:选择每个条目(发布、调试)并构建并按退格键。它应该工作