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


91

그러나 동일한 Xcode를 사용하여 프레임 워크를 다시 컴파일했지만 여전히이 오류가 발생합니다.

  • 두 가지 모두를위한 Base SDK iOS 11.1
  • Swift 언어 버전 Swift 4.0
  • 포드 / 카르타고를 사용하지 않음

누군가가 알기를 바랍니다


Apple은 Objective C에 대한 10 년 사용 중단 알림을 재고해야하는 것 같습니다. : ^) 이것은 현재> 1 프로젝트에서 저를 물 렸으며 둘 다 타사 바이너리 프레임 워크입니다.
Anton Tropashko

답변:


138

최신 정보:

Xcode 릴리스 버전의 경우 :

이 오류 (및 Swift 4.1, 4.2 등과 관련된 유사한 오류)는 이전 Xcode 도구로 빌드 된 프레임 워크를 사용하는 Xcode 9.1, 9.2, 9.3, 9.4, 10 등으로 프로젝트를 열 때 발생합니다.

문제를 해결하려면 새로운 업데이트 된 Xcode 도구를 사용하여 Carthage ( carthage update --platform iOS), Cocoapods ( pod update또는 pod install)를 사용하거나 수동으로 프레임 워크를 업데이트하고 다시 빌드하십시오 . 도구는 Xcode를 업데이트 할 때 자동으로 업데이트되어야하지만 그렇지 않은 경우 원래 답변에서 아래에 설명 된 단계를 따를 수 있습니다.

Xcode가 캐시 된 프레임 워크 빌드를 사용하지 않도록하려면 프로젝트 cmd + shift + k와 빌드 폴더 를 정리해야 할 수도 있습니다 cmd + option + shift + k.

경우에 따라 파생 데이터 폴더를 삭제해야 할 수도 있습니다 (Xcode 환경 설정-> 위치-> 파생 데이터 폴더로 이동하면 쉽게 찾을 수 있습니다 ( Thanks Stunner ).

Xcode 베타 버전의 경우 :

아래의 원래 답변을 참조하고 위의 단계를 따르십시오.

원래 답변 :

xcodebuild 도구가 Swift 4.0으로 빌드되고 Xcode 9.1 베타의 Swift 4.0.1과 호환되지 않는 Xcode 9.0으로 설정되어있을 것입니다.

다음 명령을 사용하여 터미널을 체크인하십시오.

xcodebuild -version

또는 Xcode 환경 설정-> 위치로 이동하여 명령 줄 도구를 Xcode 9.1로 확인 / 변경하십시오. 그러면 설정해야합니다.


1
나는 또한 파생 데이터를 지우고 프로젝트를 정리했지만 모든 사람에게 필요한지 모르겠지만 여기에있는 것처럼 보였습니다. 감사합니다
사이먼

3
안녕하세요 @Zig. github (mattdonnelly / swifter)에서 사용하는 저장소는 Swift 4.0에 있지만 분명히 XCode 9.0을 사용하여 컴파일되었으므로이 문제가 발생합니다. XCode 9.1 이상을 위해 Github에서 다른 사람의 cocoapod를 재 컴파일하는 데 필요한 단계는 무엇입니까?
Joseph Beuys 'Mum

1
명령 줄 도구를 추가하는 방법이 있습니까? 명령 줄 드롭 다운에 Xcode 9.3이 있습니다. 그리고 나도이 문제가
타라 tandel

1
내 포드 중 일부는 Swift 4.2를 사용할 준비가되지 않았기 때문에이를 위해 고정해야 Swift Language Version했습니다 Swift 4. 그런 다음 작동했습니다.
skofgar

1
빌드 폴더 정리를위한 바로 가기 1은 내가 직접 수행하는 방법을 아는 것이 아니 었습니다.
Matt

25

내 문제는 Swift 4.0.2 용으로 컴파일되지 않은 외부 프레임 워크 때문이었습니다. Carthage를 통해이 파일을 추가 했으므로 다음을 실행합니다.

carthage update --platform iOS

그런 다음 프로젝트를 정리하고 cmd + shift + k폴더를 빌드 cmd + option + shift + k하고 파생 된 데이터 폴더를 삭제 (단순히 휴지통으로 이동하는 것도 가능)하는 것이 저에게 효과적이었습니다.


2
실제로 이것은 본질적으로 해결책입니다. Apple의 최신 신속한 업데이트로 인해 오늘 (4 월 18 일)에도 똑같은 일이 일어났습니다! :)
Fattie 2018 년

cmd + option + shift + k는 Carthage를 업데이트 한 후 트릭을 수행 한 것입니다. 감사!
Leonardo Leite

15

제 경우에는 SwiftUI를 테스트하기 위해 xCode 11 베타 버전을 다운로드했습니다. 프로젝트를 실행할 때 "Swift 5.1로 컴파일 된 모듈은 Swift 5.0.1 컴파일러로 가져올 수 없습니다 : ..." 오류가 발생합니다.

이 문제를 해결하려면. xCode 명령 줄 도구를 새로운 xCode 11 주석 줄 도구로 변경했습니다. 그 후 SwiftUI로 새로운 xcode 프로젝트를 생성 할 수 있습니다.

Xcode-> 환경 설정-> 위치-> XCode 명령 줄 도구

Xcode Commend Line 도구

나는 이것이 새로운 freamework로 테스트하려는 사람을 도울 것입니다. :)


9

여기 에서 작동하던 특정 Xcode 버전의 Xcode Toolchain을 설치 하십시오 .

Xcode 도구 모음에는 특정 버전의 Swift에서 작업하기위한 일관된 개발 환경을 제공하는 데 필요한 컴파일러, lldb 및 기타 관련 도구의 복사본이 포함되어 있습니다.

Xcode의 환경 설정을 열고 구성 요소> 도구 체인으로 이동 한 다음 설치된 Swift 도구 체인을 선택합니다.

이렇게하면 당분간 앱을 컴파일하고 실행할 수 있습니다.


검색 및 카르타고 업데이트, 부트 스트랩, 빠른 언어 설정 등으로 가능한 모든 솔루션을 시도하고 2 일 후에 내가 여기 정답 : 발견
memresubasi

7

이 문제는 Swift 4.2를 추가하는 Xcode 10 베타에서 발생했습니다. 내 문제는 Carthage 또는 외부 종속성과 관련이 없습니다.

YourTarget > Build Settings > Swift Language Version모든 Xcode 대상으로 이동 하십시오.

내 모든 설정은 Swift 4.

파일 복사 빌드 단계를 추가 한 후 오류가 발생하기 시작했습니다.

: 0 : 오류 : Swift 4.1.2로 컴파일 된 모듈은 Swift 4.2 컴파일러에서 가져올 수 없습니다. /Users/user/Library/Developer/Xcode/DerivedData/MyApp-faskfrihumfcdibjxisjvbfshppp/Build/Intermediates.noindex/MyApp.build/Debug/ MyAppExtension.build/Objects-normal/x86_64/MyClass~partial.swiftmodule

0이 아닌 종료 코드로 인해 MergeSwiftModule 명령이 실패했습니다.

나는 각 목표의 설정 Swift Language VersionSwift 4.2오류를 제거하는합니다.

그러나 모든 대상을 Swift 4똑같이 유효하게 설정 해야하므로 처음에 오류가 발생하는 이유를 잘 모르겠습니다 .


1
나는 문제가 발견가 있어요Build Settings
Chandrew

@Chandrew는 먼저 타겟을 클릭합니다. 답변이 업데이트되었습니다.
pkamb

3

제 경우 (Xcode 9.2) :

나는 Xcode에 갔다 Preferences > Locations > Derived Data

그런 다음 데이터를 삭제하고 깨끗한 빌드를 수행했으며 괜찮 았습니다.


1

제 경우에는 플러그인과 함께 CocoaPods를 사용 cocoapods-binary하여 라이브러리를 바이너리로 미리 빌드했습니다 . Xcode를 10에서 11로 업그레이드 한 후 Xcode에서 다음 오류가 발생합니다.

Module compiled with Swift 5.0.1 cannot be imported by the Swift 5.1 compiler

/Pods디렉토리 를 제거하고 pod install.


0

제 경우에는 불평하는 버전으로 프레임 워크를 다시 컴파일했습니다.

pod update카르타고 를 재 컴파일, 실행 또는 업데이트 (사용중인 항목)하고 프로젝트를 빌드합니다.

그런 다음 파인더에서 프레임 워크를 검색합니다. theFramework.framework프로젝트에를 복사하여 붙여넣고 "필요한 경우 항목 복사"를 확인하십시오. 프로젝트를 다시 빌드하면 작동합니다.

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