Скажите Карфагену, чтобы он строил зависимость, используя Swift 3.2.2 (НЕ Swift 4.0)

У меня есть проект, написанный на Swift 3.2.2 и скомпилированный с использованием XCode 9.1.

У меня есть зависимость, которая создается с использованием Carthage с помощью этой команды:

carthage update --platform iOS

Проблема в том, что Carthage строит зависимость, используя Swift 4.0 (вместо Swift 3.2.2).

Модуль, скомпилированный с помощью Swift 4.0, нельзя импортировать в Swift 3.2.2.

Как мне сказать Карфагену построить мою зависимость с помощью Swift 3.2.2, чтобы ее можно было использовать в моем проекте?

Я пока не хочу обновлять свой проект до Swift 4.0.

Xcode 9.1 поддерживает как Swift 3, так и Swift 4. Итак, как мне сказать Carthage использовать Swift 3 при компиляции зависимости? Я не хочу указывать ему использовать более раннюю версию XCode (которой у меня больше нет)


person etayluz    schedule 15.11.2017    source источник
comment
Возможный дубликат Изменить версию Carthage Swift   -  person Dávid Pásztor    schedule 16.11.2017
comment
@ DávidPásztor Xcode 9.1 поддерживает как Swift 3, так и Swift 4. Итак, как мне сказать Carthage использовать Swift 3 при компиляции зависимости? Я не хочу указывать ему использовать более раннюю версию XCode (которой у меня больше нет)   -  person etayluz    schedule 16.11.2017
comment
Ответ на тот же вопрос был дан здесь. Пожалуйста, проверьте это.   -  person fewlinesofcode    schedule 20.11.2017
comment
@lib У меня нет нескольких версий XCode. У меня есть XCode 9.1, который теоретически должен уметь компилировать Swift 3 и Swift 4. Вопрос в том, как сообщить Carthage, чтобы XCode 9.1 использовал Swift 3.   -  person etayluz    schedule 20.11.2017


Ответы (2)


Ты говоришь:

  1. ваш проект компилируется в Swift 3.2.2
  2. ваша зависимость, после разрешения и загрузки с помощью Carthage, будет компилироваться в Swift 4 (поскольку его параметры сборки были настроены таким образом)

с этими условиями будет невозможно решить проблему: вы не можете смешивать Swift 3 и 4 из-за этого: https://github.com/Carthage/Carthage/issues/1978

Единственное, что вы можете сделать для (в конечном итоге) исправления ситуации:


Сценарий 1

  1. вы должны найти предыдущую версию библиотеки, которая создается в Swift 3.2 ~, если существует
  2. в вашем Cartfile вы указываете эту конкретную версию, например:

    github "yourDependency" == x.y.z


Сценарий 2

  1. запустить carthage update --platform iOS
  2. войдите в папку зависимостей (Carthage/Checkouts/yourDependency) и откройте .xcodeproj, чтобы вручную изменить эту опцию:

введите описание изображения здесь

  1. тогда у вас может быть множество проблем со сборкой из-за того, что вы производите регрессию языка, вы можете попытаться исправить их (в зависимости от библиотеки, если она маленькая или нет, это может быть возможно).
  2. если вы устранили зависимости, запустите:

    carthage build --platform iOS

  3. попробуйте скомпилировать свой проект ...
person Andrea Mugnaini    schedule 21.11.2017
comment
Компилятор Swift в Xcode 9 совместим как с Swift 3, так и со Swift 4 в той же кодовой базе. Они совместимы с компилятором. Мне это кажется багом Карфагена. - person bartosss; 21.11.2017

Единственный обходной путь на данный момент - перейти на новую систему сборки в Xcode. В настройках рабочего пространства. Или перейдите на более раннюю версию библиотеки, которая поддерживает swift 3

person Максуд Даудов    schedule 24.11.2017