Сборка Карфагена не удалась

Я запустил carthage bootstrap --platform iOS и получил сообщение «Пропущена установка двоичного файла realm-cocoa.framework из-за ошибки: несовместимая версия Swift - фреймворк был построен с использованием 3.1, а локальная версия - 4.0», а затем в конце сборки я получил полную информацию о < strong> Ошибка «Сборка не удалась: задача завершилась неудачно, код выхода 65».

Он указывает мне на derivedDataPath, и я проверил журнал xcodebuild для получения дополнительных сведений, где он сообщил мне "PhaseScriptExecution Download \ Core \ and \ Sync /Users/user/Libary/Caches/org.carthage.CarthageKit/DerivedData/ 9.0_9A ### / realm-cocoa / v2.10.2 / Build / Intermediates.noindex / Realm.build / Release-iphoneos / Realm.build / Script-X # X # X # X # X.sh (1 сбой) " .

Но я все еще не совсем уверен, что именно происходит с Realm Cocoa, или как исправить, знаете ли?


person SRMR    schedule 19.10.2017    source источник
comment
Вы можете попробовать запустить команду carthage еще раз и добавить переключатель --no-use-binaries. (Это два тире спереди.) Это сработало для меня, когда я имел дело с проблемами совместимости между разновидностями Swift 3.x, хотя я не пробовал с 4.0.   -  person Mike Taverne    schedule 22.10.2017
comment
Майк прав. Выполните carthage bootstrap --platform iOS --no-use-binaries, вы также должны проверить свою версию Swift в командной строке, чтобы она была равна включенной версии в Xcode, на всякий случай, если у вас установлено более одной версии Xcode. Это swift --version, и он должен вернуть 4.0. Как только вы убедитесь, что версия, запустите команду Carthage, и все будет готово.   -  person Orlando    schedule 22.10.2017
comment
@MikeTaverne Я пробовал это, и по большей части это работает, когда я сталкиваюсь с проблемой. Я не уверен, что проблема глубже, где мне нужно было бы исправить что-то дополнительное для будущих проблем   -  person SRMR    schedule 22.10.2017
comment
@SRMR Ну, вы используете флаг --no-use-binaries, потому что есть кеш для инфраструктуры Realm, созданный третьей стороной (может быть, сам Realm?), Поэтому разработчики не будут создавать структуру и терять время. В любом случае, фреймворк был построен с использованием предыдущей версии Swift, поэтому существует проблема несовместимости. Если вы создадите фреймворк самостоятельно, проблем больше не будет. Также проверьте флаг --cache-builds для Carthage, это поможет вам не перестраивать каждый раз ваши зависимости. Ваше здоровье!   -  person Orlando    schedule 23.10.2017
comment
@Orlando Отличная информация о флаге --cache-builds! Я предполагаю, что если я воспользуюсь этой командой, когда все будет в правильной версии фреймворка, тогда все будет отлично работать, пока в будущем не появится новая версия Xcode / Swift, где я снова начну получать предупреждение о несовместимости версии, в какой момент лучше всего использовать carthage build, чтобы он перестроил фреймворк?   -  person SRMR    schedule 23.10.2017
comment
Правильно, @SRMR, флаг --cache-builds поможет вам сохранить в локальном кеше исходный код оформления заказа, а также встроенный фреймворк. Carthage снова скомпилируется, если вы выполните carthage update (обновление зависимости), иначе кеш будет использоваться как есть. Надеюсь, это поможет!   -  person Orlando    schedule 23.10.2017
comment
@Orlando круто, это так помогает! Если вы хотите добавить это в качестве ответа, я могу отметить это и дать вам награду.   -  person SRMR    schedule 24.10.2017


Ответы (2)


TL; DR: убедитесь, что вы используете последнюю версию Swift, включенную в Xcode, а затем выполните carthage bootstrap --no-use-binaries --platform iOS --cache-builds

Полная версия:

Ошибка, которую вы получили от Xcode при создании проекта, Incompatible Swift version - framework was built with 3.1 and the local version is 4.0, связана с загрузкой, выполненной Carthage для получения предварительно созданной версии Realm Framework (это функция экономии времени, но иногда существуют несовместимости версий, подобные этой).

Этот загруженный предварительно собранный фреймворк был скомпилирован с предыдущей версией Swift (в данном случае ошибка указывает на то, что использовалась версия 3.1). Решением этой ошибки будет выполнение процесса установки зависимостей с помощью другой команды:

carthage bootstrap --platform iOS --no-use-binaries

Это будет работать для успешного построения зависимостей проекта. В любом случае это может занять много времени, поскольку он будет строить с нуля Realm.framework и RealmSwift.framework из ядра каждый раз, когда выполняется команда. Таким образом, можно включить локальный кеш для сборок на Карфагене. Зависимости могут быть установлены с помощью

carthage bootstrap --no-use-binaries --platform iOS --cache-builds

С помощью этих опций Карфаген:

  • bootstrap, поэтому будут использоваться версии из Cartfile.resolved, без обновлений.
  • --no-use-binaries создавайте зависимости без загрузки готовых фреймворков (избегая несовместимости версий).
  • --platform iOS построит зависимости для использования только в iOS, избегая создания фреймворков для Apple TV или Mac OS, если зависимость поддерживает это. Это сэкономит много времени!
  • --cache-builds позволит Carthage хранить ваши построенные зависимости (и использовать их при повторной необходимости) в локальном кеше, поэтому даже если вы снова выполните команду, он просто скопирует вашу сохраненную структуру, избегая другого трудоемкого процесса сборки.
person Orlando    schedule 24.10.2017
comment
Почему предпочтительнее кэшировать сборки Carthage? Мы также можем использовать флаг --no-use-binaries, и это будет такая же скорость. - person IgorGanapolsky; 19.08.2020
comment
@IgorGanapolsky --no-use-binaries и --cache-builds - два не связанных между собой флага, данные Карфагену. Первый используется, когда вы не хотите использовать предварительно созданные двоичные файлы (например, тот, который вызывает проблемы сборки в Xcode), а второй позволяет локальному кешу ускорить процесс, когда вам нужно (пере) установить зависимости проекта, например, возможно, в другом проекте, использующем те же зависимости, которые вы создали с нуля. - person Orlando; 21.08.2020

Проверьте папку приложения и переключите версию Xcode на более старую с помощью swift 3.

sudo xcode-select --switch /Applications/Xcode.app
person Abhijith    schedule 18.01.2019