iOS-CocoaPods로 빌드 실패 헤더 파일을 찾을 수 없습니다


190

CocoaPods를 사용하는 iOS 프로젝트가 있습니다. 다른 개발자가 동일한 프로젝트에서 작업을 시작할 때까지 모든 것이 순조롭게 진행되었습니다. 그는 (내가 아는 한 코드에만) 약간의 변경을 가하고 repo에서 새로운 브랜치를 만들었습니다. 그의 지점을 체크 아웃하고 빌드하려고했지만 오류가 발생합니다. ASLogger / ASLogger.h 파일을 찾을 수 없습니다.

전체 프로젝트를 삭제하고 새로 복사하여 'pods install'을 사용하더라도. 빌드 실패는 여전히 존재합니다. 문제가 어디 있는지 알 수 있습니까? 더 많은 정보가 필요하면 물어보십시오.


3
큰 따옴표 스타일을 사용하는 대신 #import "ASLogger.h"나는 이것을 시도했다, #import <ASLogger.h> 그리고 그것은 나를 위해 일했다 :)
Baig

2
참고 : Baigs 간단한 답변은 헤더를 찾지 못하는 문제를 해결했습니다.
Pedroinpeace

답변:


205

최신 정보

구성 파일이 누락 된 대상에 대한 Podfile포함 link_with을 확인하십시오 . Cocoapods 는 기본적으로 첫 번째 대상설정합니다 . 예 :

platform :osx, '10.7'
pod 'JSONKit',       '~> 1.4'

link_with 'Pomo', 'Pomo Dev', 'Pomo Tests'

------ 최종 업데이트


참고 : 아래 단계는 프로젝트-> 정보-> 구성을 참조해야합니다.


비슷한 증상이 있었고 빌드하려는 pods.xcconfig특정 파일에 파일이 포함되지 않은 것으로 나타났습니다 target. 다른 제안 된 솔루션 중 일부는 나를 위해 일했지만이 문제는 근본적인 문제의 일부를 해결하는 것처럼 보였습니다.

Pods.xcconfig가 작동하지 않습니다

간단한 해결책은 설정이없는 대상에 대한 구성 파일 설정을 변경하는 것입니다.

Pods.xcconfig 작동


4
나를 위해``pods install ''은 첫 번째 대상에서만 이것을 설정했습니다. 이 답변에서 제안한대로 내 문제를 해결했습니다.
Troy

1
마지막으로 해결책 : 포드는 다양한 테스트 릴리스 대상 (알파, 베타, 릴리스 후보)이 아닌 첫 번째 대상에만 추가되었습니다! 많은 고맙습니다!
JOM

link_with다른 목표를 지정하는 데 사용하면 효과가있었습니다. 많은 감사합니다. 나는 이것에 몇 시간을 보냈다.
Dylan Hand

이것은 나를 위해 일했다! 기존 프로젝트를 복제 한 다음 포드를 업데이트했습니다. 그래서 포드 업데이트가 일부 설정을 뒤집 었거나 previos dev가 xcode 5 또는 무언가 (xcode 6에 있음)를 사용하고 있다고 생각합니다. 감사합니다 !!!
온실

4
link_withCocoapods 1.0 이상에서는 지원되지 않습니다.
Vive

90

최신 정보

나는 원래의 대답 이후로 이것을 업데이트했으며, 그것은 downvote를 얻었으므로 이것이 도움이되기를 바랍니다. 그리고 만약 그렇다면, 그것은 내 투표를 되 찾을 수 있기를 바랍니다.

헤더를 가져 오지 않는 경우에 충돌이있을 수 있습니다 HEADER_SEARCH_PATHS. 시도하고 추가하십시오$(inherited)빌드 설정에서 헤더 검색 경로를 하고 CocoaPods에서 .xcconfig 파일에 포함 된 검색 경로를 가져 오도록하십시오.

이렇게하면 충돌에 도움이되고 소스를 올바르게 가져올 수 있습니다.


2
.svn 하위 디렉토리를 삭제하거나 옮길 때 발생하는 'svn obfolded folder issue'앱에서 포드 파일이 감지되지 않습니다. 해결책 : 다음 단계를 수행하십시오. xcodeproj 파일이 존재합니다 ( stackoverflow.com/questions/16427421/… 참조 ) 2. podfile을 다시 설치 함 (참조 : raywenderlich.com/12139/introduction-to-cocoapods ) 3. $ (상 속됨) 플래그가 대상 'HEADER_SEARCH_PATHS'에 추가되었습니다. 앱의 'OTHER_LDFLAGS'
Alphonse R. Dsouza

1
FRAMEWORK_SEARCH_PATHS 설정에 $ (상 속됨)을 추가해야 할 수도 있습니다.
George

1
@ AlphonseR.Dsouza 솔루션이 나를 위해 일했습니다-백만 달러에 OTHER_LDFLAGS에 $ (상 속됨)을 추가했습니다!
Nika Kasradze

3
프로젝트 설정 또는 대상 설정에 $ (상 속됨)을 추가해야합니까?
skypirate

나는 비슷한 문제가 있었고 포드에 대한 과거 경험이 없었습니다. Podfile에서도 2 개의 대상을 언급하지 않았습니다. 예, 목표가 2 개있었습니다. 두 번째 대상을 언급하고 포드 파일을 업데이트하면 터미널은 $ inherrited를 추가하라는 제안과 유사한 경고를 표시했습니다. 나는했고 완벽하게 작동했습니다.
Jasmeet

78

1. 확인

빌드 설정-> 검색 경로-> 사용자 헤더 검색 경로->

  • "$ {PODS_ROOT} /"재귀

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

2. podfile설정 한 경우 가져 오기 스타일 (키포인트)을 확인하십시오.

use_frameworks!

귀하 File-Bridging-Header.h의 포맷터는 다음과 같아야합니다.

#import "MBProgressHUD.h"

그렇지 않으면 아래에 있어야합니다

#import <MBProgressHUD.h>

3. 그것이 작동해야합니다! 날 믿어


1
대부분의 오류가 사라집니다. 그러나 종속성에 #import <EARestrictedScrollView / EARestrictedScrollView.h>와 같은 import 문이있는 경우 어떻게해야합니까? 그런 다음 컴파일러는 대신 #import EARestrictedScrollView.h를 작성하라고 지시합니다. 그러나 포드를 수정할 수 없습니다.
productioncoder

62

헤더 파일, 당신은 저의 죽음이 될 것입니다 ...

마지막으로 (따옴표 포함)을 추가하여 작동시킵니다.

"${PODS_ROOT}/BuildHeaders"

사용자 헤더 검색 경로 항목에 '재귀'를 확인하십시오.


6
따옴표는 여기서 매우 중요합니다. 그들 없이는 작동하지 못했습니다.
DiscDev

5
+1 나는 이미 $(inherited)(작동하지 않았지만) 이것을 추가하면 나를 위해 일했다.
iwasrobbed에

당신이 말하려는 것을 얻지 못했습니다. : / 자세히 설명해 주시겠습니까?
rohan-patel

또 다른 편리한 트릭은 작업 공간과 포드 디렉토리 및 포드를 새로 설치하는 것입니다. 이것은 일반적으로 더 완벽한 솔루션입니다.
averydev

1
결국 AppCode가 모든 헤더 파일 가져 오기를 올바르게 찾는 데 도움이되었습니다. 이것이 없으면 xCode에서는 작동했지만 AppCode에서는 작동하지 않았습니다. 감사!
sarsonj

52

${PODS_HEADERS_SEARCH_PATHS}누락 된 것으로 나타 났으며 개발 git 브랜치에 정의되어 있지 않으므로 추가했습니다. "$(SRCROOT)/Pods/Headers/" 재귀와 헤더 검색 경로에 대한

괜찮습니다


이것은 나에게 답이었고, 나는 cocoapods를 업데이트했으며 PODS_HEADERS_SEARCH_PATHS가 사라 졌다고 생각합니다. 내 솔루션은 이것과 비슷하지만 "$ (PODS_ROOT) / Headers"를 사용했습니다
Andrew Aitken

다른 답변은 저에게 효과가 없었지만 이것은 효과가있었습니다. "을 포함하지 않았으므로 헤더 검색 경로는 다음과 같습니다$(SRCROOT)/Pods/Headers
Blakedallen

@Hlung 안녕하세요, $ (SRCROOT) / Pods / Headers /를 어디에 추가해야합니까? 감사합니다
VAAA

1
@VAAA 타겟> 빌드 설정> 헤더 검색 경로
Hlung

나는 이것이 받아 들여 져야 할 정답이라고 생각한다. @Filip Majernik
Ratul Sharker

35

다른 답변은 여기에 도움이되지 않았습니다. 이 문제를 해결할 수있는 2 가지 다른 문제가 있습니다.

편집 이 방법으로 심볼릭 링크를 확인할 수 있습니다 : 확장자없이 'check'라는 텍스트 파일을 만듭니다. 이 줄들을 여기에 복사하십시오 :

file=/Users/youUserName/XcodeProjectName/Pods/BuildHeaders/SVProgressHUD/SVProgressHUD.h
if [[ ! -e $file &&  -L $file ]]; then
  echo "$file symlink is  broken!"
else
  echo "symlink works"
fi

그런 다음 터미널로 이동하여 확인 파일이있는 폴더로 변경하고 다음을 입력하십시오

bash check

대단히 감사합니다! 첫 번째 항목은 나를 위해 해결했습니다. 포드는 프로젝트의 첫 번째 대상에 대해서만 설정되었습니다. 이것은 잘 컴파일되었지만 다른 목표는 그렇지 않았습니다. 그래서 포드 구성도 추가하여 문제가 해결되었습니다.
mwidmann 2016 년

Configurations.에 'Pods'가 표시되지 않습니다. 이는 심볼릭 링크가 끊 겼음을 의미합니까?
Adamski

35

나를 위해 일한 것은 다음과 같습니다.

대상> "빌드 설정"탭으로 이동하여 "사용자 헤더 검색 경로"설정을 찾으십시오.

이것을 "$ (BUILT_PRODUCTS_DIR)"로 설정하고 "재귀"확인란을 선택하십시오.

이제 빌드 된 대상은 작업 공간의 공유 빌드 디렉토리를 검색하여 링크 가능한 헤더 파일을 찾습니다.

====

최신 정보

최근에 비슷한 (약간 다르지만) 문제가있었습니다. .xcodeproj파일이 아닌 파일을 열었으므로 Xcode에서 포드를 찾을 수 없습니다 .xcworkspace. 앞으로 다른 사람을 도울 수 있습니다.


1
이것은 나를 위해 일했지만 Xcode를 종료하고을 실행 pod install하고 다시 연 후에 만 작동했습니다 .
Ken M. Haggerty

@Snowcrash 어떤 대상? 포드 대상 또는 기본 프로젝트 대상?
VAAA

19

위의 방법 중 어느 것도 효과가 use_frameworks!없으며 Podfile에서 방금 전환했기 때문에이 오류가 발생하면 다음을 읽으십시오.

필자는 특정한 경우 검색 헤더 경로에 관한 것이 아니라는 것을 배우기 전에 위의 모든 솔루션과 훨씬 더 많은 것을 시도했습니다. use_frameworks!Podfile에서 전환 할 때 더 이상 브리징 헤더에 프레임 워크를 포함 할 필요가 없으며 실제로 Xcode는 매우 도움이되지 않는 "헤더를 찾을 수 없습니다"오류를 발생시킵니다.

브리징 헤더 파일에서 모든 가져 오기를 제거하고 대신 import ModuleSwift 프레임 워크에서와 같이 필요에 따라 개별 Swift 파일에서 Swift를 사용하면 됩니다.

그리고 Obj-C 클래스에서 프레임 워크 헤더를 사용하는 경우 (내 경우에는 FBSDK를 사용하는 편의 클래스가 있음) 로컬에서 전역 가져 오기로 변경해야합니다 (이것은로 변경 #import "Module.h"해야 함 #import <Module/Module.h>, 자동 완성되어야 함) 당신이 프레임 워크 이름을 입력하기 시작할 때 당신을 위해. 내 경우에는 <AFNetworking/AFHTTPRequestOperationManager.h>)입니다.

편집 : 나는 @import Module우산을 사용하는 것이 훨씬 안전 하다는 것을 알게되었습니다 .


16

Cocoapods 스타일을 가져 오려고 했습니까?

#import <ASLogger.h>

사이트의 정보가 확실하지 않으므로 풀 요청을 제출했습니다.

https://github.com/CocoaPods/cocoapods.org/pull/34

업데이트 : 그들은 내 요청을 뽑았습니다 :)


큰 따옴표 스타일을 사용하는 대신 #import "ASLogger.h"나는 이것을 시도했다, #import <ASLogger.h> 그리고 그것은 나를 위해 일했다 :)
Baig

나는 이것을 전에 시도했지만 그것은 나를 위해 일했지만 때로는 작동하지 않을 때 다른 문제가 발생합니다. 적어도 일부 상황에서는 <Podname / Filename.h> 형식을 사용할 수도 있습니다.
funroll

예, 이것도 저에게 효과적이었습니다! 파생 된 데이터를 정리하고 삭제하는 양이 해결되지 않았지만 문제가 해결되었습니다.
PostCodeism

10

위키는 이 문제를 해결하는 방법에 대한 조언을 제공 :

Xcode가 종속성의 헤더를 찾을 수없는 경우 :

포드 헤더 파일이 포드 / 헤더에서 올바르게 심볼릭 링크되어 있고 HEADER_SEARCH_PATHS를 재정의하고 있지 않은지 확인하십시오 (1 번 참조). Xcode에서 여전히 해당 코드를 찾을 수없는 경우 마지막 수단으로 가져 오기를 추가 할 수 있습니다 (예 : #import "Pods / SSZipArchive.h").


14
누군가 "포드 / 헤더에서 포드 헤더 파일이 올바르게 심볼릭 링크되어 있는지 확인"하는 방법에 대해 자세히 설명 할 수 있습니까?
Dave Collins

symlink를 확인하는 방법에 대한 위의 답변을 참조하십시오
brainray

수입 명세서를 다루기 전에 구성에 대한 brainray의 답변을 참조하십시오.
Rog

예, 일부 포드는 다음과 같은 잘못된 디렉토리에 연결됩니다 $(PROJECT_DIR)/Pods/Headers/Public/xxx/ios/xxx.h. 추가 ios폴더가 있습니다.
Dong Ma

9

나는이 같은 문제를 겪고있는 팀의 유일한 개발자였습니다. 모든 사람에게 완벽하게 작동했기 때문에 내 환경이어야한다는 것을 깨달았습니다. 나는 git clone다른 디렉토리에서 같은 프로젝트를 시도하고 완벽하게 컴파일 한 다음 어딘가 내 프로젝트 경로에 대한 Xcode 캐싱 항목이어야한다는 것을 깨달았습니다. 프로젝트, 그것은 나를 위해 일했다.

다음으로 이동하여 경로를 확인하고 파인더에서 폴더를 열 수도 있습니다.

엑스 코드 -> 환경 설정 -> 위치 -> ** DerivedData


1
내 경우에는 포드를 업데이트 한 후 문제가 발생했기 때문에 cocoapods에서 문제를 검색해야한다고 생각했습니다. 나는 운없이 여기에 모든 솔루션을 시도하고 마침내 DerivedData를 지웠으며 도움이되었습니다! 감사합니다
Varrry

3

빌드 설정에서 아래 사항을 업데이트하고 오류가 발생하지 않았습니다. Cocoapod를 업데이트하는 동안 이것들을 확인하십시오.

빌드 설정

비트 코드 사용-예 (비트 코드를 사용하는 경우)

매크로 전 처리기-$ (상 속됨)

다른 링커 플래그-objc, -lc ++, $ (상 속됨)

아키텍처 만 빌드

디버그-예

Relese-아니오

검색 경로

프레임 워크 검색 경로-$ (상 속됨) $ (PROJECT_DIR)

라이브러리 검색 경로-$ (상 속됨)

헤더 검색 경로-$ (상 속됨)


2

" 포드 설치 "또는 " 포드 업데이트 " 이후에 건물 오류가 발생한 경우 여전히 이전 버전을 사용하는 동안 포드 중 하나가 XCode 6.3 으로 빌드 된 것일 수 있습니다 .

내 경우에는 Xcode 6.3을 사용하고 문제를 해결하기 위해 OSX를 mavericks에서 Yosemite로 업데이트해야했습니다.


안녕하세요 @omaty, 이것이 유일한 솔루션입니까? 저는 현재 Xcode 6.2로 Mavericks에서 실행 중입니다.
goelv

1
내 경우에는 @goelv 안녕하세요. 내가 찾은 유일한 솔루션이었습니다. 나는 매버릭스와 Xcode 6.2에서 당신과 같았습니다.
Omaty

나는 심지어 같은 문제가 있다고 생각합니다. 내 팀원은 요세미티에 Xcode 6.3이 있으며 그에게 잘 작동하지만 Xcode 6.2의 Mavericks에서 찾을 수없는 헤더를 제거하는 데 어려움을 겪고 있습니다.
Sagar S. Kadookkunnan

1
후속 작업 : 또한 컴퓨터를 Yosemite 및 Xcode 6.3.1로 업그레이드했는데 문제없이 빌드 할 수 있습니다.
Sagar S. Kadookkunnan

1

나를 위해 문제는 Other Linker flags 값에있었습니다. 어떤 이유로 나는 같은 플래그에 따옴표가 없었습니다 -l"xml2" -l"Pods-MBProgressHUD".


Localytics의 Cocoapod에 문제가있었습니다. 아래 Other Linker Flags에서 두 개의 항목을 찾았습니다 : -|Localytics|-PodsLocalytics. 나는 그것들을 제거한 다음 컴파일 할 수있었습니다.
Chris

1

git hub에서 zip을 다운로드하고 누락 된 파일을 Pod /의 해당 경로에서 Finder로 드래그해야했습니다 ...


1

나를 위해 일한 것은 포드 프로젝트를 선택하고 포드 프로젝트의 대상 디렉토리에 누락 된 헤더가있는 대상 프레임 워크를 찾아서 선택하고 대상의 빌드 설정에서 "아키텍처"에서 "빌드 아키텍처 만"을 "아니오"로 설정하는 것이 었습니다.


1

나는 같은 문제가 있지만 위의 해결책으로는 효과가 없습니다. 나는 이것을함으로써 그것을 고쳤다.

  1. 전체 프로젝트 제거
  2. git clone 프로젝트를 실행하고 번들 exec pod install을 실행하십시오.
  3. peoject를 cd하고 remote add upstream your-remote-rep-add를 실행하십시오
  4. git fetch upstream
  5. 자식 체크 아웃 마스터
  6. 자식 병합 업스트림 / 마스터

그런 다음 작동합니다.


1

나에게 포드 프로젝트의 iOS 배포 대상이 프로젝트 자체보다 낮다는 점이 수정되었습니다. 프로젝트와 동일하게 만들면 헤더 파일을 찾을 수있었습니다.


형님! 당신은 1000 upvotes를받을 가치가있다. 나는 이것에 4 시간 동안 붙어 있었고 당신의 해결책은 나를 도왔다. 고마워 친구 감사합니다!
warzone_fz

0

나는 Xcode 5.0의 GM 시드에 있었고이 답변을 얻을 수 없었습니다. 나는 cocoapods가있는 헤더 가져 오기에 대한 여러 가지 다른 질문에 대해 SO에 대한 모든 단일 답변을 시도했습니다.

마침내 나는 나를 위해 일한 해결책을 찾았다. .GM AppStore (GM 시드 위에 설치)를 통해 Xcode 5.0으로 업그레이드하면 헤더 가져 오기가 예상대로 작동합니다.

나는 또한 내 시스템에 여전히 Xcode 5 베타 버전을 가지고 있었고 그것을 삭제했다. 어쩌면 그것은 두 가지의 조합 일 수도 있지만 희망적으로 이것은 다른 누군가를 도울 것입니다.


0

이것은 나에게 답이었고, 나는 cocoapods를 업데이트했으며 PODS_HEADERS_SEARCH_PATHS가 사라 졌다고 생각합니다. 내 솔루션은 이와 비슷하지만 "$ (PODS_ROOT) / Headers"– Andrew Aitken을 사용했습니다.

이 답변에 감사드립니다. 문제를 해결할 방법을 찾는 데 어려움을 겪었습니다. 대단히 감사합니다.


0

어떤 대답도 나에게 도움이되지 않았습니다 (내 포드가 모든 대상과 연결되어 있고 구성 설정이 올바르게 구성되어 있으며 관련 설정 검색 경로 "$ (상속)"등)가 있습니다.

표준 설치 / 업데이트 명령을 사용하여 cocoapod를 최신 디버그 버전으로 업데이트 한 후 문제가 사라졌습니다.

   gem install cocoapods --pre

또는:

   sudo gem install cocoapods --pre

(설치 중에 sudo가 사용 된 경우).

그것은 cocoapods 버그 였을 것입니다.


0

한 가지 간단한 해결 방법은 다음과 같습니다. 1. Pods 폴더 및 Podfile.lock 파일을 삭제합니다. 그러나 Podfile 2는 삭제하지 마십시오. 프로젝트 루트 폴더에서 다음 명령을 실행하십시오.

pod install

이 솔루션으로 문제를 해결했습니다.
dobiho

0

또 다른 이유는 다음과 같습니다. 모든 헤더 경로가 올바르게 보이지만 포드 헤더를 읽으려고 시도하는 사전 컴파일 된 (.pch) 파일에 여전히 오류가 있습니다.

(예 : #import <CocoaLumberjack / CocoaLumberjack.h>).

원시 빌드 출력을 살펴본 결과 .pch 사전 컴파일 된 헤더 파일을 Watch OS 대상으로 가져 오기 때문에 오류로 인해 빌드중인 기본 대상이 아닌 Watch OS 확장 대상을 손상시키는 것으로 나타났습니다. 그곳에. 함께 제공되는 Watch OS 대상 설정이 .pch 파일을 가져 오지 않도록하십시오 (특히 마스터 대상 설정에서 가져 오기를 설정 한 경우).


0

포드 설치로 라이브러리를 포함하면 동적 라이브러리에 직접 도움이된다는 것을 알았습니다. 예를 들어 Firebase의 경우 :

pod 'RNFirebase', :path => 'path/to/node_modules/react-native-firebase/ios'

또는 ASLogger의 경우 :

pod 'ASLogger', :path => 'path/to/node_modules/aslogger/ios' // path to header files

변경하거나 하드 코딩 HEADER_SEARCH_PATHS해도 도움이되지 않았습니다. 오류가 다시 발생하면 필요하지 않습니다rm -rf node_modules 하면 포드 파일 등을 삭제할 없으며 캐시를 지우는 것이 유용하다는 것을 알았습니다.

반응 네이티브의 경우

    rm -rf $TMPDIR/react-native-packager-cache-*
    rm -rf $TMPDIR/metro-bundler-cache-*
    rm -rf $TMPDIR/metro-* 
    rm -rf $TMPDIR/react-* 
    rm -rf $TMPDIR/haste-*
    rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang/ModuleCache"
    npm start -- --reset-cache

Xcode의 경우 폴더를 제거합니다. ~/Library/Developer/Xcode/DerivedData


0

궁극적 인 해결책은로 이동 Build settings -> Search Path -> User Header Search Paths하여 라이브러리 경로를 찾아 Finder에서 통과하는 것입니다. 가져 오기 경로를 포함한 모든 경로가 존재하는지 확인하십시오.

나를 위해 내 길은 튜토리얼보다 짧았습니다. 튜토리얼에서는 다음과 같았 #import <SDK/path/to/sdk/File.h>지만 단지#import <SDK/File.h>


-1

여기에 다른 일한 해결책이 있습니다.

  1. Xcode 종료
  2. Xcode를 열고 프로젝트를 정리하십시오.
  3. 포드 프로젝트를 먼저 빌드
  4. 프로젝트 구축


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.