10

我正在尝试在新的 Xcode 9 beta 中运行我当前的项目,但是当我这样做时,它会显示Module compiled with Swift 3.1 cannot be imported in Swift 4.0. 我怎么解决这个问题?我没有使用 cocoapods。

4

2 回答 2

15

更新:截至 2017 年 9 月 14 日发布的 v2.10.1,Realm 的预构建二进制文件包括使用 Xcode 9 为 Swift 3.2 和 4.0 构建的框架。不再需要自己构建它们。

以下信息仍然适用于希望在未来将 Realm 与 Xcode 的预发布版本一起使用的任何人。


如果您当前正在集成 Realm 的预构建二进制文件,则需要切换到从源代码构建 Realm 以支持 Swift 3.2 和 4.0,因为 Realm 不会为 Xcode 的预发布版本发布预构建二进制文件。您可以通过以下三种方式之一从源代码构建 Realm:

  1. 使用 CocoaPods。

    CocoaPods 总是从源代码构建依赖关系。

  2. 使用迦太基。

    默认情况下,Carthage 将尝试下载预构建的二进制文件,但如果预构建的二进制文件用于与正在使用的 Xcode 版本不同的 Swift 版本,则会回退到从源代码构建。

  3. 从源代码手动构建 Realm,然后像集成 Realm 提供的预构建二进制文件一样集成构建的框架。

    你可以通过从 Git 中检出发布标签来做到这一点:

    git clone --recursive https://github.com/realm/realm-cocoa.git
    cd realm-cocoa
    git checkout v2.10.0
    

    然后运行以下与您关心的平台相对应的命令,为该平台构建 Realm Swift 框架:

    REALM_SWIFT_VERSION=4.0 sh build.sh ios-swift
    REALM_SWIFT_VERSION=4.0 sh build.sh osx-swift
    REALM_SWIFT_VERSION=4.0 sh build.sh watchos-swift
    REALM_SWIFT_VERSION=4.0 sh build.sh tvos-swift
    

    构建的框架将放置在buildRealm 源代码中的目录中,然后您可以在其中集成它们,就像您对 Realm 提供的预构建二进制文件一样。

    这些构建的框架也应该适用于使用 Swift 3.2 的应用程序,因为它使用与 Swift 4.0 相同的编译器。

于 2017-06-19T23:32:53.667 回答
2

作为 bdash 关于如何从源代码手动构建 Realm 的第 3 项的后续行动,并回答 addzo 关于 xcodebuild 错误的问题(我也遇到过):确保为您的 Xcode 9 设置了 iPhone 6 模拟器以避免那个错误。我想 Realm 的构建脚本必须以它为目标。无论如何,这为我解决了。

于 2017-08-09T20:24:10.067 回答