使用 Carthage 构建时如何 select Swift 工具链
How to select Swift toolchains when building with Carthage
我正在创建一个 iOS 应用程序并使用 Carthage 构建外部库。由于我目前使用的库是 Swift 2 和 Swift 3,所以我有点手忙脚乱。因此,我想要一个 Swift 2 分支和一个 Swift 3 分支用于开发,然后在库都与 Swift 3 兼容时合并它们。
但是,我无法select使用 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
中安装了多个工具链,当我 运行安装程序:
$ 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
的符号 link 更改为其他内容。没有区别。
像这样手动将工具链添加到我在 .bashrc
中的 PATH
变量,但没有任何区别。
$ 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
类似的构建,但没有区别(仍然找不到工具链)。
我使用命令 sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/
或类似命令解决了这个问题,从而将工具链设置为正确的。这将是迦太基使用的默认值。当 运行 Carthage 时,我不知道如何 select 另一个工具链。
从迦太基 0.17 开始,有一个选项 --toolchain
允许指定用于构建的确切工具链 ID。用法示例:
carthage update --toolchain org.swift.402017072a
工具链的 ID 来自工具链 Info.plist
文件中的键 CFBundleIdentifier
。
您可以使用
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
就
export TOOLCHAINS="swift"
表演一下。
我正在创建一个 iOS 应用程序并使用 Carthage 构建外部库。由于我目前使用的库是 Swift 2 和 Swift 3,所以我有点手忙脚乱。因此,我想要一个 Swift 2 分支和一个 Swift 3 分支用于开发,然后在库都与 Swift 3 兼容时合并它们。
但是,我无法select使用 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
中安装了多个工具链,当我 运行安装程序:
$ 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
的符号 link 更改为其他内容。没有区别。 像这样手动将工具链添加到我在
.bashrc
中的PATH
变量,但没有任何区别。$ 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
类似的构建,但没有区别(仍然找不到工具链)。
我使用命令 sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/
或类似命令解决了这个问题,从而将工具链设置为正确的。这将是迦太基使用的默认值。当 运行 Carthage 时,我不知道如何 select 另一个工具链。
从迦太基 0.17 开始,有一个选项 --toolchain
允许指定用于构建的确切工具链 ID。用法示例:
carthage update --toolchain org.swift.402017072a
工具链的 ID 来自工具链 Info.plist
文件中的键 CFBundleIdentifier
。
您可以使用
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
就
export TOOLCHAINS="swift"
表演一下。