Objective-C 프레임 워크를 Swift 프로젝트로 가져올 때 Bridging Header에서 "파일을 찾을 수 없음"발생


96

ObjC 기반 프레임 워크를 가져 오려고하는 Swift 프로젝트가 있습니다. 프레임 워크는 프로젝트 경로 아래의 디렉토리에 있으며 Xcode의 프로젝트에서 참조됩니다. 프로젝트의 'Build Phases'페이지에있는 "Link Binary with Libraries"에도 추가됩니다.

그러나 어떤 이유로 Bridging-Header 파일에 프레임 워크를 포함 할 수없는 것 같습니다. 다음과 같은 오류가 발생합니다.

BridgingHeader.h:5:9: error: 'Parse/Parse.h' file not found
#import <Parse/Parse.h>
        ^
<unknown>:0: error: failed to import bridging header 'BridgingHeader.h'

내가 확인한 것 :

  1. "Objective-C 호환성 헤더 설치"가 "예"로 설정됩니다.
  2. 헤더 검색 경로에는 프레임 워크에 대한 경로가 포함됩니다.

나는 내가 뭔가를 놓치고 있다고 확신하므로 누군가 단서가 있다면 좋을 것입니다.


3
난에 라이브러리 경로를 넣어 잊었 Header Search Paths이 경우 질문에, 도움 : D
Aishwat 싱

답변:


78

해결책을 찾았습니다.

  • "Objective-C 브리징 헤더"설정 (일명 SWIFT_OBJC_BRIDGING_HEADER)은 프로젝트 수준이 아닌 대상 수준에서 설정해야합니다. 프로젝트 수준에서 설정 값을 삭제하십시오.

(저에게 Xcode 버그처럼 보입니다. 왜 수정했는지 모르겠습니다.)


1
이것은 정말 이상합니다. 동일한 오류가 발생했으며 프로젝트 수준에서 헤더가 정의 된 것으로 나타났습니다. 이미 대상 수준에서 정의했지만 타사 프레임 워크를 추가 할 수 있도록 프로젝트 수준에서 제거해야했습니다. Xcode 버그 인 것 같습니다.
Jojodmo

2
@MarcoAlmeida, 테스트 대상이있는 경우 "Objective-C Bridging Header"설정도 제거하십시오. 도움이 될 것입니다.
Davlat Mirmanov 2015 년

3
믿을 수 없는. 감사합니다.
대런

1
안녕하세요! 여기에 같은 문제가 :(이 방법은 위의 설명으로 해결되지는 않지만 ...
마이크 K

1
이것은 Xcode 9.2에서 나를 위해 일했습니다. 그럼에도 불구하고 ... 많은 년 후에 고정되지
올리버 아이 히 호른에게

58

나는 같은 문제가 있습니다. 예를 들어 모든 가져 오기를에서 #import "HMSegmentedControl.h"로 변경했습니다 #import <HMSegmentedControl/HMSegmentedControl.h>.


7
코코아 포드로 작업하려면 이것이 필요합니다. 브리징 헤더에서 #import "abc.h"사용자 #import <abc / abc.h> 좋아요로 pod를 가져 오지 마십시오.
NaXir 2013-08-23

1
당신은 신입니다! 감사합니다.
Alper

제 경우에는 #import <ios-qr-encoder / UIImage + MDQRCode.h>를 #import "UIImage + MDQRCode.h"로 변환했고 작동했습니다
Mashhadi

당신은 왕이다
이타 스펙터

27

lib사용자 헤더 검색 경로에 내 디렉토리 를 추가해야했습니다 .

테스트 대상 설정-사용자 헤더 검색 경로

제 경우에는 lib디렉토리에 .a-library 파일과 일부 헤더 파일이 포함되어 있습니다. 이들은 브리징 헤더 파일에 포함되어 있습니다. 그러나 신속한 컴파일러는이를 찾지 못했습니다. ${PROJECT_DIR}/lib사용자 헤더 검색 경로에 추가했을 때만 테스트 대상을 구축했습니다.

(Mavericks 10.9.5에서 Xcode 6.2를 사용하고 있습니다)


1
기본 대상의 헤더 검색 경로에 Pods / *를 추가하여이 문제를 해결할 수 있습니다. 흥미롭게도 Swift 프레임 워크를 대상에 종속성으로 추가하기 전에는이 문제가 없었습니다. Xcode 7 베타 6.
bizz84

이것은 정확히 나를 위해 일한 것입니다. 내 프로젝트에 라이브러리 (.a)가 포함 된 프레임 워크가 있습니다. User Header Search Paths에서 라이브러리의 헤더에 대한 검색 경로를 만들어야했습니다.
Chris Livdahl

또한 Pods / library 폴더를 가져와야했습니다. 정말 감사합니다!
thibaut noah

17

완전히 다른 원인으로 동일한 오류 메시지가 발생했습니다.

설정:

  • 앱 타겟, 모든 Obj-C 코드
  • 단일 신속한 테스트 케이스 및 앱 코드를 참조하는 브리징 헤더가있는 단위 테스트 대상

두 번째 빠른 테스트 케이스를 추가했을 때, 청소 후 (또는 팀 동료의 컴퓨터에서) 단위 테스트 대상을 빌드 할 때이 오류가 발생했습니다.

단위 테스트 대상에 더미 Obj-C 클래스를 추가하여 수정되었습니다.


5
감사합니다. 이것은 전혀 의미가 없음에도 불구하고 절대적으로 작동했습니다.

나중에 더미 Obj-C 클래스를 삭제할 수있었습니다. 내 생각에이 솔루션의 부작용은 테스트 대상별 브리징 헤더를 생성하는 것인데, 이로 인해 Xcode가 호스트 응용 프로그램의 브리징 헤더를 무시하게됩니다.
clozach

위의 부록 : 클린 빌드를 수행 한 후 컴파일 중에 세그먼트 오류 11이 발생하기 시작했습니다. 시행 착오 끝에 더미 .m 파일이 있어야하지만 비어 있을 있습니다. 광기.
clozach

테스트 대상에 더미 objc 클래스를 추가하여 해결했습니다!
neoneye

5

cocoapods를 사용하는 경우 다음 명령을 실행하여 pod를 다시 설치해보십시오.

pod install

최근에 컴파일되지 않은 새 구성 (동일한 파일을 찾을 수 없음)을 만들었 기 때문에 다른 구성 (디버그 및 릴리스)이 있었기 때문에 도움이되었습니다. pod install추가 된 새로운 구성에 필요한 것 같습니다 ...
Mete

5

이것은 어떻게 든 나를 위해 트릭을했습니다.

  • 깨끗한 프로젝트
  • 빌드 폴더 정리
  • Xcode 다시 시작

trics를 시도하지 않고 일반적인 답변을 제공하십시오.
Nico

이 특정 히트 앤 트라이 트릭은 매우 적은 노력이 필요하므로 다른 솔루션을 생각하는 동안 시도해도 아프지 않습니다. )
Hlung

1
안타깝게도이 특정 히트 앤 트라이 트릭이 너무 자주 정답입니다.
Robert Schmid

5

이 오류는 Cocoapods 라이브러리 CocoaImageHashing을 설치할 때 나타납니다. 문제는 검색 경로가 잘못되었다는 것입니다. 따라서 대상 수준의 빌드 설정-> 검색 경로-> 헤더 검색 경로에서 경로는 기존 폴더가 아닌 폴더 (예 : "$ {PODS_ROOT} / Headers / Public / CocoaImageHashing")에 해당합니다. / 존재하지 않았습니다. $ {PODS_ROOT} / CocoaImageHashing 경로를 추가했는데 오류가 사라졌습니다.


4

조금 이상하지만 테스트 대상의 "번들 리소스 복사"단계에 리소스를 추가해야 기본 앱 대상에서 모든 헤더를로드 할 수 있습니다. 제 경우에는 추가 main.storyboard하고 오류를 처리했습니다.

여기에 이미지 설명 입력


4

이것은 현재 구성을 추가 / 이름 변경 한 후 나에게 발생했으며 의미가 있습니다.

모든 구성은 cocoapods에서 생성 한 구성 집합을 사용하므로 이러한 항목이 일치해야합니다.

따라서 구성을 추가 / 이름 변경하는 경우 올바른 구성 세트를 사용해야하며 실행 pod install을 위해이를 수행합니다.


3

누군가를 돕는다면.

제 경우에는 obj-c 파일에 참조 폴더 (xcode의 파란색 폴더)가 추가되었고 헤더가 파일을 찾을 수 없습니다. 파인더에서 폴더가 아닌 파일을 xcode에 추가하고 해결했습니다.


2

나는 같은 문제가 있었다. 나에게 그 이유는 내 앱과 Today Extension 모두에 동일한 브리징 헤더를 사용했기 때문입니다. 내 Today Extension에는 Parse가 포함되어 있지 않지만 브리징 헤더에 정의되어 있기 때문에 찾으려고했습니다. Today Extension에 대한 새 브리징 헤더를 만들었 더니 오류가 사라졌습니다.


내가 가진 것과 같은 문제처럼 들리지 않습니다. 오늘 연장이 없습니다. 제 경우에는 앱에 브리징 헤더를 사용하고 있으며 Parse 프레임 워크는 앱 종속성에 포함되어 있습니다. 이 오류는 Parse뿐만 아니라 다른 프레임 워크에서도 발생합니다.
Dia Kharrat 2015 년

2

내 프레임 워크는 이전에 작동 중이었고 갑자기 작동이 중단되었으며 이러한 답변 중 어느 것도 나를 위해 작동하지 않았습니다. Build Phases> Link Binary With Libraries에서 프레임 워크를 제거하고 다시 추가했습니다. 다시 일하기 시작했습니다.


2

문제가 발생하여 2 시간 동안 문제를 해결했습니다. 내 환경은 다음과 같습니다.

코코아 포드 0.39.0

신속한 2.x

XCode 7.3.1

단계 :

  1. 프로젝트 경로 : project_name / project_name / your_bridging_header.h
  2. Build Setting의 Swift 섹션에서 Objective-C Bridging Header는 project_name / your_bridging_header.h 여야합니다.
  3. 에서 your_bridging_header.h 에서 모든 선언을 변경 .H# import를
  4. your_3rd_party 사용되는 클래스에서 . your_3rd_party 가져 오기 선언

귀하의 대답은 정확합니다. 세 번째 점에서 @jamesthakid 대답을 추가하여 더 명확하게 만드십시오. 감사합니다.
NaXir

5
"모든 선언을 .h에서 #import로 변경"이란 정확히 무엇을 의미합니까?
Chris Gunawardena

1

방금 기존 구성표를 복제하고 프로젝트에 다른 구성을 추가했습니다. 동일한 DerivedData/($AppName)/Build/Products/($CONFIGURATION_NAME)폴더에 빌드하려면 프레임 워크의 프로젝트에 동일한 이름의 구성을 추가해야했습니다 . 그렇지 않으면 .framework 파일이 생성되지 않으므로 가져올 수 없습니다.


1

오늘 Swift 프로젝트에서 Objective-C로 작성된 포드를 사용하려고 할 때 동일한 문제가 발생했지만 위의 솔루션 중 어느 것도 작동하지 않는 것 같습니다.

내가 use_frameworks!쓴 podfile에서 . 이 줄에 주석을 달고 pod install다시 실행 하면이 문제가 해결되고 오류가 사라졌습니다.


1

(2017 년 5 월 27 일 업데이트)

Xcode 8. Swift 프로젝트-Objective C 가져 오기.

알아야 할 사항 :

  1. 브리징 헤더 파일은 반드시 프로젝트 폴더에 저장되어야합니다. (즉, .xcodeproj가 저장된 것과 동일한 수준으로 저장되지 않고 대신 모든 신속하고 객관적인 c 파일이 저장되는 폴더로 한 수준 더 아래로 저장됩니다). 여전히 최상위 수준에서 파일을 찾을 수 있지만 올바르게 연결되지 않고 Objective C 파일을 브리징 헤더 파일로 가져올 수 있습니다.
  2. 브리징 헤더 파일은 .h 헤더 파일이면 무엇이든 이름을 지정할 수 있습니다.
  3. Build Settings> Swift Compiler-General> Objective C Bridging Header의 경로가 만든 브리징 헤더 파일을 올바르게 가리키는 지 확인하십시오.
  4. 중요 : 여전히 "찾을 수 없음"이 표시되는 경우 먼저 브리징 헤더 파일을 비우고 현재 작성한 가져 오기 파일을 지우십시오. 브리징 헤더 파일을 먼저 찾을 수 있는지 확인한 다음 해당 파일에 목표 c 가져 오기를 추가하기 시작합니다. 어떤 이유로 든 발견 된 경우에도 동일한 "찾을 수 없음"오류가 발생하지만 어떤 이유로 시도하는 가져 오기가 마음에 들지 않습니다.
  5. 목표 C 파일에서 "MyBridgingHeaderFile.h"를 #import해서는 안됩니다. 또한 "파일을 찾을 수 없음"오류가 발생합니다.

1
이 모든 점을 확인했지만 여전히 동일한 문제가 있습니다. (추가 점을 고려해야합니까?
Amjad Husseini dec

@AmjadHusseini는 프로젝트 파일을 정리 한 다음 프로젝트의 파생 데이터를 지우고 xCode를 다시 시작합니다. 그게 저와 함께 일
모하마드 마사 알람을

0

나는 비슷한 문제가 있었고 단 하나의 해결책만이 나를 위해 해결되었습니다. 나는 모든 제안을 시도했고 다른 lib가 작동했기 때문에 브리징 헤더를 잘 설정했다는 것을 알았습니다.

Cocoapods없이 라이브러리를 프로젝트에 복사 (드래그 앤 드롭) 할 때 오류없이 헤더를 가져올 수있었습니다.

나는 facebook / Shimmer 라이브러리를 사용했습니다.


0

포드와 비슷한 문제가있었습니다. 기본적으로 UI 테스트를 실행하려고 시도하면서 Xcode는 포드 누락에 대해 불평했습니다. 이에 대한 해결책은 위에서 설명한 것보다 훨씬 간단했습니다.

  1. 프로젝트 파일로 이동 (기본 대상이 아님)
  2. "정보"탭 (가장 왼쪽)을 클릭합니다.
  3. UI 테스트 대상에 대한 적절한 포드 구성 설정 ( "배포 대상"바로 아래의 "구성"섹션)

일!

스레드에서 찾았습니다 : https://github.com/CocoaPods/CocoaPods/issues/2695

코코아 포드의 버그처럼 들리지만 왜 까다로운 경우인지 알 수 있습니다.



0

프로젝트 정리, 빌드 폴더 정리, Xcode 다시 시작. 프로젝트 이동> 빌드 설정> 키워드 검색에서 경로를 제거합니다. Swift Compiler-General-> Objective-C Bridging 헤더가 저에게 효과적이었습니다.


0

2019 년 8 월

필자의 경우 동일한 타겟에서 오는 Objective-C 헤더 파일에서 Swift 프로토콜을 사용하고 싶었고이를 위해 Objective-C 인터페이스에서 참조하기 위해 Swift 프로토콜 의 포워드 선언 을 사용해야했습니다 . Objective-C 헤더 파일에서 Swift 클래스를 사용하는 경우에도 동일해야합니다. 포워드 선언을 사용하려면 포워드 선언을 사용 하여 Objective-C 헤더에 스위프트 클래스 포함문서 에서 다음 예제를 참조하십시오 .

// MyObjcClass.h
@class MySwiftClass; // class forward declaration
@protocol MySwiftProtocol; // protocol forward declaration

@interface MyObjcClass : NSObject
- (MySwiftClass *)returnSwiftClassInstance;
- (id <MySwiftProtocol>)returnInstanceAdoptingSwiftProtocol;
// ...
@end
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.