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

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



답변

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

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

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

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

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


답변

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

이를 위해서는 다음 설정 값이 필요합니다. 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


답변

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

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

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

여기에 이미지 설명 입력


답변

에서 스위프트 4.1

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

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

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

여기에 이미지 설명 입력

이제 이렇게 …

여기에 이미지 설명 입력


답변

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

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

여기에 이미지 설명 입력

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

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

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


답변

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

  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 헤더에 필요한 파일을 가져옵니다.


답변

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