使用swift 3.0编译的模块无法在Swift 3.0.1中导入

HH8*_*887 87 swift swifty-json

我将Xcode升级到8.1 GM,现在我收到了SwiftyJSON的以下错误.其他导入的框架似乎有效.有没有办法强制这个在Swift 3中工作,直到SwiftyJSON升级他们的框架?我使用Carthage导入/更新框架.我也尝试改变Use Legacy Swift language versionOn和Off无济于事.

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

zir*_*isp 171

SwiftyJson正在下载由carthage预编译.预编译下载是使用Swift 3.0版.这使编译器抱怨版本不正确.使用以下命令:

carthage update --platform iOS --no-use-binaries
Run Code Online (Sandbox Code Playgroud)

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

  • 别客气.说实话,迦太基应该更加智能,并检查快速版本号. (24认同)
  • 你可能为我节省了一个小时的搜索时间.谢谢. (7认同)

小智 21

从DerivedData中删除app chache,然后重建.错误可能是固定的.

DerivedData路径如下:

~/Library/Developer/Xcode/DerivedData/
Run Code Online (Sandbox Code Playgroud)


Cla*_*ett 10

确保已将新的XCode 8.1 GM软件包放在"应用程序"文件夹中.当我们其中一个人运行Carthage来更新我们的依赖项时,我们遇到了这个问题,但是没有替换应用程序文件夹中的XCode旧8.0应用程序(8.1 GM正在运行桌面).

您希望确保在终端中运行以下内容时:xcrun swift -version它返回Apple Swift version 3.0.1.

  • 仍然遇到同样的问题.任何其他建议 (2认同)
  • 这个命令对我有用:carthage update --platform iOS --no-use-binaries (2认同)
  • 我已经完成了`carthage update --platform iOS --no-use-binaries`,但它仍然无效.我已经清理了我的项目并重新启动了Xcode,但仍然出现错误.还有什么我可以尝试的吗? (2认同)

Zai*_*han 9

Xcode在终端上更新默认为新的工作对我来说.

步骤1:使用以下命令将Xcode版本更新为终端上的最新版本.参考

sudo xcode-select -switch <path/to/>Xcode.app
Run Code Online (Sandbox Code Playgroud)

第2步:现在尝试使用carthage update命令

carthage update --platform iOS
Run Code Online (Sandbox Code Playgroud)


kan*_*kin 9

只是为了给出最新的更新:

迦太基已于2017年2月27日发布0.20版本.

如果可用的预构建二进制文件兼容, Carthage现在只使用预构建二进制文件.

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

因此,请确保您拥有的carthage版本大于0.20且仅执行以下操作:

carthage update --platform iOS
Run Code Online (Sandbox Code Playgroud)


小智 5

就像@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

我希望它会对你有所帮助