如何将 Realm 与 Swift 4 一起使用?

How can I use Realm with Swift 4?

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

更新:从 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
    

    然后运行以下命令中的任何一个对应于您关心的平台,为该平台构建RealmSwift框架:

    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
    

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

    这些构建的框架也应该与使用 Swift 3.2 的应用程序一起工作,因为它使用与 Swift 4.0.

  4. 相同的编译器

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