2016-10-08 9 views
1

나는 iOS 앱을 만들고 카르타고를 사용하여 외부 라이브러리를 만들고 있습니다. 내가 사용하는 라이브러리는 현재 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를 사용하여 작성합니다. 내가 설치 프로그램을 실행할 때 OSX 그들을 설치있는 곳입니다 스위프트 3. 여러 툴체인은 /Library/Developer/Toolchains에 설치 한 빌드로 전환

$ 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 

지금 내가 원하는 : 여기에 몇 가지 출력이 나는 현재 스위프트이 사용하고 있음을 확인하는 : 나는 Xcode8과 Xcode7 모두가 설치되어

$ 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/ 

참고 :

$ 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 

난 그냥 작동하지 않습니다. 그래서 제 질문은 :

다른 툴체인을 사용하여 어떻게 카르타고를 만들 수 있습니까?

는 여기에 내가 시도 내용은 다음과 같습니다

  1. 다른 것들에 swift-latest.xctoolchain의 심볼릭 링크를 변경. 차이는 없습니다.
  2. .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/" 
    
  3. TOOLCHAINS=com.apple.dt.toolchain.Swift_3_0 carthage build 및 유사과 빌드를 실행하지만, 차이를 (여전히 툴체인을 찾을 수 없습니다)도하지 않습니다.

답변

1

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/ 또는 유사한 명령을 사용하여이 문제를 해결하여 툴체인을 적절한 것으로 설정했습니다. 이것은 카르타고가 사용하는 디폴트 것이다. Carthage를 실행할 때 다른 툴체인을 선택하는 방법을 알 수 없었습니다.

+1

공유 한 명령은 Xcode 버전이 번들로 제공되는 툴체인을 선택하여 신속하게 툴체인을 선택합니다.세부 사항을 찾는 데 어려움이 있지만'--toolchain'은 대답처럼 보입니다. – griotspeak

1

Carthage 0.17 현재 빌드에 사용할 정확한 툴체인 ID를 지정할 수있는 --toolchain 옵션이 있습니다. 사용 예제 :

carthage update --toolchain org.swift.402017072a 

툴체인의 ID가 툴체인의 Info.plist 파일에 키 CFBundleIdentifier에서 온다.