[ios] Xcode 9 : Swift 3.1로 컴파일 된 모듈은 Swift 4.0에서 가져올 수 없습니다.

Xcode 9로 업데이트 한 후 내 프로젝트 중 하나를 빌드하려고했습니다.

FacebookLogin 포드를 사용합니다 . FacebookLogin / LoginButton.swift에 컴파일러 오류가 있습니다.

@testable import FacebookCore
❌ Module compiled with Swift 3.1 cannot be imported in Swift 4.0

내 대상의 빌드 설정에서 Swift 언어 버전은 Swift 3.2 로 설정됩니다 .

스크린 샷 추가

Facebook이 포드를 업데이트 할 때까지 기다려야 할 것 같아요. 아니면 다른 제안?

감사 !



답변

최신 정보:

솔루션은 Swift 5 및 Xcode 11에서도 테스트되고 작동합니다.

실물:

Carthage 를 사용하여 Swift 3.2에서 모듈을 컴파일하는 경우 터미널로 이동하여 다음을 실행해야한다고 추가하고 싶습니다 .

sudo xcode-select --switch /Applications/Xcode-beta.app/Contents/Developer

Xcode 9 명령 줄 도구를 사용하려면 다음을 실행할 수 있습니다.

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

이렇게하면 현재 명령 줄 도구로 라이브러리가 컴파일됩니다. 약간 느릴 수 있지만 이제 프로젝트가 빌드되어야합니다.

노트

안정적인 Xcode 명령 줄 도구를 되돌리고 사용하려면 다음을 실행하십시오.

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer


답변

Xcode 9는 Swift 3.2와 swift 4를 모두 이해하는 Swift 4 컴파일러와 함께 제공되며, 심지어 두 가지 버전을 믹스 앤 매치 할 수 있습니다. 불행히도 다른 버전은 지원되지 않습니다.

언어를 Swift 3.2로 설정하더라도 Swift 4 컴파일러를 사용합니다.

cocoapods를 사용하는 경우 pod 파일 끝에 이것을 추가하여 pod가 Swift 3.2 또는 4.0을 사용하도록 할 수 있습니다.

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '3.2'
        end
    end
end

또는 FacebookLogin이 Swift 3.2 또는 4로 업데이트 될 때까지 팟 (Pod)의 파일을 프로젝트에 임시로 직접 넣을 수 있습니다.

참고 : Matt의 피드백에 따라 편집 됨


답변

빌드하기 전에 타겟을 청소할 수 있습니다. 그것은 나를 위해 잘 작동합니다.


답변

‘Alamofire’를 가리키는 Xcode 9 Beta 3에서 동일한 문제가 발생하여 몇 가지 다른 솔루션을 시도했는데 가장 쉬운 방법은 다음과 같습니다.

1. CMD+SHIFT+K to clean the build
2. Restart Xcode 9 <-- make sure you do this step, that's critical. `


답변

“클린 빌드 폴더”를 수행하고 Xcode 9를 다시 시작하면 오류가 해결되었습니다. 또한 오류로 인해 앱이 내 장치 또는 시뮬레이터에서 실행되는 것을 중지하지 않았습니다.


답변

xcode DerivedData 디렉토리로 이동 한 다음 그 안의 모든 파일을 제거하고 프로젝트를 다시 컴파일합니다. 그것은 나를 위해 작동합니다.

기본 DerivedData 디렉토리는 : ~ / Library / Developer / Xcode / DerivedData입니다.


답변

Carthage를 사용하는 경우 터미널을 열고 ;

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

Pod를 사용하는 경우 터미널을 열고 ;

pod update

(또한 pod에서 작동하지 않는 경우 podfile에서 SWIFT_VERSION을 변경할 수 있습니다. 예 :

config.build_settings['SWIFT_VERSION'] = '3.2'

)

후;

Xcode를 열고 사용하십시오.

Command+Option+Shift+K

여기에 이미지 설명 입력