Как выбрать наборы инструментов 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, используя другой набор инструментов?
Вот что я попробовал:
- Изменение символической ссылки
swift-latest.xctoolchain
к другим вещам. Не имеет значения. Вручную добавив наборы инструментов в мой
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/"
Запуск сборки с
TOOLCHAINS=com.apple.dt.toolchain.Swift_3_0 carthage build
и аналогичные, но это не имеет значения (все еще не могу найти набор инструментов).
2 ответа
Я решил это с помощью команды sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/
или подобный, таким образом устанавливая правильную цепочку инструментов. Это будет по умолчанию, используемый Карфагеном. Я не мог понять, как выбрать другой набор инструментов при запуске Карфагена.
Начиная с Карфагена 0.17 есть опция --toolchain
это позволяет указать точный идентификатор цепочки инструментов для использования при сборке. Пример использования:
carthage update --toolchain org.swift.402017072a
Идентификатор цепочки инструментов происходит от ключа CFBundleIdentifier
в Info.plist
файл цепочки инструментов.
Вы можете использовать
export TOOLCHAINS="org.swift.51220191107a"
export TOOLCHAIN_DIR=/Library/Developer/Toolchains/swift-5.1.2-RELEASE.xctoolchain
carthage update
Загрузите набор инструментов Swift https://swift.org/download/