source

Xcode 6 / Beta 4: 프레임워크 대상과 함께 헤더를 브리징하는 것은 지원되지 않습니다.

ittop 2023. 5. 27. 11:58
반응형

Xcode 6 / Beta 4: 프레임워크 대상과 함께 헤더를 브리징하는 것은 지원되지 않습니다.

방금 Xcode 6 베타 4로 업그레이드했으며 베타 2의 라이브 뷰용으로 만든 프레임워크가 있습니다.또 다른 빠른 버그로 인해 Obj-C 코드를 사용해야 했습니다.그러나 업그레이드할 때 다음 오류가 발생합니다.

오류: 프레임워크 대상과 함께 헤더를 브리징하는 것은 지원되지 않습니다.

릴리스 노트에서 아무것도 보지 못했거나 다른 마이그레이션 경로를 찾지 못했습니다.이것을 보고 해결책을 찾은 사람이 또 있습니까?

저는 베타 3이 실시간 보기를 위한 프레임워크의 필요성을 없앴다는 것을 알고 있지만, 제 경우에는 그것을 작동시킬 수 있다면 말이 됩니다.예비로 제거할 수는 있지만, 베타 4에서 완전히 깨지지 않았다면 프레임워크를 사용하고 싶습니다.

오류가 명시한 대로 Framework에서는 헤더를 브리징할 수 없습니다.믹스 앤 매치 애플 문서의 동일한 프레임워크 대상 내에서 코드 가져오기 섹션은 이를 암시합니다."우산 헤더 파일에서 Swift에 노출할 모든 Objective-C 헤더를 가져와야 합니다."

그러나 이러한 특정 헤더도 공개해야 할 수 있습니다.이 답변은 Swift 컴파일러 오류: "프레임워크 모듈 내부의 비모듈형 헤더"를 수행하는 이유와 방법을 검토합니다.

다음을 수행합니다.

  1. 브리징 헤더 파일을 제거합니다.
  2. 프레임워크의 빌드 설정에서 브리징 헤더 파일에 대한 참조를 제거합니다.
  3. 필요한 헤더를 우산 파일([ProductName])에 추가합니다.h)
  4. 포함된 파일을 프레임워크의 "빌드 단계"의 "헤더" 섹션에 공개합니다.
  5. 청소 및 재구축.

참고: "우산 헤더 파일"은 파일([ProductName])입니다.일반적으로 프레임워크의 모든 공용 헤더를 나타냅니다.일반적으로 프레임워크에 포함된 다른 헤더에 대한 #import 문 목록입니다.Xcode에서 UIKit.h를 열면 우산 파일의 좋은 예를 볼 수 있습니다.

두 가지 가능성이 있습니다.필요한 헤더를 우산 헤더 파일에 추가하여 공개하는 것도 한 가지 방법입니다.그러나 Swift에서 헤더를 사용할 수 있어야 하지만 공용이 아닌 경우에는 문제가 됩니다.

Swift에서 내부 헤더를 사용할 수 있는 두 번째 가능성은 여기에 자세히 설명되어 있습니다.기본적으로 다음과 유사한 모듈 맵을 만들어야 합니다.

module AwesomeKitPrivate {  
  header "../InternalClass.h"
  export *
}

그런 다음 다음 설정을 사용하여 XCode에 포함할 수 있습니다.

SWIFT_INCLUDE_PATHS = $(SRCROOT)/AwesomeKit/ProjectModule  

목표 C를 Swift로 가져오기를 참조하십시오.

동일한 프레임워크에서 Swift로 목표-C 코드를 가져오려면 다음과 같이 하십시오.

  1. 빌드 설정의 패키징에서 해당 프레임워크 대상에 대한 모듈 정의 설정이 "예"로 설정되어 있는지 확인합니다.
  2. 우산 헤더 파일에서 Swift에 노출할 모든 Objective-C 헤더를 가져옵니다.예:

    #import "XYZ/XYZCustomCell.h"#import "XYZ/XYZCustomView.h"#import "XYZ/XYZCustomViewController.h"
  3. 포함된 파일을 프레임워크의 "빌드 단계"의 "헤더" 섹션에 공개합니다.

  4. 청소 및 재구축.

Swift는 당신이 공개적으로 노출하는 모든 헤더를 당신의 우산 헤더에서 볼 것입니다.해당 프레임워크의 Objective-C 파일 내용은 Import 문 없이 해당 프레임워크 대상 내의 모든 Swift 파일에서 자동으로 사용할 수 있습니다.시스템 클래스에서 사용하는 것과 동일한 Swift 구문으로 사용자 지정 Objective-C 코드를 사용합니다.

let myOtherCell = XYZCustomCell()
myOtherCell.subtitle = "Another custom cell"

중요: "우산 헤더 파일"은 {ModuleName} 파일을 의미합니다. BTW이며 대상 이름은 {ModuleName}입니다.뼈대

내 경우에는 그냥 제거하는 것.Objective-C Bridging Header내프임크설에서 .Build Settings도움이 되었습니다.

여기에 이미지 설명 입력

언급URL : https://stackoverflow.com/questions/24875745/xcode-6-beta-4-using-bridging-headers-with-framework-targets-is-unsupported

반응형