Как я могу использовать Realm с Swift 4?

Я пытаюсь запустить мой текущий проект в новой бета-версии Xcode 9, но когда я это делаю, он говорит Module compiled with Swift 3.1 cannot be imported in Swift 4.0. Как я могу решить эту проблему? Я не использую cocoapods.

Ответ 1

Обновление. Начиная с версии v.2.10.1, выпущенной в 2017-09-14, предварительно созданные двоичные файлы Realm включают в себя фреймворки, созданные с помощью Xcode 9 для Swift 3.2 и 4.0. Больше не нужно создавать их самостоятельно.

Информация ниже остается актуальной для всех, кто хочет использовать Realm с предварительными версиями Xcode в будущем.


Если вы в настоящее время интегрируете предварительно созданные двоичные файлы Realm, вам нужно переключиться на создание Realm из исходного кода, чтобы поддерживать Swift 3.2 и 4.0, поскольку Realm не публикует готовые двоичные файлы для предварительных версий Xcode. Вы можете построить Realm из источника одним из трех способов:

  • Использование CocoaPods.

    CocoaPods всегда строит зависимости от источника.

  • Использование Карфагена.

    По умолчанию Carthage попытается загрузить готовые двоичные файлы, но вернется к построению из исходного кода, если предварительно созданные двоичные файлы предназначены для другой версии Swift, чем используемая версия Xcode.

  • Скомпилируйте Realm вручную из исходного кода, а затем интегрируйте встроенные фреймворки так же, как и предустановленные двоичные файлы, предоставляемые Realm.

    Вы можете сделать это, проверив тег release из 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
    

    Встроенные фреймворки будут помещены в каталог build в источнике Realm, где вы можете их интегрировать так же, как и предварительно созданные двоичные файлы, предоставляемые Realm.

    Эти встроенные фреймворки также должны работать с приложениями, использующими Swift 3.2, благодаря тому же компилятору, что и Swift 4.0.

Ответ 2

В качестве продолжения bdash item 3 о том, как создать Realm вручную из исходного кода, и ответить на вопрос о вопросе о ошибке xcodebuild (с которой я столкнулся): убедитесь, что симулятор iPhone 6 настроен для вашего Xcode 9, чтобы избежать этой ошибки. Я полагаю, что скрипты Realm build должны ориентироваться на нее. Во всяком случае, это разрешило это для меня.