Swift 3.0으로 컴파일 된 모듈은 Swift 3.0.1에서 가져올 수 없습니다.


87

Xcode를 8.1 GM으로 업그레이드했고 이제 SwiftyJSON에 대해 아래 오류가 발생합니다. 다른 가져온 프레임 워크가 작동하는 것 같습니다. SwiftyJSON이 프레임 워크를 업그레이드 할 때까지 Swift 3에서 작동하도록 강제하는 방법이 있습니까? Carthage를 사용하여 프레임 워크를 가져 오거나 업데이트했습니다. 나는 또한 Use Legacy Swift language version소용이 없도록 On 및 Off를 변경하려고 시도했습니다 .

Swift 3.0으로 컴파일 된 모듈은 Swift 3.0.1에서 가져올 수 없습니다 : Modules / SwiftyJSON.swiftmodule / arm64.swiftmodule

답변:


171

SwiftyJson은 carthage에서 미리 컴파일하여 다운로드하고 있습니다. 미리 컴파일 된 다운로드는 Swift 버전 3.0입니다. 이로 인해 컴파일러는 버전이 올바르지 않다고 불평합니다. 다음 명령을 사용합니다.

carthage update --platform iOS --no-use-binaries

SwiftyJson (및 Carthage 내의 다른 모든 프레임 워크)은 로컬 버전의 Swift (3.0.1)를 사용하여 로컬에서 컴파일되며 컴파일러는 더 이상 불평하지 않습니다.


7
검색하는 데 한 시간을 절약 하셨을 것입니다. 감사합니다.
djv

24
아니에요. 솔직히 말해서 카르타고는 좀 더 똑똑하고 신속한 버전 번호를 확인해야합니다.
zirinisp

다른 아이디어가 있습니까? 이것이 저에게 효과가 없었기 때문에 제 경우에는 Unbox에 문제가 있지만
Xernox

이것은 훌륭했습니다. 동료 개발자가 추가 플래그에 대해 알거나 걱정할 필요없이 Cartfile타이핑 만 할 수 있도록 이를에 포함하는 방법이 carthage update있습니까?
Craig Otis 2016

1
XCode 8.0에서 XCode 8.1로 업데이트 한 후 PromiseKit 4.0에서 비슷한 오류가 발생했습니다. EXC_BAD_ACCESS 오류가 발생했습니다. 결국 PromiseKit은 신속한 3.0.1로 재 컴파일되어야하고 문제가 해결되었습니다.
Ricardo Anjos

21

DerivedData에서 앱 chache를 제거하고 다시 빌드합니다. 오류가 수정 될 수 있습니다.

다음과 같은 DerivedData 경로 :

~/Library/Developer/Xcode/DerivedData/

나를 위해 일했고,이 폴더를 제거하고 pod 폴더를 제거하고 "pod install"을 사용합니다. 그리고 수정되었습니다.
Jose Pose S

안녕하세요. 이 솔루션은 저에게 효과적이었습니다. 파생 데이터를 지우면 어떤 일이 발생하는지 자세히 설명해 주시겠습니까? 오류가 어떻게 사라지나요?
iPhoneDeveloper

나를 위해 일 했어, 고마워.
Hasya

10

응용 프로그램 폴더에 새로운 XCode 8.1 GM 패키지를 배치했는지 확인하십시오. 우리 중 한 명이 Carthage를 실행하여 종속성을 업데이트했지만 응용 프로그램 폴더에서 XCode 이전 8.0 응용 프로그램을 대체하지 않았을 때이 문제가 발생했습니다 (8.1 GM이 데스크탑에서 실행 중임).

: 당신은 당신이 터미널에 다음을 실행할 때 있는지 확인하려면 xcrun swift -version이 반환 Apple Swift version 3.0.1.


이것은 나를 위해 일했습니다, 감사합니다! 또한 터미널에서 작동했던 명령은 xcrun swift -version
HH887

2
여전히 같은 문제가 발생합니다. 다른 제안
harsh_v

2
이 명령은 나를 위해 일한 : 카르타고 갱신 --platform 아이폰 OS --no 사용하기 바이너리
HH887을

2
해봤 carthage update --platform iOS --no-use-binaries지만 여전히 작동하지 않습니다. 프로젝트를 정리하고 Xcode를 다시 시작했는데 여전히 오류가 발생합니다. 내가 시도 할 수있는 다른 것이 있습니까?
Clifton Labrum

1
나는 그것을 시도했다. 반환Apple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Target: x86_64-apple-macosx10.9
Clifton Labrum

9

Xcode터미널에서 기본값 을 새 것으로 업데이트 하는 것이 저에게 효과적이었습니다.

1 단계 : 다음 명령을 사용하여 터미널에서 Xcode 버전을 최신 버전으로 업데이트합니다. Ref

sudo xcode-select -switch <path/to/>Xcode.app

2 단계 : 이제 carthage 업데이트 명령을 시도합니다 .

carthage update --platform iOS

9

최신 업데이트를 제공하려면 :

Carthage는 2017 년 2 월 27 일에 0.20 버전 을 출시했습니다 .

Carthage는 이제 사용 가능한 사전 빌드 바이너리가 호환되는 경우 에만 사전 빌드 바이너리를 사용합니다 .

즉, --no-use-binaries호환되지 않는 사전 빌드 프레임 워크를 피하기 위해 더 이상 사용할 필요가 없습니다 .

따라서 카르타고 버전이 다음 보다 더 크고 다음0.20 과 같은지 확인하십시오 .

carthage update --platform iOS

엑스 코드 8.3.3 0.25 버전으로 카르타고를 업데이트 한 후 아래 일 후에는 업데이트 카르타고 나를 위해 일한 --platform 아이폰 OS --no 사용하기 바이너리
anoop4real

@ anoop4real 없이는 작동하지 --no-use-binaries않습니까? Carthage는 바이너리가 컴파일러 버전과 호환되는지 감지 할 수 있어야합니다. 호환되지 않는 경우 다운로드 한 바이너리를 자동으로 삭제하고 프레임 워크를 로컬로 빌드해야합니다.
kanekin

5

@zirinisp가 말한 것처럼 :

  1. 다음 명령을 사용할 수 있습니다.carthage update --platform iOS --no-use-binaries
  2. 다음 명령 사용 : xcrun swift -versionSwift 버전보기
  3. 이렇게 : Xcode->preferences->locations파생 된 데이터를 지우고 데이터를 보관하려면 명령 줄 도구를 "로 변경하는 것이 가장 중요합니다.Xcode 8.1 "
  4. 다음 명령을 사용하면 xcrun swift -version빠른 버전이 3.0.1임을 알 수 있습니다.
  5. 세트 Use Legacy Swift Language Version = NO

도움이 되길 바랍니다


1
  1. Xcode가 / Applications 폴더에있는 경우 베타 / GM 버전을 이동하고 이름을 Xcode-beta로 지정합니다.

  2. 다음의 출력을 확인하십시오.

    xcrun swift --version

터미널에서이 명령을 실행하면 Carthage가이 명령의 출력을 사용하여 로컬 Swift 버전을 결정하기 때문에 해당 출력이 앱에서 컴파일 할 빠른 버전과 일치해야합니다.

  1. 다음 명령을 실행하여 터미널에서 Xcode 버전을 최신 버전으로 업데이트하십시오.

    sudo xcode-select -s /Applications/Xcode-beta.app/

  2. iOS 용 라이브러리를 빌드하고 다음 명령을 실행하여 Carthage가 기존 (아직 호환되지 않는) 사전 컴파일 된 바이너리를 다운로드하지 못하도록합니다.

    carthage update --platform iOS --no-use-binaries

  3. 청소 및 구축


0

나는 도서관과 똑같은 문제가 있었고 XCTest_Gherkin그것이 나를 위해 일한 것은 다음과 같습니다.

  1. Product-> Scheme->XCTest-Gherkin
  2. Product -> Build

도움이 되었기를 바랍니다. Cocoapods를 사용하고 있습니다.


0

Xcode 빌드 설정에서 프레임 워크 검색 경로 에 적절한 Carthage 빌드 폴더가 포함되어 있는지 확인하십시오 .

$(inherited)
$(PROJECT_DIR)/Carthage/Build/iOS
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.