Xcode 使用迦太基建筑时如何选择Swift工具链

Xcode 使用迦太基建筑时如何选择Swift工具链,xcode,swift2,swift3,carthage,Xcode,Swift2,Swift3,Carthage,我正在创建一个iOS应用程序,并使用迦太基构建外部库。由于我目前使用的库都是Swift 2和Swift 3,所以我有点紧张。因此,我希望有一个Swift 2分支和一个Swift 3分支用于开发,然后在库都兼容Swift 3时合并它们 但是,我无法选择使用迦太基(版本0.18)构建的工具链 以下是我的Cartfile的内容: # Swift 2 libraries github "stephencelis/SQLite.swift" ~> 0.10.1 github "Haneke/Hane

我正在创建一个iOS应用程序,并使用迦太基构建外部库。由于我目前使用的库都是Swift 2和Swift 3,所以我有点紧张。因此,我希望有一个Swift 2分支和一个Swift 3分支用于开发,然后在库都兼容Swift 3时合并它们

但是,我无法选择使用迦太基(版本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
目前通过使用
迦太基更新
进行构建。以下是一些验证我当前正在使用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/toolschains
中安装了多个工具链,当我运行安装程序时,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
我就是不能让它工作。所以我的问题是:

如何使用另一个工具链使用迦太基进行构建?

以下是我尝试过的:

  • swift latest.xtoolchain
    的符号链接更改为其他内容。没有区别
  • 像这样手动将工具链添加到
    .bashrc
    中的my
    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/"
    
  • 使用
    toolschains=com.apple.dt.toolschain.Swift_3_0迦太基构建版
    和类似版本运行构建,但没有任何区别(仍然找不到工具链)


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

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

    carthage update --toolchain org.swift.402017072a
    
    工具链的ID来自工具链的
    Info.plist
    文件中的键
    CbundleIdentifier

    您可以使用

    export TOOLCHAINS="org.swift.51220191107a"
    export TOOLCHAIN_DIR=/Library/Developer/Toolchains/swift-5.1.2-RELEASE.xctoolchain
    
    carthage update
    
    下载Swift工具链

    只是

    export TOOLCHAINS="swift" 
    

    做这个把戏。

    您共享的命令只是通过选择与Xcode版本捆绑在一起的任何工具链,顺便选择swift工具链<代码>--工具链似乎是答案,尽管我很难找到详细信息。如果您在Xcode中安装了工具链,请转到首选项>组件,然后将鼠标悬停在工具链上,单击齿轮图标并在Finder中显示。进入Finder后,右键单击
    .toolchain
    >显示软件包内容,您将在其中找到Info.plist。打开它并复制CbundleIdentifier。