Как выбрать цепочки инструментов Swift при сборке с Carthage

Я создаю приложение для iOS и использую Carthage для создания внешних библиотек. Поскольку в настоящее время я использую библиотеки Swift 2 и Swift 3, я нахожусь в некотором затруднительном положении. Таким образом, я хочу иметь одну ветку Swift 2 и одну ветку Swift 3 для разработки, а затем объединить их, когда все библиотеки совместимы с Swift 3.

Однако я не могу выбрать, какой набор инструментов для сборки с Carthage (версия 0.18).

Вот содержимое моего файла Cartfile:

# Swift 2 libraries
github "stephencelis/SQLite.swift" ~> 0.10.1
github "Haneke/HanekeSwift"

# Swift 3 libraries
#github "stephencelis/SQLite.swift" "swift3"
#github "Haneke/HanekeSwift" "feature/swift-3"
#github "kitasuke/PagingMenuController"
#github "Alamofire/Alamofire" ~> 4.0

В настоящее время он строится с использованием carthage update. Вот некоторые результаты, подтверждающие, что я сейчас использую Swift 2:

$ swift --version
Apple Swift version 2.2 (swiftlang-703.0.18.8 clang-703.0.31)
Target: x86_64-apple-macosx10.9
$ ls -lh $(which swift)
-rwxr-xr-x  1 root  wheel    18K Jul  8 19:52 /usr/bin/swift

Теперь я хочу переключиться на сборку с Swift 3. У меня есть несколько наборов инструментов, установленных в /Library/Developer/Toolchains, куда OSX устанавливает их, когда я запускаю установщик:

$ ls -lh /Library/Developer/Toolchains
drwxr-xr-x  6 root  wheel   204B Sep 30 20:07 swift-2.2.1-SNAPSHOT-2016-04-23-a.xctoolchain
drwxr-xr-x  7 root  wheel   238B Sep 30 17:41 swift-3.0-RELEASE.xctoolchain
drwxr-xr-x  7 root  wheel   238B Oct  6 20:53 swift-3.0.1-PREVIEW-2.xctoolchain
lrwxr-xr-x  1 root  wheel    30B Oct  8 12:51 swift-latest.xctoolchain -> swift-3.0-RELEASE.xctoolchain/

Обратите внимание, что у меня установлены как Xcode8, так и Xcode7:

$ ls /Applications/Xcode*
/Applications/Xcode.app:
Contents
/Applications/Xcode8.app:
Contents
$ xcodebuild -version
Xcode 7.3.1
Build version 7D1014

Теперь предположим, что у меня есть следующий сценарий:

$ cat Cartfile
github "Alamofire/Alamofire" ~> 4.0
$ carthage update --toolchain com.apple.dt.toolchain.Swift_3_0
*** Fetching Alamofire
*** Checking out Alamofire at "4.0.1"
*** xcodebuild output can be found in /var/folders/wg/fjk346qs7mx8fhplf8_805wm0000gn/T/carthage-xcodebuild.zfHVn5.log
*** Building scheme "Alamofire iOS" in Alamofire.xcworkspace
warning: failed to load toolchain 'com.apple.dt.toolchain.Swift_3_0': Could not find toolchain: com.apple.dt.toolchain.Swift_3_0

Я просто не могу заставить это работать. Итак, мой вопрос:

Как я могу строить с Carthage, используя другой набор инструментов?

Вот что я пробовал:

  1. Изменение символьной ссылки swift-latest.xctoolchain на другие вещи. Без разницы.
  2. Вручную добавляю цепочки инструментов в мою PATH переменную в .bashrc вот так, но это не имеет значения.

    $ cat ~/.bashrc
    export PATH="$PATH:/Library/Developer/Toolchains/swift-2.2.1-SNAPSHOT-2016-04-23-a.xctoolchain/usr/bin/"
    export PATH="$PATH:/Library/Developer/Toolchains/swift-3.0-RELEASE.xctoolchain/usr/bin/"
    export PATH="$PATH:/Library/Developer/Toolchains/swift-3.0.1-PREVIEW-2.xctoolchain/usr/bin/"
    
  3. Запуск сборки с TOOLCHAINS=com.apple.dt.toolchain.Swift_3_0 carthage build и тому подобным, но это не имеет значения (все еще не удается найти набор инструментов).


person Krøllebølle    schedule 08.10.2016    source источник


Ответы (4)


Начиная с 0.17 Carthage, есть опция --toolchain, которая позволяет указать точную цепочку инструментов Идентификатор, используемый для сборки. Пример использования:

carthage update --toolchain org.swift.402017072a

Идентификатор цепочки инструментов берется из ключа CFBundleIdentifier в Info.plist файле цепочки инструментов.

person 0x416e746f6e    schedule 23.07.2017
comment
Если у вас установлена ​​цепочка инструментов в Xcode, перейдите в «Настройки» ›Компоненты, затем наведите указатель мыши на цепочку инструментов, щелкните значок шестеренки и выберите« Показать в Finder ». В Finder щелкните правой кнопкой мыши .toolchain ›Показать содержимое пакета, и внутри вы найдете Info.plist. Откройте его и скопируйте CFBundleIdentifier. - person olivaresF; 20.03.2018

Я решил это с помощью команды sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/ или аналогичной, тем самым установив правильную цепочку инструментов. Тогда он будет использоваться по умолчанию в Карфагене. Я не мог понять, как выбрать другую цепочку инструментов при запуске Carthage.

person Krøllebølle    schedule 21.10.2016
comment
Команда, которой вы поделились, лишь случайно выбирает быструю инструментальную цепочку в силу выбора той инструментальной цепочки, которая связана с версией Xcode. --toolchain кажется ответом, хотя мне трудно найти детали. - person griotspeak; 02.03.2017

Ты можешь использовать

export TOOLCHAINS="org.swift.51220191107a"
export TOOLCHAIN_DIR=/Library/Developer/Toolchains/swift-5.1.2-RELEASE.xctoolchain

carthage update

Загрузите набор инструментов Swift https://swift.org/download/#releases

person Carlos Chaguendo    schedule 04.12.2019

Просто

export TOOLCHAINS="swift" 

сделать трюк.

person goodhyun    schedule 27.02.2020