Swift Bridging Header 가져 오기 문제


123

지침에 따라 브리징 헤더를 만들고 프로젝트에 추가했습니다. 안타깝게도 다음 오류가 발생했습니다.

: 0 : 오류 : Objective-C 헤더 '--- path--to --- header / .... h'를 가져올 수 없습니다.

스크린 샷 1

빌드 설정에서 브리징 헤더 위치에 헤더 검색 경로 문자열을 추가했지만 도움이되지 않았습니다.

이 문제를 경험 한 사람이 있습니까?


헤더 파일을 직접 추가하는 것보다 할 수 있습니다. 새 파일 ..을 사용하여 비어있는 새 Objective-c .m 파일을 추가합니다. 그러면 xcode가 가져 오기를 추가 할 수있는 헤더 브리지 파일을 제공합니다. 그런 다음 방금 추가하는 .m 파일을 삭제할 수 있습니다
markhunte

그래,
나도

이것은 새로운 프로젝트에 있습니까 아니면 당신이 손으로 한 것과 같은 것입니까?
markhunte 2014-06-10

그것은 새로운 프로젝트에 있습니다. 저는 한때 OBJC에 썼던 키 체인 지원 래퍼를 찬양했습니다
Nikita Pronchik 14

죄송합니다. 추가 된 키 체인 지원 래퍼가 의미하는 바를 잘 모르겠습니다. 하지만 내가 사용하고 무엇을하는 당신은 OSX 프로젝트와 같은 일을합니까 아이폰 OS에있는 알
markhunte

답변:


153

오류가있는 폴더에 파일을 추가하도록주의하십시오! Xcode에서 파일을 만들면 프로젝트-> 프로젝트-> Header.h 폴더로 이동합니다.

Xcode는 Project-> Header.h를 찾고 있습니다.

즉, 프로젝트 폴더 (ProjectName-> ProjectNameFolder)에 파일을 넣어야합니다!

희망;)

업데이트 됨 : 무슨 뜻인지 잘 모르겠지만 문제를 해결하려면 다음을 시도하십시오.
1. 지금까지 생성 한 모든 브리징 파일을 삭제합니다.
2. 프로젝트의 메인 폴더를 선택하고 새 파일-> iOS-> 헤더 파일을 누르십시오.
3. 생성 된 헤더 파일에 가져 오기를 작성합니다.
4. Xcode-> Build Settings에서 프로젝트를 선택하고 검색 필드에 브리징을 입력하고 SWIFT_OBJC_BRIDGING_HEADER 키에 헤더 파일 이름 또는 경로를 입력하십시오!

이 단계를 따르면 헤더 파일이 올바른 위치에 생성됩니다!

: D 도움이 되길 바랍니다!


글쎄, 방금이 방법을 시도했지만 헤더는 실제로 볼 수 있지만 불행히도 Obj-C 클래스를 브리징하는 것은 여전히 ​​보이지 않습니다 (브리징 헤더에 포함시킨 후에도)
Nikita Pronchik 2014-06-25

11
처음에 대답은 "파일을 xcodeproj의 동일한 수준에 배치해야합니다"라고 말하고 마지막에는 "파일이 xcodeproj의 동일한 수준에 있지 않은지 확인"이라고 말합니다. 왜?
Boon

3
나는 파일이 xcodeproj와 같은 수준이 아니라 프로젝트의 하위 폴더 안에 있어야 함을 의미했습니다. 예 : 프로젝트 폴더에 project, project.xcodeproj 및 projecttests가 있습니다. 이 파일은 : 프로젝트 폴더 안에 있어야
르낭 Kosicki

5
나는 모든 것을 시도했지만 nothnig는 나를 위해 작동합니다. 이것은 매우 자극적입니다. 나는 3. 당신이 날 도와 줄 수 Xcode를 8 신속 함께 일하고
Hardik 샤

1
"즉, xcodeproj의 동일한 수준에 파일을 배치해야합니다!"라고 말하는 것이 혼란 스럽습니다. 그러나 "파일이 xcodeproj의 동일한 수준이 아닌 프로젝트의 기본 폴더 내에 있는지 확인하십시오!"라고 말한 후 어떤거야?
bakalolo

68

제 경우에는 실제로 순환 참조의 결과로 발생한 오류였습니다. 브리징 헤더에 클래스를 가져 왔고 해당 클래스의 헤더 파일이 신속한 헤더 ( <MODULE_NAME>-Swift.h)를 가져 왔습니다 . Obj-C 헤더 파일에서 Swift에서 선언 된 클래스를 사용해야했기 때문에이 작업을 수행했습니다. 해결책은 단순히 @class선언적을 사용하는 것 입니다.

따라서 기본적으로 "브리징 헤더를 가져 <MODULE_NAME>-Swift.h오지 못했습니다"라는 오류가 발생했습니다. 위의 오류는 파일을 찾을 수 없다는 오류였으며, 그 위에는 특정 Obj-C 헤더 파일 (즉, View Controller)을 가리키는 오류였습니다.

이 파일을 살펴보면 헤더 안에 -Swift.h가 선언되어 있음을 알았습니다. 이 가져 오기를 구현으로 이동하면 문제가 해결되었습니다. 그래서 저는 객체를 사용해야 MyObject했고, Swift에서 정의 된 객체를 호출 해 보겠습니다. 그래서 간단히 헤더를 다음과 같이 변경했습니다.

@class MyObject;

1
이것은 어리석은 일이지만 구현 파일로 옮기는 것도 나에게 효과적이었습니다. 불행히도 내 클래스가 신속한 파일에 정의 된 대리자를 구현하기 때문에 헤더에 필요했습니다. 그러나 obj-c는 내가 전달할 때 내 클래스가 실제로 델리게이트를 구현하는지 신경 쓰지 않기 때문에 이것으로 해결할 것입니다. 그러나 이상적으로 또 다른 방법이있을 것
오렌

브리징 헤더로 가져 오는 가져 오기를 확인해야 할 수도 있습니다. 가져온 클래스 중 "-Swift.h"파일에 대한 참조가있는 경우 선언을 .m으로 이동해야합니다.
Kyle Carruthers

30

다음에서 경로를 찾으십시오.

빌드 설정 / Swift 컴파일러 - 코드 생성 / Objective-C 브리징 헤더

해당 파일을 삭제하십시오. 그럼 당신은 괜찮을 것입니다.


2
네가 이겼다. 나는 이것에 너무 많은 시간을 낭비했다. 간단하고 효과적입니다. Xcode는이 경로를 뒤에서 $ (SRCROOT)에 추가하는 것과 같이 잘못된 작업을 수행합니다. 내 길에 공간이있는 것이 문제의 일부일 수 있다고 생각하지만 이것은 은색 총알이었습니다.
jday

1
그 파일을 어떻게 삭제합니까?
Jacky Wang

7
Xcode 8에서는 "Code Generation"대신 Swift Compiler-General에 있습니다.
Vivek Bansal

나 저장 감사를 ... 고마워요
비제이 Rathod

18

이것은 아마도 소수의 사람들에게만 영향을 미칠 것입니다.하지만 제 경우에는 제 프로젝트가 CocoaPods를 사용하고 있었고 그 포드 중 하나에는 자체 CocoaPod가있는 하위 사양이있었습니다. 해결책은 전체 각도 가져 오기를 사용하여 하위 포드의 파일을 참조하는 것이 었습니다.

#import <HexColors/HexColor.h>

보다는

#import "HexColor.h"

2
차이점이 뭐야?
Daniel Gomez Rico

이것이 저에게 문제였습니다. "브리징 헤더를 가져 오지 못했습니다"와 "XYZ.h를 찾을 수 없습니다"오류가 발생했습니다. 이 변경으로 Xcode 6.4 및 Swift 1.2에서 해결되었습니다.
Entalpi

1
@danielgomezrico 한 문장은 하위 디렉토리의 파일을 가리 킵니다. 다른 하나는 존재하지 않는 파일을 가리 킵니다.
Casey Murray

CocoaPods를 사용할 때이 오류에 대한 해결책은 단순히 새 구성을 만든 후 포드 설치를 다시 실행하는 것입니다.
타자기

16

파생 데이터를 삭제하면 문제가 해결되었습니다. 이전 커밋에서 체크 아웃해도 동일한 문제가 발생합니다.

해당 옵션 양식 Window-> Projects에 도달 할 수 있습니다.


9

저에게는 타겟의 빌드 설정에 추가하는 것을 잊었 기 때문입니다.

여기에 이미지 설명 입력


프로젝트의 빌드 설정에만 추가 한 경우 도움이 될 수 있습니다.
zekel

9

" 브리징 헤더에 나열 할 헤더 파일 을 찾을 위치를 Xcode 에 알려야 합니다 . 검색 경로 섹션을 찾고 사용자 헤더 검색 경로에 대한 프로젝트 수준 설정을 변경 하여 '포드'에 대한 재귀 항목을 추가합니다. 디렉토리 : Pods / ** " http://swiftalicio.us/2014/11/using-cocoapods-from-swift/


6

나는 또한이 문제를 경험했으며 슬프게도 SDK + Xcode의 버그 일뿐입니다. 저는 WWDC의 엔지니어와이 문제와 CloudKit에서 겪었던 몇 가지 다른 문제에 대해 이야기했습니다. 이러한 버그는 Xcode의 다음 시드에서 해결 될 것입니다.

베타 소프트웨어 사용에 대한 재미있는 부분입니다.


1
네, 답답 해요. 우리 팀과 저는 CloudKit에서 NSURL 문제를 알아 내려고 노력하고 있었는데 오류가 발생하는 이유를 파악할 수 없었습니다. Apple의 서버 측 문제로 밝혀졌습니다. 우리는 아무것도 할 수 없었습니다. 너무 많은 시간을 낭비했습니다. ㅋ.
douglas bumby 2014-06-10

5
헤더를 올바른 위치에 배치하면 문제를 실제로 해결할 수 있습니다. 나를 위해 일한 것은 헤더 Project-Bridging-Header.h를 호출하고 내 프로젝트 폴더 트리의 루트에 배치하는 것입니다 (내 기본 Xcode 프로젝트 파일의 형제). @ 르낭 - kosicki 대답을 참조하십시오
JB

1
Xcode 업데이트에서 수정되었으며 초기 베타 문제로 인해 발생했습니다.
bumby 더글러스

3

Objective-c 프로젝트에 신속한 클래스를 추가하는 데 어려움이있는 다른 사람들을 위해. 이것이 나를 위해 일하는 것입니다.

  1. 새로운 신속한 파일을 만듭니다. 이렇게하면 xcode가 brigde-header.h를 포함하여 mix swift-objective-c 프로젝트에 대한 모든 설정을 생성 할 것인지 묻는 메시지가 표시됩니다. 예를 누르십시오.
  2. 이제 프로젝트에서 사용하려는 기존 신속한 파일을 추가하십시오.
  3. 구현 파일에서 swift 클래스 add : #import "YOURPROJECTNAME-swift.h"를 사용할 것입니다. 이 파일 xcode는 당신을 위해 만듭니다. xcode 프로젝트가 myProject이면 "myProject-swift.h"

그리고 그게 다야. 이제 Objective-c처럼 코드에 신속한 클래스를 만듭니다.


3

적절한 방식이 아닌 cocoapods의 bridgin 헤더 파일에서 일부 파일을 가져 왔습니다.

가져 오는 대신

#import <SomeCocoaPod/SomeCocoaPod.h>

나는 썼다

#import "SomeCocoaPod.h"

그리고 이것은 내 큰 실수였습니다.


2

프로젝트에 임시 Objective-C 파일을 추가합니다. 원하는 이름을 지정할 수 있습니다.

예를 선택하여 Objective-C 브리징 헤더를 구성합니다.

방금 생성 한 임시 Objective-C 파일을 삭제합니다.

방금 만든 projectName-Bridging-Header.h 파일에 다음 줄을 추가합니다.

'#import <GoogleMaps / GoogleMaps.h>'

AppDelegate.swift 파일을 편집합니다.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    GMSServices.provideAPIKey("AIza....") //iOS API key

    return true
}

전체 샘플을 보려면 링크따르십시오.


2

나를 위해 프레임 워크를 추가하는 동안 대상 경로에서 '필요한 경우 항목 복사'를 선택하지 않았습니다. 이 옵션을 선택한 상태에서 프레임 워크를 다시 추가하기 만하면됩니다.


1

처음 며칠간의 노력 끝에 마침내 Facebook 가입을 iOS 앱에 성공적으로 통합 할 수있었습니다. 단계는 다음과 같습니다 (컴퓨터에 Facebook SDK v4.1 이상을 이미 설치했다고 가정합니다).

  1. 프로젝트 아래에 Facebook 프레임 워크 (FBSDKCoreKit, FBSDKLoginKit)를 추가합니다.
  2. FB SDK v4.1 이상에서는 더 이상 브리징 헤더 파일이 필요하지 않으므로 빌드 설정을 변경하지 마십시오.
  3. ViewController.swift, AppDelegate.swift 파일에서 FBSDKCorekit, FBSDKLoginKit 가져 오기
  4. 여기에 언급 된대로 pList에 정보를 추가합니다.

  5. 앱을 빌드하십시오. 그리고 우! 컴파일 시간 오류가 없습니다.


2
링크 된 페이지의 세부 정보를 포함하면이 답변이 더 좋습니다. 링크 된 페이지가 변경되거나 링크가 작동하지 않으면이 답변을 읽는 사람들은 4 단계를 발견했을 때 어떻게해야할지 알 수 없습니다.
TNT

1

다른 이유로 동일한 문제가 있습니다. 여기에 제 경우가 있습니다. 슬라이드 메뉴를 포함해야하는 프로젝트를 빌드하고 SWRevealViewController lib를 사용하여 접근하고 있습니다.

라이브러리 파일을 가져올 때 .h && .m 파일에 대한 지원 파일 아래에 하위 폴더 (SWRevealViewController)를 추가하면 두 개의 오류가 발생하고 브리지를 가져올 수 없으며 SWRevealViewController.h를 찾을 수 없습니다.

해결 방법

파일을 지원 파일로 직접 이동하면 (하위 폴더 삭제) SWRevealViewController.m이 빌드 단계-> 소스 컴파일에 자동으로 추가되고 문제가 사라집니다.

여기에 이미지 설명 입력


1

내 앱에 Today Extension을 추가 할 때 그런 종류의 오류가 발생했습니다. 확장의 빌드 대상은 내 앱의 빌드 대상과 동일한 이름의 브리징 헤더로 생성되었습니다. 확장 프로그램이 내 앱의 브리징 헤더에 나열된 파일을 볼 수 없기 때문에 이로 인해 오류가 발생했습니다.

필요한 유일한 것은 확장에 대한 브리징 헤더의 이름을 삭제하거나 변경하는 것이며 모두 괜찮습니다.

이것이 도움이되기를 바랍니다.


0

실제로 프로젝트 아래에 빈 OSX Source Objective C 파일을 만들었습니다 (모든 신속한 파일이있는 곳).

가져 오기를 추가 한 다음 .m 파일 을 삭제했습니다 .


0

다른 수정 사항 중에서 Product-> Archive를 시도 할 때 오류가 발생했습니다. 나는 이것을 가지고있는 것으로 밝혀졌다.

Objective-C Bridging Header
  Debug (had the value)
  Release (had the value)
    Any architecture | Any SDK (this was blank - problem here!)

마지막 줄에 설정 한 후 작동했습니다.


0

위의 어떤 해결책으로도 해결할 수없는 유사한 문제가있었습니다. 내 프로젝트는 CocoaPods를 사용합니다. 오류와 함께 다음 메시지와 함께 경고를 받았습니다.

Uncategorized: Target 'Pods' of project 'Pods' was rejected as an implicit dependency for 'Pods.framework' because its architectures 'arm64' didn't contain all required architectures 'armv7 arm64'

여기에 이미지 설명 입력

그래서 해결책은 아주 간단했습니다. 포드 프로젝트의 경우 Build Active Architecture Only 플래그를 아니요로 변경 하면 원래 오류가 사라졌습니다.


0

Precompile Bridging HeaderNo로 설정 하여 문제를 해결하십시오.


왜 반대 투표입니까? 어떤 사람들에게는 합법적 인 해결책입니다. 대규모 프로젝트에서이 기능을 켜고 끄는 반복 빌드를 벤치마킹했으며 전혀 차이가없는 것을 확인했지만 (Apple은 최대 30 %의 속도 향상을 보았습니다) 빌드 파일을 지우고 처음부터 빌드하는 데 걸리는 시간은 상당합니다
알렉산드르 G
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.