방금 Xcode 6 Beta 4로 업그레이드했으며 베타 2의 라이브 뷰를 위해 만든 프레임 워크가 있습니다. 또 다른 신속한 버그 로 인해 Obj-C 코드를 사용해야했습니다. 그래도 업그레이드 할 때 다음 오류가 발생합니다.
오류 : 프레임 워크 대상에 브리징 헤더 사용이 지원되지 않습니다
릴리스 정보에서 아무것도 보지 못했거나 다른 마이그레이션 경로를 찾았습니다. 다른 사람이 이것을 보았고 해결책에 도달 했습니까?
베타 3에서는 라이브 뷰에 대한 프레임 워크가 필요하지 않았지만 작동하는 경우 내 경우에는 의미가 있습니다. 폴백으로 제거 할 수는 있지만 베타 4에서 완전히 손상되지 않은 프레임 워크를 선호합니다.
답변
오류에서 알 수 있듯이 브리징 헤더는 프레임 워크에서 사용할 수 없습니다. 동일한 프레임 워크 대상 내에서 가져 오기 코드 의 섹션 믹스 & 매치 이의 사과 문서 힌트. “우산 헤더 파일에서 Swift에 노출하려는 모든 Objective-C 헤더를 가져 오십시오”라고 말합니다.
그러나 특정 헤더를 공개해야 할 수도 있음을 발견했습니다. 이 답변은 그 이유와 방법을 검토합니다. 스위프트 컴파일러 오류 : “프레임 워크 모듈 내부의 비 모듈 식 헤더” .
따라서 다음을 수행하십시오.
- 브리징 헤더 파일을 제거하십시오.
- 프레임 워크의 빌드 설정에서 브리징 헤더 파일에 대한 참조를 제거하십시오.
- 우산 파일 ([ProductName] .h)에 필요한 헤더를 추가하십시오.
- 포함 된 파일을 “빌드 단계”의 프레임 워크 “헤더”섹션에 공개하십시오.
- 청소하고 재건하십시오.
참고 : “우산 헤더 파일”은 일반적으로 프레임 워크의 모든 공용 헤더를 나타내는 파일 ([ProductName] .h)입니다. 일반적으로 프레임 워크에 포함 된 다른 헤더에 대한 #import 문 목록입니다. Xcode에서 UIKit.h를 열면 우산 파일의 좋은 예가 표시됩니다.
답변
두 가지 가능성이 있습니다. 우산 헤더 파일에 필요한 헤더를 추가하고 공개하는 것은 한 가지 방법입니다. 그러나 Swift에서 헤더를 사용할 수 있어야하지만 공개적으로 사용할 수없는 경우에 문제가됩니다.
Swift에서 내부 헤더를 사용할 수있게하는 두 번째 가능성은 여기 에 자세히 설명되어 있습니다 . 기본적으로 다음과 유사한 모듈 맵을 작성해야합니다.
module AwesomeKitPrivate {
header "../InternalClass.h"
export *
}
그런 다음 설정을 사용하여 XCode에 포함될 수 있습니다.
SWIFT_INCLUDE_PATHS = $(SRCROOT)/AwesomeKit/ProjectModule
답변
Objective-C를 Swift로 가져 오기를 참조하십시오 .
동일한 프레임 워크에서 Objective-C 코드를 Swift로 가져 오려면
- 빌드 설정의 패키징에서 해당 프레임 워크 대상에 대한 모듈 정의 설정이 “예”로 설정되어 있는지 확인하십시오.
-
우산 헤더 파일에서 Swift에 노출하려는 모든 Objective-C 헤더를 가져옵니다. 예를 들면 다음과 같습니다.
#import "XYZ / XYZCustomCell.h" #import "XYZ / XYZCustomView.h" #import "XYZ / XYZCustomViewController.h"
-
포함 된 파일을 “빌드 단계”의 프레임 워크 “헤더”섹션에 공개하십시오.
-
청소하고 재건하십시오.
Swift는 우산 헤더에 공개하는 모든 헤더를 볼 수 있습니다. 해당 프레임 워크에있는 Objective-C 파일의 내용은 import 문없이 해당 프레임 워크 대상 내의 모든 Swift 파일에서 자동으로 사용 가능합니다. 시스템 클래스에서 사용하는 것과 동일한 Swift 구문으로 사용자 정의 Objective-C 코드를 사용하십시오.
let myOtherCell = XYZCustomCell()
myOtherCell.subtitle = "Another custom cell"
중요 : “우산 헤더 파일”은 {ModuleName} .h 파일을 의미합니다. BTW에서 대상 이름은 {ModuleName} .framework입니다.
