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


87

我将Xcode升级到8.1 GM,现在遇到SwiftyJSON的以下错误。其他导入的框架似乎可行。在SwiftyJSON升级其框架之前,是否有办法强迫它在Swift 3中工作?我用迦太基来导入/更新框架。我也尝试将“ Use Legacy Swift language version打开”和“关闭” 更改为无济于事。

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

Answers:


171

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

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

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


7
您可能节省了我一个小时的搜索时间。谢谢。
djv

24
别客气。老实说,迦太基应该更聪明一些,并检查迅速的版本号。
zirinisp '16

还有其他想法吗?因为这对我不起作用,尽管就我而言,我在使用Unbox时遇到问题
Xernox

太好了 有没有一种方法可以嵌入其中,Cartfile这样我就可以打字carthage update而无需其他开发人员知道/担心额外的标志?
Craig Otis

1
从XCode 8.0更新到XCode 8.1后,PromiseKit 4.0出现了类似的错误,我遇到了EXC_BAD_ACCESS错误。最后,必须使用迅速的3.0.1重新编译PromiseKit并解决问题。
里卡多·安乔斯

21

从DerivedData中删除应用程序chche,然后重新构建。该错误可能已修复。

DerivedData路径如下所示:

~/Library/Developer/Xcode/DerivedData/

为我工作,我删除了此筛选器,删除了pod文件夹并使用“ pod install”。并固定。
何塞·

你好 这个解决方案对我有用。您能否详细说明我们清除派生数据后会发生什么?错误如何消除?
iPhoneDeveloper

也为我工作,谢谢。
Hasya

10

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

您需要确保在终端中运行以下命令xcrun swift -version时返回:Apple Swift version 3.0.1


这对我有用,谢谢!同样在终端中运行的命令是xcrun swift -version
HH887 '16

2
仍然遇到同样的问题。任何其他建议
harsh_v

2
这个命令对我有用:迦太基更新--platform iOS --no-use-binaries
HH887 '16

2
我已经完成了carthage update --platform iOS --no-use-binaries,但仍然无法正常工作。我已经清理了项目并重新启动了Xcode,但仍然收到错误消息。我还能尝试什么吗?
克利夫顿Labrum

1
我试过了 它会回来Apple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Target: x86_64-apple-macosx10.9
克利夫顿·拉布鲁姆


9

仅提供最新更新:

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

如果可用的预构建二进制文件兼容,则迦太基现在仅使用预构建二进制文件

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

因此,请确保您拥有的迦太基版本大于0.20并且只需执行以下操作:

carthage update --platform iOS

XCode 8.3.3将迦太基更新为0.25版本并执行以下操作后,它对我有用迦太基更新--platform iOS --no-use-binaries
anoop4real

@ anoop4real没有它对您不起作用--no-use-binaries?迦太基应该能够检测该二进制文件是否与您的编译器版本兼容。如果不兼容,应该自动删除下载的二进制文件并在本地构建框架。
kanekin '17

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

希望对您有帮助


1
  1. 如果Xcode将beta / GM版本移动到/ Applications文件夹,并将其命名为Xcode-beta

  2. 检查以下内容的输出:

    xcrun swift --version

通过在终端中运行此命令,其输出应与您希望应用编译的Swift版本相匹配,因为Carthage使用此命令的输出来确定本地Swift版本。

  1. 通过运行以下命令将Xcode版本更新到终端上的最新版本:

    sudo xcode-select -s /Applications/Xcode-beta.app/

  2. 通过运行以下命令,为iOS构建库并阻止Carthage下载现有的(尚未兼容的)预编译二进制文件:

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

  3. 清洁与建造


0

我对库有完全相同的问题XCTest_Gherkin,它对我有用的是:

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

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


0

在Xcode Build Settings中,确保您的Framework Search Paths包含适当的Carthage Build文件夹:

$(inherited)
$(PROJECT_DIR)/Carthage/Build/iOS
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.