swift2 如何在使用Carthage构建时选择Swift工具链

093gszye  于 2022-11-06  发布在  Swift
关注(0)|答案(4)|浏览(162)

我正在创建一个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会将它们安装到/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?

以下是我的尝试:
1.将swift-latest.xctoolchain的符号链接更改为其他内容。没有区别。
1.手动将工具链添加到.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/"

1.使用TOOLCHAINS=com.apple.dt.toolchain.Swift_3_0 carthage build等运行构建,但没有任何区别(仍然找不到工具链)。

8ehkhllq

8ehkhllq1#

从Carthage 0.17开始,有一个选项--toolchain,它允许用户指定一个用于构建的确切工具链ID。

carthage update --toolchain org.swift.402017072a

工具链的ID来自工具链的Info.plist文件中的关键字CFBundleIdentifier

1tuwyuhd

1tuwyuhd2#

我用sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/或类似的命令解决了这个问题,从而将工具链设置为正确的工具链。这将是Carthage使用的默认工具链。我不知道如何在运行Carthage时选择另一个工具链。

sycxhyv7

sycxhyv73#

您可以使用

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

bqujaahr

bqujaahr4#

只是

export TOOLCHAINS="swift"

就可以了。

相关问题