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

Krø*_*lle 2 xcode carthage swift2 swift3

我正在创建一个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
Run Code Online (Sandbox Code Playgroud)

目前通过使用构建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
Run Code Online (Sandbox Code Playgroud)

现在我想切换到使用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/
Run Code Online (Sandbox Code Playgroud)

请注意,我安装了Xcode8和Xcode7:

$ ls /Applications/Xcode*
/Applications/Xcode.app:
Contents
/Applications/Xcode8.app:
Contents
$ xcodebuild -version
Xcode 7.3.1
Build version 7D1014
Run Code Online (Sandbox Code Playgroud)

现在,假设我有以下情况:

$ 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
Run Code Online (Sandbox Code Playgroud)

我只是无法让这个工作.所以我的问题是:

如何使用另一个工具链与迦太基建立?

这是我尝试过的:

  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/"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用TOOLCHAINS=com.apple.dt.toolchain.Swift_3_0 carthage build和类似运行构建,但它没有区别(仍然找不到工具链).

cou*_*elk 11

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

carthage update --toolchain org.swift.402017072a
Run Code Online (Sandbox Code Playgroud)

工具链的ID来自于关键CFBundleIdentifierInfo.plist工具链的文件.

  • 如果您在Xcode中安装了工具链,请转到"首选项">"组件",然后将鼠标悬停在工具链上,单击齿轮图标并在"查找器中显示".进入Finder后,右键单击`.toolchain`>显示包内容,然后在里面找到Info.plist.打开它并复制CFBundleIdentifier. (6认同)