2016-09-13 5 views
21

대체 제목 (검색을 지원하기 위해)

  • 엑스 코드 8
  • error in auto-import: failed to get module 'XYZ' from AST context 엑스 코드를 오브젝티브 C 응용 프로그램에 연결 스위프트 2.3 프레임 워크를 디버깅 할 수 없습니다 8
  • 엑스 코드 (8)는 스위프트 프레임 워크를위한
  • warning: Swift error in module <XYZ>
  • 해결 방법을 디버깅 할 수 없습니다; Xcode 디버거는 Objective-C로 작성된 응용 프로그램 만 디버그 할 수는 있지만 Swift로 작성된 프레임 워크와는 연결하지 않습니다. (28312362)

좀 모듈 (프레임 워크)에 대한 링크 오브젝티브 C로 작성된 응용 프로그램은 스위프트 2.x 또는 3.0에 쓴 로 이동 내가 모듈을 디버깅 할 수 없습니다 를 사용하는 모듈을 업데이트 할 때는 목표 - C 응용 프로그램에 포함 스위프트 모듈/프레임 워크를 디버깅 할 수 없습니다

질문

모든을 (디버깅 등) 그러나, 에서 잘 작동합니다.

LLDB는 이러한 오류를보고 :

warning: Swift error in module XYZ. 
Debug info from this module will be unavailable in the debugger. 

error: in auto-import: 
failed to get module 'ABC' from AST context 

내가 스위프트 2.3에 내장 된 응용 프로그램에 모듈을 연결하면이 발생하지 않습니다.

답변

6

TL : 박사

앱의 대상은 "빌드 설정"에서 사용자 정의 설정을 추가합니다.

SWIFT_VERSION = 2.3

SWIFT_VERSION = 2.3 — Build Settings

정보

이이 엑스 코드 (8) 버그 또는 애플의 정책이 있다면 만약 내가 확실 해요 (스위프트 3.0에 힘 개발자를 시도?) 더. 하지만 ... 기본적으로 Xcode 8은 표준 Swift 런타임 라이브러리의 Swift 3.0 버전을 설치합니다.

LLDM으로 디버깅 할 때 Swift 2.3 모듈이로드되지 않습니다 (Swift 3.0 런타임으로).

응용 프로그램이 Swift 2.3 (또는 Apple에서 호출 할 때 기존 Swift)을 사용하도록 강제 설정하여 문제를 해결합니다.

Swift 앱은이 설정이 Xcode에 노출되어 있지만 Objective-C 앱에 수동으로 추가해야합니다.

또한 조언

포트 최대한 빨리 스위프트 3.0로 스위프트 2.3 코드, 애플은 매우 오랫동안 2.X를 지원하지 않습니다.

+0

Xcode 8.0은 사용중인 Swift 버전을 확인하고 적절한 툴체인을 선택하려고합니다. 프로젝트가 어떻게 설정되어 있는지는 그 탐지를 무시하는 것입니다. 예를 들어, Xcode는 사용 가능한 최신 툴체인을 선택합니다.이 툴체인은 순수한 ObjC 프로젝트를 위해 Swift 3.0과 같은 도구 체인 일 것입니다. 예를 들어, Xcode는 순수한 ObjC 대상의 종속 하위 프로젝트 또는 대상을 조사하지 않고 주변에 스위프트가 있는지 여부를 확인합니다. 버그를 신고 할만한 가치가있는 것 같습니다. –

+0

몇 가지 이유로 우리에게 도움이되지 않습니다. 명시 적으로 'swift_version'(8A218a에서 "레거시 스위프트 언어 버전 사용"으로 표시됨)을 설정해도 결과에는 영향을 미치지 않습니다. –

+0

@DavidLord "레거시 스위프트 언어 버전 사용"이 다릅니다. 위의 시나리오에서이 옵션이 프레임 워크 대상에 설정되어있을 경우 Xcode에서 3.x가 아닌 Swift 2.x를 사용하도록 지시하는 데 사용됩니다. 'SWIFT_VERSION'은 (Objective-C) 앱 타겟에 설정되어야합니다. 희망이 도움이! – rjstelling

2

제 경우에는 빌드 설정 파일에서 Objective-C Bridging header을 제거해야했습니다. 내 브리징 헤더 파일은 아무 것도하지 않았으므로 괜찮습니다.프레임 워크 중 하나가 SDWebImage 이미 포장 (내가 볼 수없는했기 때문에

import SDWebImage이 문제했다 : 그것은 고통스러운 시간이 많이 소요 나를 위해

10

는 그냥 단순하게 그것), 그 프레임 워크는 Objective-C 였고 그 앱은 Swift였다. 또한 SDWebImage를 프로젝트에 추가했습니다. 왜냐하면 내가 작성한 클래스에서이 코드를 사용하고 xCode 디버거가 처리 할 수없는 혼란을 만들어 냈기 때문입니다. 그래서 기본적으로 어떤 방법으로도 복제되지 않았는지 확인하십시오. 예를 들어 SDWebImage와 같은 일반적인 사항을 확인합니다.

+1

나는 똑같은 문제를 지적했다. – userx

+2

두 번이나 투표 할 수 있기를 바랍니다. Thnx 톤. – mars

+1

@Tim Friedland JSON 모델 프레임 워크와 동일한 문제가 있습니다. 답변은 – SARATH

2

9.3 시뮬레이터에서 디버깅을 시도하는 동안 error in auto-import: failed to get module 'XYZ' from AST context 메시지가 나타납니다. 10.2 시뮬레이터로 전환하면 문제가 해결되었습니다. 내가 애플 엔지니어와 함께이 문제를 논의

9

우리 팀이 주이를 알아 내려고 보냈다 WWDC 2017에서 숀라는 이름, 그리고 우리가 생각하지 못했던 애플의 컴파일러에 버그 었죠 우리 스스로. 또한 매우 쉬운 해결 방법이 있습니다.

프레임 워크와 프로젝트에서 컴파일 플래그를 집계하는 방식에 버그가 있으며 "순수한 Objective-C"프로젝트가이 기능을 "활성화"합니다.

해결책 : Objective-C 프로젝트에서 하나의 빈 Swift 파일 ("Whatever.swift"또는 무엇이든)을 더 이상 추가하지 마십시오 (new-> file-> Swift 파일, 브리징 헤더를 작성하지 마십시오. 파일에는 Foundation의 가져 오기 만 포함됩니다).

그리고 그게 전부입니다. 문제 해결됨.

+0

이와 관련하여 rdar 또는 Swift 버그 번호가 있습니까? –

+0

Swift에서 테스트 만있는 디버깅을 수정하려면 프로젝트를 대상으로하는 빈 Swift를 추가해야합니다. Swift 테스트 파일 만 추가하는 것만으로는 충분하지 않습니다. 다른 누구도이 솔루션을 발견하고 Swift에서 테스트를 작성하기를 원할뿐입니다. – Psiticosis

7

사용 FR의 V 엑스 코드를 다시 시작하기 위해 더 많은 디버깅 https://www.codeproject.com/Articles/1181358/Debugging-with-Xcode

+0

'fr v'는 '프레임 변수'를 나타냅니다. 자세한 내용은 [LLDB 디버깅 가이드] (https://developer.apple.com/library/content/documentation/General/Conceptual/lldb-guide/chapters/C5-Examining-The-Call-Stack.html)에서 확인할 수 있습니다. – leanne

1

시도를

를 디버깅하는 대신 . 제 경우에는 문제가 해결되었습니다.

+0

사실,이 작품 양식 날 !!! –

0

내 경우에는 LLDB에서보고 된 "C"코드에 컴파일러 오류가 발생하여 LLDB가 다시 작동하기 시작한 오류를 수정했습니다.

0

Tim https://stackoverflow.com/a/41876400/1840269에서 제안한 것처럼 우리 문제의 근본 원인은 중복 된 것이 었습니다.

obj-c와 Swift에서 모두 사용 된 SDWebImage에 대한 obj-c 래퍼 범주가 있습니다. Swift에서 카테고리를 가져올 때 SDWebImage 포드가 이미 Swift 모듈로 자체 노출 되었기 때문에 재정의/중복 가져 오기로 인해 모든 것이 블로워되었습니다.

해결책? obj-c 카테고리를 Swift 확장으로 다시 구현했습니다. Swift와 obj-c에서 확장자 앞에 @objc을 추가하고 obj-c에서 #import "product-Swift.h" 파일을 가져 와서 사용했습니다.

그리고 아마도 으로 시작하십시오.