Xcode MyProjectName-Bridging-Header.h가 존재하지 않습니다.


118

Objective-C 프로젝트에서 Swift 사용을 시작하고 싶습니다. 그래서 빠른 수업을 추가했습니다.

import Foundation
@objc class System : NSObject {
    @objc func printSome() {
        println("Print line System");
    }
}

그리고 그것을 .m 파일로 가져 왔습니다.

#import "MyProjectName-Swift.h"

내 프로젝트를 빌드 할 때 다음 오류가 발생합니다.

Bridging header 'PathToMyProject/MyProjectName-Bridging-Header.h' does not exist

참고 : "Build Settings-> Swift Compiler-Code Generation-> Objective-C Briding Header"에서 MyProjectName-Bridging-Header.h로 설정됩니다.

이 문제를 해결하려면 어떻게해야합니까?

어떤 도움이라도 대단히 감사합니다.

편집 : 브리징 헤더 파일 : #if defined (__ has_include) && __has_include () # include #endif

#include <objc/NSObject.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if defined(__has_include) && __has_include(<uchar.h>)
# include <uchar.h>
#elif __cplusplus < 201103L
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
#endif
#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif

#if defined(__has_attribute) && __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) 
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if defined(__has_attribute) && __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"

#if defined(__has_feature) && __has_feature(modules)
#endif

#pragma clang diagnostic pop

2
MyProjectName-Swift.hMyProjectName-Bridging-Header.h반대 방향으로 작동합니다. MyProjectName-Swift.h자동으로 제공됩니다. MyProjectName-Bridging-Header.h그러나 반자동으로 제공됩니다. 즉, 거기에 있는지 확인해야합니다. 그렇다면 MyProjectName-Bridging-Header.h프로젝트 탐색기에서 볼 수 있다고 확신 하십니까? 그렇지 않은 경우 해당 이름의 파일을 만들어 프로젝트에 추가합니다. 그런 다음 빌드 설정에서 경로가 올바른지 다시 확인하십시오 (프로젝트 디렉토리를 포함해야합니다 : MyProjectName/MyProjectName-Bridging-Header.h.
milos

제품 모듈 이름이 비어 있지 않은지 확인 했습니까? (빌드 설정-> 패키징-> 제품 모듈 이름)
Nina

Nina, 네, 내 모듈 이름은 "MyProjectName"이고 뭔가
잘못되었습니다

milos, Xcode가이 브리딩 파일을 자동으로 생성한다고 생각했습니다. 내 프로젝트에 해당 파일이 없습니다.
user2408952 2014 년

1
Bridging-Header.h를 수동으로 지정 했습니까? 알겠습니다. 'Briding'맞춤법 오류가 있습니다
Nina

답변:


191

브리징 파일이 다른 클래스와 동일한 수준에서 생성 된 경우이 그림에서 볼 수 있듯이 상대 경로를 추가해야 할 수 있습니다. 브리징 파일은 다른 클래스와 동일한 수준에서 생성됩니다. 여기에 이미지 설명 입력

빌드 설정에 이름을 올바르게 입력했습니다. 여기에 이미지 설명 입력

그러나 컴파일러는 파일을 찾지 못합니다. 여기에 이미지 설명 입력

따라서 프로젝트 루트에서 상대 경로를 추가하면 (즉,을 추가합니다 ./ProjectName/BridgerFileName.h), 여기에 이미지 설명 입력

이제 컴파일되고 Objective C 클래스에서 메서드를 호출 할 수 있습니다. 여기에 이미지 설명 입력


4
나를 위해 그것은 전혀 고치지 않습니다. XCode가 업데이트 된 Objective-C Bridging Header 필드에 반응하지 않는 것 같습니다.
Darius Miliauskas

내가 찾기를 갈망했지만 마침내. 감사합니다. 오류를 수정했습니다. :)
Anders Sørensen 2011

잘 입증되었습니다! 그리고 예, 프로젝트 빌드 설정과 대상 빌드 설정 모두에서이 작업을 수행하는 것을 잊지 마십시오.
Akash Bhardwaj

72

브리징 헤더 파일을 수동으로 만들고 기본 이름과 위치를 선택하면 브리징 헤더가 루트 디렉터리 아래에있는 프로젝트 디렉터리에 배치된다는 것을 알았습니다.

이를 위해서는 다음 설정 값이 필요합니다. Targets> [Your App Target]> Build Settings> Swift Compiler-Code Generation> Objective-C Bridging Header :

$(SRCROOT)/$(PROJECT_NAME)/$(PROJECT_NAME)-Bridging-Header.h 

프로젝트가 신속한 모듈 (프레임 워크) 인 경우 주석에서 지적한대로 다음을 선호 할 수 있습니다.

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h

2
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h더 일반적 일 것입니다 :)
gaussblurinc 2015

1
이것이 유일한 대답이어야합니다!
Luca Davanzo 15.11.02

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h내 프로젝트 폴더까지 올바른 경로를 얻고 있지만 /$(PROJECT_NAME)원하는 경로로 이동하지 않습니다.
iPeter

동일한 문제가있을 수있는 다른 사용자를위한 참고 사항-@gaussblurinc 주석을 복사 / 붙여 넣기 할 때 문자열의 'Header'부분에 이상한 문자가 복사되었습니다. 답변에서 동일한 문자열을 복사 / 붙여 넣기 한 후 제대로 작동했습니다.
Adam Johns

46

브리징 헤더를 제거하는 사람들을 위해

나는 여기에있는 다른 대부분의 답변과 반대 방향으로 가고있었습니다. 이전에 Bridging Header를 사용했지만 더 이상 필요하지 않았습니다. 내 프로젝트에서 삭제 한 후 질문에 언급 된 오류가 발생하기 시작했습니다. 문제를 해결하기 위해 다음 단계를 수행했습니다.

  1. 이동 > 스위프트 컴파일러 대상> [귀하의 앱 대상]> 빌드 설정 - 일반> 목표 - C 브리징 헤더 및 경로를 삭제합니다. ( 아이디어에 대해 @Donamite 에게 감사드립니다 .) (검색 창에 "브리징"을 입력하여 찾을 수 있습니다.)
  2. 파생 날짜를 삭제하십시오. Xcode> 환경 설정> 위치로 이동 하고 파생 데이터 폴더 옆에있는 회색 화살표를 클릭하십시오. 그런 다음 프로젝트 폴더를 삭제하십시오.

여기에 이미지 설명 입력


22

에서 스위프트 4.1

프로젝트에는 bridging-Header.h파일이 없지만 프로젝트에는 해당 경로가 있습니다. 이를 위해 해당 경로를 삭제해야합니다 ...

targets파일로 이동하여 Build Settings, ---->를 선택 Swift Compiler - General하고 bridging-Header.h. 아래 스크린 샷을 따르십시오 ....여기에 이미지 설명 입력

bridging-Header.hSwift Compiler 에서 파일 삭제 -일반

여기에 이미지 설명 입력

이제 이렇게 ...

여기에 이미지 설명 입력


14

Swift 프로젝트에 Bridge File을 추가하려면.

1 단계. File> Add Cocoa with Objective-C File (임시 용)로 이동합니다.

여기에 이미지 설명 입력

2 단계. 다음 팝업이 나타납니다.여기에 이미지 설명 입력

이제 브리징 헤더 생성 버튼을 누릅니다.

DONE
당신이 brigde입니다 파일에 번들 얻을 것이다
감사를


13

브리징 헤더를 만드는 단계입니다.

  1. File-> New-> iOS-> Header File , 브리징 파일 이름을 "yourProjectName-Bridging-Header.h"와 같이 지정합니다.

  2. Build-Settings-> Objective-C Bridging Header , 브리징 헤더 파일 이름을 "ProjectName-Bridging-Header.h"와 같이 지정하십시오.

    참고 : 브리징 헤더 파일은 ".xcodeproj"파일이있는 프로젝트의 기본 루트 폴더에 있어야합니다. 그렇지 않은 경우 Bridging 헤더 파일을 프로젝트의 루트 폴더로 이동하십시오. 이런 식으로 Xcode는 브리지 파일에 액세스 할 수 있습니다.

  3. 프로젝트를 빌드하고 Bridging 헤더에 필요한 파일을 가져옵니다.


12

저에게는 브리징 헤더 파일 경로 앞에 $ (SRCROOT) / $ (PROJECT_NAME) /을 사용하는 것이 도움이되었습니다.


1
이것은 유효한 대답입니다. 표시되지 않아야합니다. $ (SRCROOT) 및 $ (PROJECT_NAME)을 가이드로 사용하여 정답에 도달 할 수 있지만 모든 솔루션을 복사하여 붙여 넣을 수는 없습니다.
Hobbes the Tige 2015-10-12

이 답변에 제시된 솔루션은 실제로 내 문제를 해결했습니다. 감사합니다. Srinivas Padidala
Wilson

그것을 위해 가십시오. ..... $ (PROJECT_NAME) 대신 프로젝트 이름을 추가하지 마십시오
ioSana

6

저에게는 $(SRCROOT)Objective-C 브리징 헤더 경로 앞에서 사용하는 것이 도움이되었습니다 .

$(SRCROOT)/swiftLibraries/swiftLibraries-Bridging-Header.h

5

아래 단계를 따르십시오.

  1. 브리징 헤더 파일을 삭제합니다. . . (수동으로 만들 수도 있음) 및;
  2. Objective-C Project에서 새 Swift 파일을 만듭니다. . . (가져 오기가 아니라 먼저 생성)

아마도이 두 가지가 문제 해결에 도움이 될 것입니다.


5

다음은 나를 위해 일했습니다.

  1. 브리징 헤더 파일은 ".xcodeproj"파일이있는 프로젝트의 기본 루트 폴더에 있어야합니다. 프로젝트 디렉토리로 이동하고 브리징 헤더가 다른 폴더 안에있는 경우 루트로 끌어다 놓습니다.
  2. 헤더 이름의 맞춤법 오류를 수정합니다.
  3. 파생 데이터 지우기
  4. 대상-> 빌드 설정-> 스위프트 컴파일러 : 일반-> Obj C 헤더 이름 추가.
  5. 청소하고 다시 실행하십시오.

2

수동으로 브리징 헤더 파일 생성

먼저 Xcode가 생성 된 Bridging 헤더 파일을 삭제합니다. 그리고 프로젝트 이동> 빌드 설정> 키워드 검색을 선택하십시오. 스위프트 컴파일러-코드 생성. Objective-C Bridging Header를 클릭하고 해당 경로를 삭제합니다. 이제 프로젝트를 청소하십시오.

이제 프로젝트> 탐색 모음에서 창을 선택합니다. 프로젝트를 선택하고 거기에서 파생 데이터를 삭제하십시오.

이제 새 파일을 만들고 소스 를 선택한 다음 헤더 파일 을 선택하고 브리징 헤더 파일을 만듭니다. 파일 이름은 projectname-Bridging-Header.h 여야 합니다.

프로젝트 이동> 빌드 설정> 키워드 검색을 선택하십시오. 스위프트 컴파일러-코드 생성. Objective-C 브리징 헤더를 클릭하고 이제 projectname-Bridging-Header.h 와 같은이 Objective-C 브리징 헤더에 경로를 추가합니다.

이제 클래스를 브리징 헤더 파일로 가져오고 코드를 쉽게 컴파일 할 수 있습니다.

파일을 수동으로 생성 할 때 브리징 헤더 파일은 다음과 같습니다.


0

저에게 도움이 된 것은 파일을 오류 메시지에 언급 된 경로로 수동으로 이동하는 것이 었습니다. 그래서:

  1. 파일을 삭제했습니다 (휴지통으로 이동).
  2. 오류 메시지에서 휴지통에서 경로로 이동했습니다.
  3. 나중에 프로젝트도 청소해야했습니다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.