programing

Swift Bridging 헤더 가져오기 문제

bestprogram 2023. 8. 20. 12:18

Swift Bridging 헤더 가져오기 문제

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

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

Screenshot 1

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

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

오류가 발생한 폴더에 파일을 추가해야 합니다!저도 같은 실수를 했습니다, Xcode에서 파일을 만들면 다음 폴더로 이동합니다: Project->Project->Header.h

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

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

업데이트됨: 무슨 말인지 잘 모르겠지만 문제를 해결하려면 다음을 시도해 보십시오.

  1. 지금까지 만든 모든 브리징 파일을 삭제합니다.
  2. 프로젝트의 메인폴더를 선택하고 새 파일->iOS->헤더 파일을 누릅니다.
  3. 작성된 헤더 파일에 가져오기를 기록합니다.
  4. Xcode->Build Settings에서 프로젝트를 선택하고 검색 필드에 bridging을 입력한 다음 SWIFT_OBC_BRIDGE_HEADER 키를 입력합니다. 헤더 파일의 이름 또는 헤더 파일의 경로!

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

저의 경우, 이것은 실제로 순환 참조의 결과로 인한 오류였습니다.브리징 헤더에 클래스를 가져왔는데, 해당 클래스의 헤더 파일이 swift 헤더를 가져오는 중이었습니다.<MODULE_NAME>-Swift.h 한 는 제가 )을하는 것이었기 때문입니다. 솔루션은 단순히 다음을 사용하는 것이었습니다.@class

는 " header를 가져오지 되어 있고, 는 " to bridging header"라고 되어 .라고 말했고, 위의 오류는 다음과 같이 말했습니다.<MODULE_NAME>-Swift.h특정 Obj-C 헤더 파일(ViewController)을 가리키는 오류가 발생했습니다.

이 파일을 검사해보니 헤더 안에 -Swift.h가 선언되어 있었습니다.이 가져오기를 구현으로 이동하여 문제가 해결되었습니다.그래서 나는 물체를 사용해야 했다, 그것을 부르자.MyObject스위프트에 정의되어 있어서, 나는 단순히 머리글을 바꾸어서 말했다.

@class MyObject;

경로 찾기 위치:

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

파일을 삭제합니다.그럼 당신은 괜찮을 겁니다.

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

#import <HexColors/HexColor.h>

보다는

#import "HexColor.h"

수정된 파생 데이터를 삭제한 경우 이전 커밋에서 체크아웃해도 동일한 문제가 발생한다는 것을 알게 되었습니다.

창 -> 프로젝트에서 해당 옵션을 사용할 수 있습니다.

"우리는 Xcode에 브리징 헤더에서 나열하는 헤더 파일을 어디서 찾아야 하는지 알려주어야 합니다.Search Paths 섹션을 찾아 User Header Search Paths에 대한 프로젝트 수준 설정을 변경하고 'Pods' 디렉토리에 대한 재귀 항목을 추가합니다. http://swiftalicio.us/2014/11/using-cocoapods-from-swift/

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

enter image description here

저도 이 문제를 겪었는데 안타깝게도 SDK + Xcode의 버그일 뿐입니다.저는 WWDC의 엔지니어와 이 문제와 CloudKit와 관련하여 몇 가지 다른 문제에 대해 이야기했습니다.이러한 버그는 Xcode의 다음 시드에서 해결될 것입니다.

베타 소프트웨어를 사용하는 재미있는 부분입니다.

목표-c 프로젝트에 신속한 클래스를 추가하는 데 문제가 있는 다른 사람들을 위해.이것이 나에게 효과가 있는 것입니다.

  1. 새 swift 파일을 만듭니다.이렇게 하면 xcode에서 bridde-swift.h를 포함하여 mix swift-switch-c 프로젝트의 모든 설정을 생성할 것인지 묻는 메시지가 나타납니다. yes를 누릅니다.
  2. 이제 프로젝트에 사용할 기존의 빠른 파일을 추가합니다.
  3. 구현 파일에서 swift 클래스 add : #import "YOUR PROJECTNAME-swift"를 사용합니다.h" . 이 파일은 xcode로 생성됩니다.만약 당신의 xcode 프로젝트가 나의 프로젝트라면 "나의 프로젝트-스위프트.h"

이상입니다. 이제 목적-c처럼 코드에 신속한 클래스를 만듭니다.

cocoapods의 bridgin 헤더 파일에서 일부 파일을 잘못 가져왔습니다.

가져오는 대신

#import <SomeCocoaPod/SomeCocoaPod.h>

나는 썼습니다.

#import "SomeCocoaPod.h"

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

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

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

방금 만든 임시 Objective-C 파일을 삭제합니다.

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

'#import < Google Maps/Google Maps.h >'

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

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

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

    return true
}

전체 샘플에 대한 링크를 따릅니다.

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

처음 며칠간의 고군분투 끝에, 저는 마침내 제 iOS 앱에 페이스북 가입을 성공적으로 통합할 수 있었습니다.다음은 단계입니다(컴퓨터에 Facebook SDK v4.1 이상을 이미 설치한 것으로 가정합니다).

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

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

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

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

수리 방법

파일을 Supporting Files로 직접 이동(하위 폴더 삭제)하면 SWReveViewController.m이 빌드 단계에 자동으로 추가됩니다. --> 컴파일 소스 및 문제가 사라집니다.

enter image description here

위의 어떤 솔루션으로도 해결할 수 없는 유사한 문제가 있었습니다.제 프로젝트는 코코아 포드를 사용합니다.오류와 함께 다음과 같은 메시지가 표시된 경고가 표시된 것을 발견했습니다.

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'

enter image description here

그래서 해결책은 매우 간단했습니다.Pods 프로젝트의 경우 Build Active Architecture Only 플래그를 No변경하면 원래 오류가 사라집니다.

제 앱에 Today Extension을 추가할 때 그런 종류의 오류를 경험했습니다.확장의 빌드 대상이 내 앱의 빌드 대상과 동일한 이름의 브리징 헤더로 생성되었습니다.확장명이 내 앱의 브리징 헤더에 나열된 파일을 보지 못하기 때문에 오류가 발생했습니다.

당신이 필요로 하는 것은 오직 확장자에 대한 브리징 헤더의 이름을 삭제하거나 변경하는 것뿐이며, 모든 것이 정상입니다.

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

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

저는 Imports를 추가한 후 .m 파일을 삭제했습니다.

다른 수정 사항 중에서 Product->Archive를 수행하려고 할 때 오류가 발생했습니다.알고 보니 이런 일이 있었습니다.

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

그 마지막 줄에 놓고 나니 효과가 있었습니다.

Precompile Bridging Header를 No fix로 설정합니다.

언급URL : https://stackoverflow.com/questions/24146677/swift-bridging-header-import-issue