iOS - Build gagal dengan CocoaPods tidak dapat menemukan file header

190

Saya punya proyek iOS menggunakan CocoaPods. Semuanya berjalan lancar sampai pengembang lain mulai bekerja pada proyek yang sama. Dia membuat beberapa perubahan (hanya untuk kode sejauh yang saya tahu) dan membuat cabang baru di repo. Saya telah memeriksa cabangnya dan mencoba membangunnya, tetapi saya mendapatkan kesalahan: File ASLogger / ASLogger.h tidak ditemukan.

Bahkan jika saya menghapus seluruh proyek dan membuat salinan baru dan menggunakan 'pods install.' kegagalan build masih ada. Apakah Anda tahu di mana masalahnya? Jika Anda memerlukan info lebih lanjut, tanyakan saja.

Filip Majernik
sumber
3
Alih-alih menggunakan gaya kutipan ganda, #import "ASLogger.h" saya mencoba ini, #import <ASLogger.h> Dan itu berhasil untuk saya :)
Baig
2
FYI: Jawaban sederhana Baigs memecahkan masalah saya dengan tidak menemukan header.
Pedroinpeace

Jawaban:

205

Memperbarui

Pastikan Anda Podfilemenyertakan link_withpada target kehilangan file konfigurasi. Cocoapods hanya menetapkan target pertama secara default jika tidak. misalnya

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

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

------ Akhiri Pembaruan


Catatan: Harap perhatikan bahwa Anda harus melihat Konfigurasi Project-> Info-> untuk langkah-langkah di bawah ini.


Saya memiliki gejala yang sama dan menemukan bahwa pods.xcconfigfile tersebut tidak termasuk dalam spesifik yang targetsaya coba buat. Beberapa solusi lain yang disarankan bekerja untuk saya, tetapi yang ini tampaknya mengatasi sebagian dari masalah mendasar.

Pods.xcconfig tidak berfungsi

Solusi sederhana adalah mengubah set file konfigurasi untuk target yang tidak memiliki satu set.

Pods.xcconfig berfungsi

goyangan
sumber
4
Bagi saya, '' instal menginstal '' hanya set ini pada target pertama. Melakukan seperti yang disarankan dalam jawaban ini menyelesaikan masalah saya.
Troy
1
Akhirnya solusi: Pods HANYA ditambahkan ke target pertama, bukan ke berbagai target rilis uji (alpha, beta, kandidat rilis)! Terima kasih banyak!
JOM
Menggunakan link_withuntuk menentukan target saya yang lain berhasil untuk saya. Terimakasih banyak. Saya hanya menghabiskan beberapa jam untuk ini.
Dylan Hand
ini berhasil untuk saya! saya mengkloning proyek yang ada, dan kemudian memperbarui pod. jadi saya kira memperbarui pod membalik beberapa pengaturan, atau dev previos menggunakan xcode 5 atau sesuatu (saya di xcode 6), terima kasih !!!
rumah kaca
4
link_withtidak didukung dalam Cocoapods 1.0 atau lebih tinggi.
Vive
90

Memperbarui

Saya telah memperbarui ini sejak jawaban asli saya, yang mendapat downvote, jadi saya harap ini membantu. Dan jika ya, mudah-mudahan itu akan mendapatkan suara saya kembali.

Jika tajuk tidak diimpor, Anda mungkin memiliki konflik di HEADER_SEARCH_PATHS. Coba dan tambahkan $(inherited)ke jalur pencarian tajuk di Pengaturan Bangun Anda untuk memastikan bahwa itu menarik semua jalur pencarian yang termasuk dalam file .xcconfig dari CocoaPods Anda.

Ini akan membantu dengan konflik apa pun dan mendapatkan sumber Anda diimpor dengan benar.

Bill Burgess
sumber
2
Saya telah menghadapi masalah: File pod tidak terdeteksi di aplikasi dan 'svn terhambat masalah folder' yang terjadi ketika Anda telah menghapus atau memindahkan subdirektori .svn: Solusi: dengan langkah-langkah berikut: 1.Uninstall Instal CocoaPods dari app saja. Ada file xcodeproj (disebut: stackoverflow.com/questions/16427421/... ) 2. File pod yang diinstal lagi (disebut: raywenderlich.com/12139/introduction-to-cocoapods ) 3. Bendera $ (warisan) ditambahkan pada target 'HEADER_SEARCH_PATHS' dan 'OTHER_LDFLAGS' dari aplikasi.
Alphonse R. Dsouza
1
Anda mungkin juga perlu menambahkan $ (diwariskan) ke pengaturan FRAMEWORK_SEARCH_PATHS Anda.
George
1
@ AlphonseR.Dsouza solusi Anda bekerja untuk saya - menambahkan $ (diwarisi) ke OTHER_LDFLAGS terima kasih satu juta!
Nika Kasradze
3
$ (diwariskan) harus ditambahkan dalam pengaturan proyek atau pengaturan target?
skypirate
Saya memiliki masalah yang sama, saya tidak memiliki pengalaman masa lalu dengan polong. Di Podfile juga, saya tidak menyebutkan 2 target. Ya saya punya 2 target. Setelah saya menyebutkan target ke-2 dan memperbarui file Pod, terminal menyatakan beberapa peringatan yang mirip dengan saran Anda untuk menambahkan $ inherrited. Saya lakukan dan itu bekerja dengan sempurna.
Jasmeet
78

1. Periksa

membangun pengaturan -> Jalur Pencarian -> Jalur Pencarian Header Pengguna ->

  • "$ {PODS_ROOT} /" rekursif

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

2. Periksa gaya impor (TITIK KUNCI), jika Anda podfiletelah menetapkan

use_frameworks!

Di Anda File-Bridging-Header.h, formatter harus seperti ini

#import "MBProgressHUD.h"

lain harus di bawah

#import <MBProgressHUD.h>

3. Itu pasti berhasil! percayalah kepadaku

Albert
sumber
1
Sebagian besar kesalahan hilang. Namun apa yang harus saya lakukan ketika dependensi memiliki pernyataan impor seperti: #import <EARestrictedScrollView / EARestrictedScrollView.h>. Kemudian kompiler meminta saya untuk menulis #import EARestrictedScrollView.h. Tapi saya tidak bisa memodifikasi pod saya.
productioncoder
62

File header, Anda akan menjadi kematian saya ...

Akhirnya berhasil dengan menambahkan (termasuk kutipan)

"${PODS_ROOT}/BuildHeaders"

ke entri Jalur Pencarian Header Pengguna, dan memeriksa 'rekursif'.

averydev
sumber
6
Perhatikan bahwa kutipannya sangat penting di sini. Tanpa mereka, saya tidak bisa membuatnya bekerja.
DiscDev
5
+1 Saya sudah punya $(inherited)(tidak berfungsi) tetapi menambahkan ini berfungsi untuk saya.
iwasrobbed
Tidak mendapatkan apa yang ingin Anda katakan. : / Bisakah Anda jelaskan?
rohan-patel
Trik lain yang berguna adalah untuk menghapus ruang kerja dan direktori pod dan menginstal pod baru. Ini umumnya merupakan solusi yang lebih lengkap.
averydev
1
Ini akhirnya membantu AppCode untuk menemukan semua impor file header dengan benar. Tanpa ini, ia bekerja di xCode, tetapi tidak di AppCode. Terima kasih!
sarsonj
52

Saya menemukan ${PODS_HEADERS_SEARCH_PATHS}ada yang hilang dan tidak didefinisikan dalam mengembangkan git saya, Jadi saya menambahkan "$(SRCROOT)/Pods/Headers/"untuk Header Search Paths dengan rekursif

Itu baik untuk saya

maktif
sumber
Ini adalah jawaban untuk saya, saya memperbarui cocoapods dan saya pikir itu membuat PODS_HEADERS_SEARCH_PATHS pergi. Solusi saya mirip dengan ini tetapi saya menggunakan "$ (PODS_ROOT) / Header"
Andrew Aitken
Jawaban lain tidak berhasil untuk saya, tetapi jawaban ini berhasil. Saya perhatikan bahwa saya tidak memasukkan tanda ", jadi jalur pencarian tajuk saya terlihat seperti ini$(SRCROOT)/Pods/Headers
Blakedallen
@ Halo, di mana saya harus menambahkan $ (SRCROOT) / Pods / Header /? Hargai itu
VAAA
1
Sasaran @VAAA> Pengaturan Bangun> Jalur pencarian judul
Hlung
Saya pikir ini adalah jawaban yang tepat apa yang harus diterima, bagaimana menurut Anda @Filip Majernik
Ratul Sharker
35

Kedua jawaban lain tidak membantu di sini. Saya menemukan 2 masalah lain yang mungkin memperbaikinya:

EDIT Anda dapat memeriksa symlink dengan cara ini: membuat file teks bernama 'centang' tanpa ekstensi. salin baris ini ke dalamnya:

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

Lalu pergi ke terminal, ubah ke folder tempat file cek Anda berada dan ketik

bash check
brainray
sumber
Terima kasih banyak! Entri pertama menyelesaikannya untuk saya. Pod ditetapkan untuk target pertama di proyek kami saja. Ini dikompilasi dengan baik, tetapi target lainnya tidak. Jadi saya menambahkan konfigurasi Pods juga dan sekarang masalahnya hilang.
mwidmann
Saya tidak melihat 'Pods' di Konfigurasi .. apakah ini berarti symlink saya rusak?
Adamski
35

Inilah yang bekerja untuk saya:

Buka tab Target> "Build Settings" dan temukan pengaturan "Path Pencarian Header Pengguna".

Setel ini menjadi "$ (BUILT_PRODUCTS_DIR)" dan centang kotak "Recursive".

Sekarang target yang dibangun akan mencari direktori build bersama workspace untuk menemukan file header yang dapat ditautkan.

====

MEMPERBARUI

Saya memiliki masalah yang serupa (walaupun sedikit berbeda) baru-baru ini. Ternyata Xcode tidak dapat menemukan Pods karena saya telah membuka .xcodeprojfile daripada .xcworkspacefile. Mungkin bisa membantu orang lain di masa depan.

Snowcrash
sumber
1
Ini berhasil bagi saya, tetapi hanya setelah berhenti Xcode, berjalan pod install, dan membuka kembali.
Ken M. Haggerty
@Snowcrash Sasaran apa? target pod atau target proyek utama?
VAAA
19

Jika tidak ada di atas yang berfungsi untuk Anda dan Anda menemukan kesalahan ini karena Anda baru saja beralih ke use_frameworks!Podfile Anda, baca terus:

Saya mencoba semua solusi di atas dan lebih banyak lagi sebelum mengetahui bahwa ini bukan tentang jalur header pencarian sama sekali dalam kasus khusus saya; itu saat Anda beralih keuse_frameworks! dalam Podfile Anda, Anda tidak perlu lagi menyertakan kerangka kerja di header bridging Anda, dan sebenarnya Xcode akan melempar kesalahan "tidak dapat menemukan header" yang sangat tidak membantu.

Yang perlu Anda lakukan adalah menghapus semua impor dari file header bridging Anda, dan alih-alih gunakan Swift import Moduledi file Swift individual Anda sesuai kebutuhan, sama seperti yang Anda lakukan untuk kerangka kerja Swift.

DAN jika Anda menggunakan salah satu header kerangka kerja di kelas Obj-C Anda (dalam kasus saya, kami memiliki kelas kenyamanan yang menggunakan FBSDK), Anda perlu mengubahnya dari impor lokal ke global (ini berarti berubah #import "Module.h"menjadi #import <Module/Module.h>, yang seharusnya melengkapi secara otomatis untuk Anda ketika Anda mulai mengetik nama kerangka kerja. Dalam kasus saya itu <AFNetworking/AFHTTPRequestOperationManager.h>).

Sunting: Saya telah belajar bahwa melakukan @import Modulepenggunaan menggunakan file payung yang bahkan lebih aman.

Scott Fister
sumber
16

Apakah Anda mencoba mengimpor gaya Cocoapods?

#import <ASLogger.h>

Info di situs tidak benar-benar jelas, saya mengajukan permintaan tarik:

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

Pembaruan: Mereka menarik permintaan saya :)

Ikat aku
sumber
Alih-alih menggunakan gaya kutipan ganda, #import "ASLogger.h" saya mencoba ini, #import <ASLogger.h> Dan itu bekerja untuk saya :)
Baig
Saya sudah mencoba ini sebelumnya dan itu berhasil untuk saya, tetapi kadang-kadang masalah yang berbeda terjadi ketika tidak berhasil. Anda juga dapat menggunakan format <Podname / Filename.h> dalam setidaknya beberapa situasi.
funroll
Ya ini juga bekerja untuk saya! Tidak ada jumlah pembersihan dan penghapusan data yang diperoleh menyelesaikannya, tetapi ini berhasil.
PostCodeism
10

The wiki memberikan saran tentang cara untuk memecahkan masalah ini:

Jika Xcode tidak dapat menemukan header dari dependensi:

Periksa apakah file header pod disinkronkan dengan benar di Pods / Header dan Anda tidak mengabaikan HEADER_SEARCH_PATHS (lihat # 1). Jika Xcode masih tidak dapat menemukannya, sebagai upaya terakhir Anda dapat menambah impor Anda, mis. #Import "Pods / SSZipArchive.h".

tilo
sumber
14
Bisakah seseorang menguraikan secara tepat bagaimana "Memeriksa apakah file header pod disinkronkan dengan benar dalam Pods / Header"?
Dave Collins
tolong lihat jawaban saya di atas untuk cara memeriksa symlink
brainray
Silakan juga lihat jawaban brainray tentang Konfigurasi sebelum Anda memotong pernyataan impor Anda.
Rog
ya, beberapa pod menghubungkan ke direktori yang tidak valid, seperti $(PROJECT_DIR)/Pods/Headers/Public/xxx/ios/xxx.h, ada tambahan iosfolder ...
Dong Ma
9

Saya adalah satu-satunya pengembang dalam tim yang mengalami masalah yang sama, ini bekerja dengan baik untuk semua orang sehingga saya menyadari itu harus menjadi lingkungan saya. Saya mencobagit clone satu proyek yang sama di direktori lain dan dikompilasi dengan sempurna, kemudian saya menyadari itu harus menjadi caching Xcode untuk jalur proyek saya di suatu tempat, bahwa "suatu tempat" adalah folder DerivedData, hapus saja dan lakukan pembangunan bersih dari Anda proyek, itu berhasil untuk saya.

Anda bisa mendapatkan path dan bahkan membuka folder di finder dengan masuk ke:

Xcode -> Preferensi -> Lokasi -> ** DerivedData

bithavoc
sumber
1
Dalam kasus saya, masalah muncul setelah memperbarui pod, jadi saya pikir dalam cocoapods harus mencari masalah. Saya sudah mencoba semua solusi di sini tanpa hasil dan akhirnya hanya membersihkan DerivedData - dan itu membantu! terima kasih
Varrry
3

Saya akan memperbarui hal-hal di bawah ini dalam pengaturan Build saya dan saya tidak mendapatkan kesalahan. Untuk memeriksa ini adalah hal-hal sambil memperbarui cocoapod Anda.

Pengaturan Bangun

Aktifkan kode Bit - YA (jika Anda menggunakan bitcode)

Preprocessor makro - $ (diwarisi)

Bendera penghubung lainnya - objc, -lc ++, $ (diwarisi)

Bangun arsitektur saja

Debug - Ya

Relese - Tidak

Jalur Pencarian

Jalur pencarian kerangka kerja - $ (diwariskan) $ (PROJECT_DIR)

Jalur pencarian perpustakaan - $ (diwariskan)

Jalur pencarian header - $ (diwariskan)

Surezz
sumber
2

Jika Anda memiliki kesalahan bangunan setelah " pemasangan pod " atau " pembaruan pod ", mungkin salah satu pod Anda telah dibuat dengan XCode 6.3 saat Anda masih menggunakan versi sebelumnya.

Dalam kasus saya, saya harus memperbarui OSX saya dari mavericks ke Yosemite untuk memiliki Xcode 6.3 dan menyelesaikan masalah

Omaty
sumber
Hai @omat, apakah ini satu-satunya solusi? Saat ini saya sedang menjalankan Mavericks dengan Xcode 6.2
goelv
1
Halo @goelv dalam kasus saya itu adalah satu-satunya solusi yang saya temukan. Saya seperti Anda di bawah Mavericks dan Xcode 6.2.
Omaty
Saya pikir bahkan saya memiliki masalah yang sama. Rekan satu tim saya memiliki Xcode 6.3 di Yosemite dan itu berfungsi dengan baik untuknya, sedangkan saya berjuang untuk menyingkirkan header yang tidak ditemukan masalah di Mavericks di Xcode 6.2.
Sagar S. Kadookkunnan
1
Tindak lanjut: Saya juga memutakhirkan mesin ke Yosemite dan Xcode 6.3.1, saya dapat membangun tanpa masalah sekarang.
Sagar S. Kadookkunnan
1

bagi saya masalahnya adalah nilai flag Other Linker. Untuk beberapa alasan saya tidak memiliki tanda kutip di bendera seperti -l"xml2" -l"Pods-MBProgressHUD".

berilium
sumber
Saya mengalami masalah dengan Cocoapod Localytics. Di bawah Other Linker Flagssaya menemukan dua entri: -|Localyticsdan |-PodsLocalytics. Saya menghapusnya dan kemudian dapat mengkompilasi.
Chris
1

Saya harus mengunduh zip dari git hub dan menyeret file yang hilang ke Finder di jalur yang sesuai di Pod / ...

neelamc23
sumber
1

Apa yang berhasil bagi saya adalah memilih proyek Pods, menemukan dan memilih kerangka kerja target dengan header yang tidak ada di direktori target proyek Pod dan pengaturan "Build Active Architecture Only" ke "No" di bawah "Arsitektur" di pengaturan build target.

Harun
sumber
1

Saya memiliki masalah yang sama, tetapi solusi di atas tidak dapat bekerja. Saya telah memperbaikinya dengan melakukan ini:

  1. Hapus seluruh proyek
  2. Jalankan git klon proyek dan jalankan instal bundle exec pod install
  3. cd peoject dan jalankan remote add upstream Anda-remote-rep-add
  4. git ambil upstream
  5. git checkout master
  6. git menggabungkan upstream / master

Dan kemudian berhasil.

Azure Yu
sumber
1

Bagi saya, apa yang diperbaiki adalah target penyebaran iOS untuk proyek Pods saya lebih rendah daripada proyek saya sendiri. Setelah saya membuatnya sama dengan proyek saya, ia dapat menemukan file header.

Josh
sumber
kawan! Anda layak mendapatkan 1000 upvotes. Saya terjebak dengan ini selama 4 jam dan solusi Anda membantu saya. terima kasih banyak bro terima kasih banyak!
warzone_fz
0

Saya berada di benih GM Xcode 5.0 dan saya tidak bisa mendapatkan jawaban ini untuk bekerja. Saya mencoba setiap jawaban tunggal pada SO pada beberapa pertanyaan berbeda tentang impor tajuk w / cocoapods.

AKHIRNYA saya menemukan solusi yang berfungsi untuk saya : Saya memutakhirkan ke Xcode 5.0 melalui Mac AppStore (diinstal di atas benih GM) dan sekarang impor header berfungsi seperti yang diharapkan.

Saya juga masih memiliki versi beta Xcode 5 di sistem saya dan saya menghapusnya juga. Mungkin itu adalah kombinasi dari dua hal, tetapi mudah-mudahan ini membantu orang lain.

DiscDev
sumber
0

Ini adalah jawaban untuk saya, saya memperbarui cocoapods dan saya pikir itu membuat PODS_HEADERS_SEARCH_PATHS pergi. Solusi saya mirip dengan ini tetapi saya menggunakan "$ (PODS_ROOT) / Header" - Andrew Aitken

Terima kasih banyak atas jawaban ini. Saya mengalami kesulitan mencari cara untuk memperbaiki masalah saya. Terima kasih banyak.

pengguna1494912
sumber
0

Tidak ada jawaban yang membantu saya (saya memiliki pod saya ditautkan dengan semua target, membangun konfigurasi setup dengan benar, koreksi set path pencarian "$ (diwarisi)", dll ...).

Masalah menghilang dengan sendirinya setelah saya memperbarui cocoapods ke versi debug terbaru menggunakan perintah install / update standar:

   gem install cocoapods --pre

atau:

   sudo gem install cocoapods --pre

(jika sudo digunakan selama instalasi).

Itu pasti bug cocoapods.

Lukasz
sumber
0

Satu solusi sederhana adalah: 1. Hapus folder Pods dan file Podfile.lock. Tapi jangan hapus Podfile 2. Jalankan perintah berikut di folder root proyek Anda:

pod install
farhad rubel
sumber
Saya memperbaiki masalah saya dengan solusi ini.
dobiho
0

Berikut alasan lain: Semua jalur tajuk tampak baik-baik saja, tetapi kami masih memiliki kesalahan dalam file yang telah dikompilasi (.pch) yang mencoba membaca tajuk pod

(mis. #import <CocoaLumberjack / CocoaLumberjack.h>).

Melihat output build mentah, saya akhirnya melihat bahwa kesalahan itu melanggar Target Extension OS Watch kami, bukan target utama kami sedang membangun, karena kami juga mengimpor file header .pch yang telah dikompilasi ke target Watch OS, dan gagal sana. Pastikan pengaturan target Watch OS Anda yang menyertainya jangan mencoba mengimpor file .pch (terutama jika Anda menyetel impor itu dari pengaturan target master, seperti yang saya lakukan!)

Owen Hartnett
sumber
0

Saya telah menemukan bahwa memasukkan pustaka sebagai pemasangan pod secara langsung membantu pustaka dinamis. Misalnya, untuk Firebase:

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

Atau untuk ASLogger:

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

Mengubah atau meng HEADER_SEARCH_PATHS- hardcoding tidak membantu saya. Jika kesalahannya berulang, tidak perlu untuk rm -rf node_modulesmenghapus file pod dll, saya menemukan itu berguna untuk menghapus cache.

Untuk reaksi-asli, saya lari

    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

Untuk Xcode saya menghapus folder di ~/Library/Developer/Xcode/DerivedData

ehacinom
sumber
0

Saya pikir solusi terbaik adalah pergi ke Build settings -> Search Path -> User Header Search Paths, cari jalur perpustakaan Anda dan lalui di Finder. Pastikan semua jalur ada termasuk jalur impor Anda.

Bagi saya jalur saya lebih pendek daripada di tutorial. Dalam tutorial itu seperti #import <SDK/path/to/sdk/File.h>, tapi ternyata itu adil#import <SDK/File.h>

Simon Moshenko
sumber
-1

Saya punya solusi lain yang berhasil di sini,

  1. Keluar dari Xcode
  2. Buka Xcode dan bersihkan proyek
  3. Buat proyek Pods terlebih dahulu
  4. Bangun Proyek
Pramod More
sumber
-2

Saya memecahkan masalah ini untuk Xcode 8.2.1 dengan drag and drop framework yang ingin saya gunakan.

Dhruv Narayan Singh
sumber