Xcode不能在所选目标上运行。

55

今天早上我在运行我的应用程序,但突然间,当我试图在iPhone 5.1模拟器上运行时,出现了以下错误。

无法在所选目标上运行

该目标不支持所选软件构建的架构。请切换到支持该架构的目标以运行所选软件。

我已经删除了方案,但仍然没有解决方案。

我正在使用Mountain Lion,使用的是xCode 4.4(最近升级到Mountain Lion和xCode 4.4)

更新1:这是我构建设置的视图:

enter image description here

更新2: 这是实际错误,阻止它运行。

enter image description here


我只是重新启动了XCode,问题就解决了。 - Øystein
我有同样的问题。没有解决方法。 - user4234
7
将 Info.plist 从目标中移除(不删除文件本身)。或者只需运行项目验证并修复问题。问题得到解决! - Bagusflyer
@bagusflyer:谢谢,我去项目设置里点击“验证设置”就解决了这个问题,否则每次清理和再次构建都要重新启动Xcode。 - Zennichimaro
1
我的问题是我在 plist 文件中更改了可执行文件的名称 ${EXECUTABLE_NAME}。将其改回后,清除派生数据并重新启动 XCode,我摆脱了错误。 - Chris Ching
37个回答

3
请查看项目和目标构建设置中的架构,并查看是否有变化。当从Xcode 3转换到4时,它会悄悄地造成混乱,给出相同的错误,并最终必须将i386添加到“有效构架”行中。我刚刚查看了我在Xcode 4.1中开始的大型项目,它没有显示任何关于i386的内容,但我有其他更新的项目,在那一行中得到灰色的东西$(ARCHS_STANDARD_32_BIT)。
编辑:我和我的一个专业朋友重新审视了这个问题。我们都找不到项目中与i386相关的联系- Xcode使用了一些魔法。也就是说,我在项目中的二进制plist中找到了i386的匹配项,这让我想起了另一个建议。
在您的构建设置中,请确保所有“构架”都是$(ARCHS_STANDARD_32_BIT)。
如果这样仍然不起作用,我们建议您在方案菜单中选择iPhone 5.1模拟器时查看构建的编译和ld行-以查看实际上是否是i386,
另一个想法是将所有模式和用户设置移动到某个保存文件夹中(关闭项目),然后重新打开并创建模式。现在再试一次。在我的project.pbxproj文件中没有关于i386的参考,所以我们怀疑这与目标设备的方案设置有关。祝你好运!

我更新了问题,并附上了我的目标设置的截图,与项目设置相同。 - azamsharp
奇怪的是,这一切都始于我将项目从文档目录复制到桌面上。是的,我已经清理并重新构建了。之前重启后可以工作,但经过多次重建后,我又遇到了相同的错误。 - azamsharp
我尝试从原始位置运行项目,但仍然出现相同的问题。项目构建正常,只有在尝试运行时才会出现错误对话框。此外,在构建窗口中没有显示任何内容。 - azamsharp
你认为我需要下载 iOS 4 模拟器或其他东西吗? - azamsharp
我相信这肯定是一个问题,因为我刚刚运行了另一个旧项目,它可以正常运行。但这没有意义,因为这是否意味着我不能将项目复制到不同的文件夹中。 - azamsharp
显示剩余10条评论

2

我认为许多这些解决方案都需要进行完全重建,而这正是解决我的问题的方法。

我执行了“Product => Clean”,问题就消失了。


2
在我的情况下,问题出现在删除整个资源文件夹后,将其他或旧项目的资源文件夹复制到当前项目中,然后再添加回该文件夹。
我通过分析工具解决了这个问题:在分析后,它提醒我关于“复制捆绑资源”中的Info.plist。
只需进入Copy Bundle Resource(在Build Phrase选项卡中),删除Info.plist,然后重新启动Xcode,清理并构建。我的项目恢复正常。
希望这能帮助某些人 :)

2

我曾经遇到了和你一样的问题,以下是简要说明和我的解决方案。这种方法可能适用于你的情况。

我在一个有多个iOS项目的地方工作。最近我将系统升级到了Mac OSX 10.8和Xcode 4.4.1。我正在开发一个最初是在Xcode 4.1上为iOS 4构建的项目。由于Xcode只有iOS 4模拟器直到4.3,所以该项目在所有模拟器上都能够成功构建和运行。然而,在Xcode 4.4.1中,我没有找到iOS 4模拟器,也没有简单的方法来安装它们,这就是我得到“无法在所选目标上运行”的错误的原因。以下是我让项目运行的方法。

  • 检查 Build Settings > Architectures,并将Architectures设置为Standard (armv7)${ARCHS_STANDARD_32_BIT},适用于您的所有配置文件。

  • 在我的情况下,将Base SDK设置为Latest iOS(<iOS版本号>) 5.1。

  • 对于所有配置文件,将Build Active Architecture Only设置为NO

  • 对于所有配置文件,将Valid Architectures设置为armv6 armv7。您可能需要添加其中一个,具体取决于已有的内容。

  • 将设置为iOS 5.1(在我的情况下)。

  • 确保你的项目在Summary选项卡下的Deployment Target下有相同的目标。

清理一下并运行,祝你好运!


2

对我而言,这个方法行得通:检查设置和plist文件中所有产品引用是否一致。此外,还要检查产品名称中是否包含任何空格或其他“非法”字符。


在 Bundle 名称中有空格导致了我的问题!感谢您的提示。 - Romain Champourlier

2
我遇到了同样的问题。在我的情况下,似乎是我更改了多目标项目的Bundle名称而不是产品名称。一旦我通过正确编辑项目名称并将Bundle名称设置回${PRODUCT_NAME}来进行更正,它就可以在模拟器中运行了。
这可能不是每个人的答案,但是似乎产品命名错误(特殊字符、空格等)是许多人的贡献者,这促使我重新审查了我所做的重命名。

在我的情况下,确切地说是空格字符! - Eugene Pinchuk

1
尝试重命名您的项目。我就是用这种方法解决的。

1
从回复来看,这种类型的错误有许多潜在的来源,所以这是我自己(虽然有点粗心)犯的错误(和简单的解决方案):
  • XCode项目构建设置可以在两个级别上设置:项目级别和目标级别。对于那些不太熟悉的人来说,目标级别是您的可执行应用程序,通常还包括动态库构建等其他项目。
  • 在构建设置的链接部分中,有一个Mach-O类型选项,您可以在其中设置可执行文件、动态库、静态库等。
  • 我在准备动态库时遇到了麻烦,正在扫描项目的构建设置,并发现Mach-O为空白。所以我设置为动态库。然后我继续查看了一些其他内容,忘记了我已经进行了此更改。但我没有意识到我处于整个项目级别,而不是实际动态库的目标级别。这将所有目标Mach-O设置更改为动态库。
  • 当然,可执行目标不喜欢被视为动态库,我得到了OP的错误消息。
  • 将可执行文件设置回其目标级别的可执行Mach-O构建设置即可解决所有问题。令人恼火的是,项目级别设置仍然显示为动态库,但是正确的目标级别设置可以正常工作。
有点傻,但由于上面列出的一些更激烈的解决方案间接地解决了这个错误,我想分享一下,以防其他人犯同样的错误!

1
经过半天的实验,我认为这意味着调试器找不到要启动的可执行文件。我认为这是与之前答案的重要区别,因为它是一个潜在的原因,可能有很多症状。在我的情况下,它不能协调应用程序的Info.plist和我们复制构建的plist的自定义构建。我将构建设置更改为AltDebug的Alt-Info.plist,问题得到了解决。同时也意味着不再需要复制。你的潜在原因可能不同,所以关键是要考虑为什么Xcode可能无法找到你构建的应用程序。

1

我尝试了这里提到的所有方法,都没有效果。看起来我不知道怎么把Info.plist导入了两次。为了解决这个问题,我选择了项目并按下了“验证设置”按钮。之后它对我有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接