使用Swift 3.0编译的模块不能在Swift 3.0.1中导入

我升级了Xcode到8.1 GM,现在我得到了SwiftyJSON的下面的错误。 其他import的框架似乎工作。 有没有办法强制这个在Swift 3中工作,直到SwiftyJSON升级他们的框架? 我用迦太基导入/更新框架。 我也尝试改变Use Legacy Swift language version开启和closures无济于事。

使用Swift 3.0编译的模块不能在Swift 3.0.1中导入:Modules / SwiftyJSON.swiftmodule / arm64.swiftmodule

SwiftyJson正在被迦太基预编译下载。 预编译的下载与Swift版本3.0。 这使得编译器抱怨版本不正确。 使用以下命令:

 carthage update --platform iOS --no-use-binaries 

SwiftyJson(以及Carthage中的所有其他框架)将使用本地版本的Swift(3.0.1)进行本地编译,编译器不会再抱怨。

从DerivedData中删除应用程序chache并重build。 错误可能是固定的。

DerivedDatapath如下所示:

 ~/Library/Developer/Xcode/DerivedData/ 

确保您已将新的XCode 8.1 GM软件包放入您的应用程序文件夹中。 当我们中的一个人运行Carthage来更新我们的依赖关系时,我们遇到了这个问题,但是并没有replace应用程序文件夹中的XCode old 8.0应用程序(8.1 GM运行在桌面上)。

你要确保当你在terminal中运行以下代码时: xcrun swift -version它返回Apple Swift version 3.0.1

更新默认的Xcode到terminal上的新工作。

步骤1:使用以下命令将Xcode版本更新到最新的terminal。 参考

 sudo xcode-select -switch <path/to/>Xcode.app 

第2步:现在尝试carthage更新命令

 carthage update --platform iOS 

只是为了给最新的更新:

迦太基在2017年2月27日发布了0.20版本 。

如果可用的预构build二进制文件兼容,迦太基现在只使用预编译二进制文件

这就是说,你不再需要使用: --no-use-binaries以避免不兼容的预--no-use-binaries框架。

所以要确保你的迦太基版本大于0.20 ,只需要:

 carthage update --platform iOS 

就像@zirinisp说:

  1. 您可以使用以下命令: carthage update --platform iOS --no-use-binaries
  2. 使用以下命令: xcrun swift -version来查看Swift版本
  3. 做到这一点: Xcode->preferences->locations来清除导出的数据和归档数据,最重要的是将命令行工具更改为“ Xcode 8.1
  4. 使用下面的命令: xcrun swift -version ,你可以看到swift的版本是3.0.1
  5. 设置Use Legacy Swift Language Version = NO

我希望这会帮助你

我和库XCTest_Gherkin有完全一样的问题,它对我的​​工作是:

  1. Product – > Scheme – > XCTest-Gherkin
  2. Product – > Build

希望能帮助到你。 我正在使用Cocoapods。

在Xcode 生成设置确保您的框架searchpath包含适当的Carthage生成文件夹:

 $(inherited) $(PROJECT_DIR)/Carthage/Build/iOS