Xcode 8 beta 4:构建失败,"以下二进制文件使用不兼容的Swift版本:"错误

iGA*_*iGA 30 iphone xcode ios swift3 xcode8

使用new,Xcode 8 beta 4我们在CopySwiftLibs构建阶段开始遇到以下错误:

Effective srcDirs: {(

    <DVTFilePath:0x7f865961e970:'/Volumes/Data/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphonesimulator'>,

    <DVTFilePath:0x7f8657d02b20:'/Volumes/Data/Xcode-beta.app/Contents/Developer/Toolchains/Swift_2.3.xctoolchain/usr/lib/swift/iphonesimulator'>

)}
Run Code Online (Sandbox Code Playgroud)

错误:以下二进制文件使用不兼容的Swift版本:

/Users/user/Projects/git/iphone-swift-1/DerivedData/myApp/Build/Products/Debug-iphonesimulator/myApp.app/myApp

/Users/user/Projects/git/iphone-swift-1/myApp/myAppApi.framework/myAppApi

myAppApi是工作空间中的子项目,包含一些共享代码(它使用Alamofire).

有一点需要注意:最初我们将项目从Swift 2.2转换为Swift 2.3,然后手动升级到3.0.

有谁知道可能导致此错误的原因是什么?

谢谢!

oss*_*pha 67

我有同样的问题,但设法解决它:

  1. 清理项目.
  2. 关闭项目并退出Xcode.
  3. 清理派生数据.
  4. 再次打开项目,它就在那里,一切都很好,工作正常.

我使用Swift 3在Xcode 8上做了这个.


iAm*_*mcR 17

你也可以解决这个问题,如果你的容器应用程序代码的场景是Swift 2.3,你在Xcode 8中创建了一个新的扩展.

要解决上述问题......

注意:所有代码必须在相同的swift(兼容)版本中才能编译而不会失败.

话虽这么说,你可以解决这个问题的一种方法是坚持使用Swift 2.3,然后将你的Extension Target的使用Legacy Swift语言版本设置为"是".

您可以在Xcode 8打开时找到该选项,如下所示:

  1. 在Project Navigator中选择您的应用程序项目根目录(在左侧)
  2. 在右侧,在"目标"部分下选择您的扩展程序
  3. 选择扩展名后,单击" 构建设置"选项卡
  4. 向下滚动并找到Use Legacy Swift Language Version  并从其下拉菜单中将其设置为Yes.
  5. 您现在可以构建项目

注意:您可能需要在扩展模板中修复被覆盖的代码,因为它们最初是在Swift 3中.


Sha*_*Man 7

在做任何事之前......

(如果你可以使用与你的项目兼容的Xcode 8.0)

默认情况下,您的项目设置为Xcode 3.2兼容

  • 导航器中选择您的应用项目(在左侧)
  • 在" 实用程序"面板中选择" 项目文档 " (在右侧)
  • 项目格式更改为Xcode 8.0兼容

尝试构建您的项目.

如果它不起作用,请尝试提出的其他解决方案.

注意:您甚至可以在修复错误后切换回Xcode 3.2兼容,它应该可以工作,但您可能会"稍后"遇到其他构建问题.

建议:在调试现有项目之前.如果在创建项目时未创建Git存储库,请关闭项目并压缩项目文件的副本.

  • 这对我有用.我的项目非常古老 - 它设置为3.2兼容.该代码实际上已超过10年,但迁移了它的一部分.谢谢. (2认同)

Sma*_*air 6

将Xcode更新到9.3之后,我只是遇到了同样的问题。我仅通过清理构建文件夹即可解决此问题。您可以使用Command-Option-Shift-K或在选项菜单“产品”->“清洁”中进行此操作(请参见屏幕截图)

您可以使用Command-Option-Shift-K或在选项菜单“产品”->“清洁”中清洁构建文件夹。


Mar*_*ñuk 0

您需要将所有依赖项切换到swift 3. 在你的情况下,Alamofire 需要切换到Swift 3分支