Swift 5.1로 컴파일된 모듈은 Swift 5.1.2 컴파일러에서 가져올 수 없습니다.
11하여 기존 Xcode 11..RxSwift.framework
이 Xcode 11.0으로 수입된 벌금 및 11.1은 문제가 없었습니다.
오늘, Apple의 Xcode 11.2의 릴리스에 의해서, 업그레이드를 실시했습니다만, 다음의 에러가 표시됩니다.
Swift 5.1로 컴파일된 모듈은 Swift 5.1.2 컴파일러에서 가져올 수 없습니다.
컴파일러의 미스매치에 익숙하고 Xcode 11.2를 사용하여 RxSwift를 재컴파일하여 계속할 수 있지만 Swift 5.1의 주요 특징은 모듈의 안정성입니다.
모듈이 안정되어 있기 때문에 새로운 X코드 릴리즈마다 프레임워크가 계속 재컴파일될 필요는 없다고 생각했습니다만, 이것은 확실히 사실이 아닙니다.
여기서 무슨 일이 일어나고 있는지 설명해 주시면 감사하겠습니다.Xcode 11.2에서 버그가 발생하고 있습니까?아니면 원래 Xcode 11.0으로 컴파일 했을 때 모듈의 안정성을 원한다고 말해야 했을까요?
네, WWDC 비디오를 보시면 설명하실 수 있습니다.https://developer.apple.com/videos/play/wwdc2019/416/
프레임워크의 빌드 설정에서 [Build Settings]> [ Build Options ]> [ Build Libraries for Distribution ]옵션을 [Yes]로 설정해야 합니다.그렇지 않으면 스위프트 컴파일러에 의해 필요한 파일이 생성되지 않습니다..swiftinterface
오래된 라이브러리를 로드할 수 있는 미래의 컴파일러의 열쇠가 되는 파일입니다.
이것은 project.pbxproj 파일에 다음과 같이 표시됩니다.
BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
이 플래그를 설정한 후 Xcode 11.0(swift 5.1)을 사용하여 컴파일한 프레임워크는 Xcode 11.2(swift 5.1.2)에서 사용할 수 있게 되어 모든 것이 정상적으로 동작하고 있는 것 같습니다.
이 질문/답변은 WWDC의 모든 비디오를 시청하지 않은 모든 사람에게 유용한 참고 자료가 되기를 바랍니다.
그래도 오류가 해결되지 않으면 [Product]> [ Clean Build Folder ]를 선택하여 다시 빌드합니다.
모듈 안정성 및 클로즈드 소스에 대한 라이브러리 진화 지원
Swift v5.0
ABIi 도입
Swift v5.1
된 ★★★Module stability
★★★★★★★★★★★★★★★★★」Library evolution support
클로즈드 소스(closed source) 프레임워크(closed source)에 적용할 수 있다(closed source(closed)는 소비자와 별도로 구축된다).
Swift 버전 확인:
Swift Language Version(SWIFT_VERSION)
이 기능을 활성화하려면 v11의 Xcode를 사용해야 합니다.
배포용 빌드 라이브러리 (빌드_LIBRARY_FOR_DISTRIBUCTION)
Select framework target -> Build Settings -> Build Libraries for Distribution (BUILD_LIBRARY_FOR_DISTRIBUTION) -> Yes
swiftc
삭제:
-enable-library-evolution
-emit-module-interface
, 「」가 생성됩니다..swiftinterface
스위프트 모듈인터페이스(.swift 인터페이스)
Swift Module
이 사용하는 것과 합니다.- 「 Objective - C 」 。precompiled binary
★★★★★★★★★★★★★★★★★」Compiled Module
.
Swift Module Interfaces
는 모듈의 퍼블릭 API를 텍스트로 나타낸 것입니다. Objective-C에 대한 Swift의 입니다..h
files.complete files files files files files files files files.
//previously
consumer(app) -> import Module -> producer(framework) .swiftmodule
//using .swiftinterface
consumer(app) -> import Module -> .swiftinterface -> producer(framework) .swiftmodule
그럼에도 불구하고.swiftmodule
수 있는 곳이에요.
Module compiled with _ cannot be imported by the _ compiler
.swiftinterface
이며, 등)가 없습니다.
전제 조건 없음
다음 폴더에 있습니다.
<framework_name>.framework/Modules/<framework_name>.swiftmodule
외관:
// swift-interface-format-version: 1.0
// swift-compiler-version: Apple Swift version 5.2.4 (swiftlang-1103.0.32.9 clang-1103.0.32.53)
// swift-module-flags: -target x86_64-apple-ios12.2-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -Onone -module-name UtilsSwiftFramework
import Foundation
import Swift
@_exported import UtilsSwiftFramework
@_inheritsConvenienceInitializers @objc public class GFISClassA : ObjectiveC.NSObject {
@objc public static var shared: UtilsSwiftFramework.GFISClassA
@objc public func GFISprintHelloWorld()
@objc public func GFISprintHelloWorld(arg1: Swift.String, arg2: Swift.String)
@objc deinit
@objc override dynamic public init()
}
여기에 추가되는 내용은 다음과 같습니다.
swift-interface-format-version
swift-compiler-version
swift-module-flags
하다, 하다, 하다, 하다, 하다를 수 있습니다.dynamic
없이@objc
[대략]
Marking non-'@objc' Swift declaration 'dynamic' in library evolution mode is not supported
XCFramework
[About] 사용을 강요하다
은 ""를 사용할 합니다..swiftinterface
및 "disclosed"의 경우Swift Package Manager
[About] 오픈 소스용
서드파티 라이브러리를 Import할 때 동일한 오류가 발생하였습니다.Xcode 툴체인을 사용하여 수정하고 2019년 9월 19일 출시 https://swift.org/download/#http://https://swift.org/download/ 를 참고하여 수정하였습니다.그 후 나는 내 도서관을 다시 가져와야 했고 그것은 작동했다.
Xcode 12.3에서 Xcode 11.3.1로 다시 이동한 후 repo에서 이 현상을 경험했습니다.즉석에서 명령줄 툴을 업데이트하고 의존관계를 구축하기 위해 이전 버전으로 되돌릴 필요가 있었습니다.
배포(BUILD_LIBRARY_FOR_DISTRIBUCTION) -> 예 & Pod 업데이트 - 오류가 사라졌습니다.
이 문제를 해결할 수 있는 또 다른 방법은 사용 중인 모듈을 더블 체크하고 업데이트가 있는지 확인하는 것입니다.ViewController PresentationSpy를 사용하여 프로젝트에서 경고 컨트롤러를 테스트하고 있었습니다.그 모듈의 작성자가 업데이트를 발표했기 때문에, 저는 팟을 재통합하고 나서 팟 설치를 실시하여 버전을 5.1에서 6.0으로 버전을 업데이트했습니다.프로젝트에서 이전 모듈의 폴더를 삭제했습니다.새로운 버전의 경우 빌드 클리닝 후 프로젝트 내비게이터로 이동하여 VC 프레젠테이션 스파이의 [Copy Files]섹션에 추가한 후 모든 테스트 바로 위에 프로젝트를 드래그 앤 드롭할 수 있었습니다.
간단히 말하면 모듈을 어디서 가져왔는지 다시 한 번 확인하고 업데이트를 확인한 후 Xcode 프로젝트에 다시 추가합니다.
이것으로 컴파일러 에러가 해소되었습니다.
carthage bootstrap --platform ios
brew bundle
pod repo update
위의 단계를 모두 실행해도 해결되지 않는 경우 프로젝트와 직접 관련이 없는 모든 사전 빌드 폴더가 repo에 있는지 확인합니다.모두 삭제하고 pods 폴더와 podfile.lock을 삭제하고 파생된 데이터를 삭제한 후 구축을 시도합니다.
효과가 있었다:D
Apple M1에서 앱을 실행하는 데 도움이 될 수 있습니다.
터미널에서도 시도:
arch -x86_64 pod install
xcode 13.4에서xcode 14.1로 이행했을 때도 같은 문제가 있었습니다.솔루션으로 Xcode - Preferences - Command Line Tools에서 적절한 컴파일러를 설정하는 것입니다.
저는 지점만 바꾼 것과 같은 문제에 부딪혔습니다.파생 데이터 + 클린 빌드를 몇 번 삭제했습니다.Xcode를 재시작할 때까지 작동하지 않았습니다.
카르타고를 사용하여 RxSwift 프레임워크를 추가할 수 있습니다.
기본적으로, 카르타고에서는 기존의 RxSwift.framework 스타일 패키지도 제공하고 있습니다.
그럼 해봐carthage update --no-use-binaries
.
언급URL : https://stackoverflow.com/questions/58654714/module-compiled-with-swift-5-1-cannot-be-imported-by-the-swift-5-1-2-compiler
'programing' 카테고리의 다른 글
python에서 nice 열 출력을 만듭니다. (0) | 2023.04.09 |
---|---|
Swift에서 "포장되지 않은 가치"란 무엇입니까? (0) | 2023.04.09 |
git에서 복제된 프로젝트에서 버전 추적을 제거하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
WPF에서 메인 창을 중앙에 배치하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
USIMageView를 비례적으로 확장하는 방법 (0) | 2023.04.09 |