Mendapatkan "file tidak ditemukan" di Bridging Header saat mengimpor kerangka kerja Objective-C ke dalam proyek Swift

96

Saya memiliki proyek Swift yang saya coba impor kerangka kerja berbasis ObjC. Kerangka kerja terletak di direktori di bawah jalur proyek dan direferensikan oleh proyek di Xcode. Ini juga ditambahkan ke "Link Binary with Libraries" di halaman 'Build Phases' proyek.

Namun, untuk beberapa alasan, sepertinya saya tidak dapat menyertakan kerangka kerja dalam file Bridging-Header. Saya mendapatkan kesalahan berikut:

BridgingHeader.h:5:9: error: 'Parse/Parse.h' file not found
#import <Parse/Parse.h>
        ^
<unknown>:0: error: failed to import bridging header 'BridgingHeader.h'

Hal-hal yang telah saya periksa:

  1. "Instal Header Kompatibilitas Objective-C" diatur ke "YA".
  2. Jalur Pencarian Header menyertakan jalur ke kerangka kerja.

Saya yakin saya melewatkan sesuatu, jadi jika ada yang punya petunjuk, itu bagus.

Dia Kharrat
sumber
3
saya lupa memasukkan jalur perpustakaan Header Search Paths, dalam hal ini pertanyaan membantu: D
Aishwat Singh

Jawaban:

78

Menemukan solusi:

  • Pengaturan "Objective-C Bridging Header" (alias SWIFT_OBJC_BRIDGING_HEADER) harus disetel pada level Target, dan BUKAN level Project. Pastikan untuk menghapus nilai pengaturan di tingkat Proyek.

(bagi saya, ini tampak seperti bug Xcode, karena saya tidak tahu mengapa ini memperbaikinya).

Dia Kharrat
sumber
1
Ini benar-benar aneh, saya mengalami kesalahan yang sama dan ternyata header saya telah ditentukan di tingkat Proyek. Meskipun saya sudah menetapkannya di level Target, saya harus menghapusnya dari level Proyek untuk memungkinkan Kerangka pihak ketiga ditambahkan. Sepertinya itu adalah bug Xcode.
Jojodmo
2
@MarcoAlmeida, jika Anda memiliki target pengujian, coba hapus pengaturan "Header Penghubung Objective-C" dari itu juga. Ini akan membantu.
Davlat Mirmanov
3
Luar biasa. Terima kasih.
Darren
1
Hei yang disana! Memiliki masalah yang sama di sini :( Meskipun tidak diselesaikan dengan metode yang dijelaskan di atas ...
Mike K
1
Ini berhasil untuk saya di Xcode 9.2. Masih belum diperbaiki setelah bertahun-tahun ...
Oliver Eichhorn
58

Saya memiliki masalah yang sama. Saya mengubah semua impor saya dari #import "HMSegmentedControl.h"menjadi #import <HMSegmentedControl/HMSegmentedControl.h>misalnya.

jamesthakid
sumber
7
Untuk bekerja dengan cocoapoda, ini diperlukan. Dalam header Bridging, jangan pernah mengimpor pod sebagai #import "abc.h" pengguna #import <abc / abc.h> Yang Disukai.
NaXir
1
Anda adalah dewa! Terima kasih banyak untuk ini.
Alper
Dalam kasus saya, saya mengonversi #import <ios-qr-encoder / UIImage + MDQRCode.h> ke #import "UIImage + MDQRCode.h" dan berhasil
Mashhadi
Anda adalah raja
Itai Spector
27

Saya harus menambahkan libdirektori saya di User Header Search Paths:

uji pengaturan target - jalur pencarian tajuk pengguna

Dalam kasus saya, libdirektori berisi .afile -library dan beberapa file header. Ini termasuk dalam file header penghubung. Namun, penyusun cepat tidak akan menemukannya. Hanya ketika saya menambahkan ${PROJECT_DIR}/libke Jalur Pencarian Header Pengguna itu membangun target pengujian.

(Saya menggunakan Xcode 6.2 di Mavericks 10.9.5)

Rainer Schwarze
sumber
1
Saya bisa menyelesaikan masalah ini dengan menambahkan Pods / * ke Jalur Pencarian Header dari target utama. Menariknya, saya tidak mengalami masalah ini sebelum menambahkan kerangka kerja Swift sebagai dependensi ke target saya. Xcode 7 beta 6.
bizz84
Inilah yang berhasil untuk saya. Saya memiliki kerangka kerja yang disertakan dalam proyek saya yang berisi perpustakaan (.a). Saya harus membuat jalur pencarian ke header untuk perpustakaan di Jalur Pencarian Header Pengguna.
Chris Livdahl
Juga harus mengimpor folder Pods / library, terima kasih banyak!
thibaut noah
17

Kami menemukan pesan kesalahan yang sama, dengan penyebab yang sama sekali berbeda.

Mempersiapkan:

  • Target aplikasi, semua kode Obj-C
  • Target Unit Test dengan satu kasus uji cepat & header penghubung yang mengacu pada kode aplikasi

Saat kami menambahkan kasus uji cepat kedua, setelah pembersihan (atau pada mesin rekan satu tim), kami melihat kesalahan ini saat membangun target pengujian unit.

Itu diperbaiki dengan menambahkan kelas Obj-C tiruan ke target pengujian unit.

Dan Jackson
sumber
5
Terima kasih. Ini benar-benar berhasil meskipun sama sekali tidak masuk akal.
Saya bisa menghapus kelas Obj-C tiruan sesudahnya. Dugaan saya adalah bahwa efek samping dari solusi ini adalah pembuatan header penghubung uji-target-spesifik, yang pada gilirannya (saya curiga) menyebabkan Xcode mengabaikan header penghubung aplikasi host.
clozach
Tambahan di atas: setelah melakukan clean build, saya mulai mendapatkan kesalahan segmentasi 11 selama kompilasi. Setelah beberapa kali coba-coba, tampaknya file dummy .m harus ada, tetapi bisa kosong. Kegilaan.
clozach
Menambahkan kelas objek tiruan ke target pengujian saya, memperbaikinya untuk saya!
neoneye
5

Jika menggunakan cocoapods, coba instal ulang pod dengan menjalankan perintah berikut.

pod install
Ankit Goel
sumber
Ini membantu saya karena saya baru-baru ini membuat Konfigurasi baru yang tidak dapat dikompilasi (masalah file yang sama tidak ditemukan), sedangkan konfigurasi lainnya (Debug dan Rilis) adalah. pod installtampaknya diperlukan untuk konfigurasi baru yang ditambahkan ...
Mete
5

Ini entah bagaimana melakukan trik untuk saya:

  • Proyek bersih
  • Bersihkan folder build
  • Mulai ulang Xcode
Hlung
sumber
Datanglah dengan jawaban umum, jangan hit & coba trik.
Nico
Trik hit & try khusus ini membutuhkan usaha yang sangat sedikit jadi tidak ada salahnya untuk mencoba sambil memikirkan solusi lain. ;)
Hlung
1
Sayangnya, trik hit & try ini seringkali merupakan jawaban yang benar.
Robert Schmid
5

Kesalahan ini muncul saat menginstal dengan Cocoapods pustaka CocoaImageHashing. Masalahnya adalah jalur pencarian salah. Jadi pada level Target, di Build Settings -> Search Paths -> Header Search Paths, jalurnya sesuai dengan folder yang tidak ada, misalnya "$ {PODS_ROOT} / Headers / Public / CocoaImageHashing", ketika struktur folder Headers / Public / Tidak ada. Saya menambahkan jalur $ {PODS_ROOT} / CocoaImageHashing dan kesalahannya menghilang.

Nicoara Talpes
sumber
4

Agak aneh, tapi saya rasa Anda harus menambahkan sumber daya ke fase "Salin Sumber Daya Bundel" dari target pengujian Anda untuk membuatnya memuat semua header dari target aplikasi utama Anda. Dalam kasus saya, saya menambahkan main.storyboarddan menangani kesalahan tersebut.

masukkan deskripsi gambar di sini

Yas T.
sumber
4

Ini terjadi pada saya setelah menambahkan / mengganti nama konfigurasi saat ini dan itu masuk akal.

Setiap konfigurasi menggunakan Set Konfigurasi yang dihasilkan oleh cocoapods sehingga hal-hal ini harus cocok.

Jadi, jika Anda menambahkan / mengganti nama konfigurasi, ini perlu menggunakan set konfigurasi yang benar, dan untuk menjalankan itu pod installakan melakukannya.

rgkobashi
sumber
3

Jika membantu siapa pun.

Dalam kasus saya, file obj-c saya ditambahkan memiliki folder referensi (folder biru di xcode) dan header tidak dapat menemukannya. Baru saja menambahkan file, bukan folder, dari finder ke xcode dan diselesaikan.

DaSilva
sumber
2

Saya memiliki masalah yang sama. Bagi saya, alasannya adalah saya menggunakan header penghubung yang sama untuk Aplikasi saya dan Ekstensi Hari Ini. Ekstensi My Today tidak menyertakan Parse, tetapi karena itu didefinisikan di header-bridging, ia mencoba mencarinya. Saya membuat header penghubung baru untuk Ekstensi Hari Ini dan kesalahannya hilang.

nelayan
sumber
Tidak terdengar seperti masalah yang saya alami. Saya tidak memiliki ekstensi Today. Dalam kasus saya, saya menggunakan header penghubung untuk aplikasi, dan kerangka kerja Parse disertakan dalam dependensi aplikasi. Kesalahan juga terjadi untuk framework lain, tidak hanya Parse.
Dia Kharrat
2

Kerangka saya bekerja sebelumnya dan tiba-tiba berhenti bekerja, dan tidak ada jawaban yang berhasil untuk saya. Saya menghapus kerangka kerja di Build Phases> Link Binary With Libraries, dan menambahkannya kembali. Mulai bekerja lagi.

James
sumber
2

Saya memiliki masalah dan memperbaikinya setelah menghabiskan 2 jam untuk menemukannya. Lingkungan saya seperti di bawah ini:

cocoapod 0.39.0

cepat 2.x

XCode 7.3.1

Langkah:

  1. jalur proyek: project_name / project_name / your_bridging_header.h
  2. Di bagian Swift di Build Setting, Objective-C Bridging Header harus: project_name / your_bridging_header.h
  3. Di your_bridging_header.h , ubah semua deklarasi dari .h menjadi #import
  4. Di kelas yang sedang digunakan your_3rd_party . Deklarasikan import your_3rd_party
Binh Le
sumber
Jawaban anda benar tambahkan saja jawaban @jamesthakid di poin ketiga agar lebih jelas. Bekerja untuk saya, terima kasih.
NaXir
5
Apa sebenarnya yang Anda maksud dengan "ubah semua deklarasi dari .h menjadi #import"?
Chris Gunawardena
1

Saya baru saja menduplikasi skema yang ada dan menambahkan konfigurasi lain ke proyek. Saya harus menambahkan konfigurasi dengan nama yang sama ke proyek kerangka kerja agar juga membangun di DerivedData/($AppName)/Build/Products/($CONFIGURATION_NAME)folder yang sama . Jika tidak, file .framework tidak akan dibuat dan oleh karena itu tidak dapat diimpor.

iMaddin
sumber
1

Saya mengalami masalah yang sama hari ini ketika mencoba menggunakan pod yang ditulis dalam Objective-C di proyek Swift saya, tidak ada solusi di atas yang tampaknya berhasil.

Di podfile yang saya use_frameworks!tulis. Mengomentari baris ini dan kemudian menjalankan pod installlagi memecahkan masalah ini untuk saya dan kesalahan itu hilang.

Rikh
sumber
1

(Diperbarui per 27 Mei 2017)

Xcode 8. Proyek Swift - mengimpor Objective C.

Hal yang perlu diketahui:

  1. File header bridging HARUS disimpan dalam folder proyek. (yaitu tidak disimpan pada tingkat yang sama dengan .xcodeproj disimpan, tetapi satu tingkat lebih jauh ke bawah ke dalam folder di mana semua file c cepat dan objektif Anda disimpan). Itu masih dapat menemukan file di tingkat atas, tetapi tidak akan ditautkan dengan benar dan dapat mengimpor file Objective C ke file header penghubung
  2. File header bridging dapat diberi nama apa saja, selama itu file header .h
  3. Pastikan jalur di Build Settings> Swift Compiler - General> Objective C Bridging Header dengan benar menunjuk ke Anda menjembatani file header yang Anda buat
  4. PENTING: jika Anda masih mendapatkan "tidak ditemukan", coba kosongkan dulu file header penghubung Anda dan hapus semua impor yang saat ini Anda tulis di sana. Pastikan bahwa file header penghubung dapat ditemukan terlebih dahulu, kemudian mulai menambahkan impor tujuan c ke file itu. Untuk beberapa alasan, itu akan menendang kembali kesalahan "tidak ditemukan" yang sama bahkan jika ditemukan tetapi tidak suka impor yang Anda coba karena beberapa alasan
  5. Anda tidak boleh #import "MyBridgingHeaderFile.h" dalam file C tujuan Anda. Ini juga akan menyebabkan kesalahan "file tidak ditemukan"
BennyTheNerd
sumber
1
Semua poin ini diperiksa dan masih memiliki masalah yang sama :( Ada poin lebih lanjut yang harus dipertimbangkan?
Amjad Husseini
@AmjadHusseini mencoba untuk membersihkan file proyek Anda kemudian menghapus data yang berasal dari proyek Anda kemudian restart xCode. yang berhasil dengan saya
Mohammad Allam
0

Saya memiliki masalah serupa dan hanya satu solusi yang berhasil untuk saya. Saya mencoba semua yang disarankan, dan saya tahu bahwa saya mengatur header bridging saya dengan baik, karena saya memiliki beberapa lib yang berfungsi.

Ketika saya menyalin perpustakaan (seret dan lepas) ke dalam proyek, tanpa Cocoapods, hanya setelah itu saya dapat mengimpor header tanpa kesalahan.

Saya menggunakan perpustakaan facebook / Shimmer.

nja
sumber
0

Saya memiliki masalah serupa dengan pod. Pada dasarnya mencoba menjalankan tes UI saya, Xcode mengeluhkan pod yang hilang. Solusi untuk ini jauh lebih sederhana daripada yang dijelaskan di atas:

  1. buka file proyek (utama bukan target)
  2. klik pada tab "Info" (paling kiri)
  3. setel konfigurasi pod yang tepat untuk target pengujian UI (bagian "Konfigurasi" tepat di bawah "Target Penerapan")

Kerja!

Saya menemukannya di utas: https://github.com/CocoaPods/CocoaPods/issues/2695

Kedengarannya seperti bug untuk buah kakao, tetapi saya dapat melihat alasan mengapa hal ini menjadi kasus yang rumit.

Julian Król
sumber
0

Dalam kasus saya, saya hanya harus keluar dari simulator ...

Michal Shatz
sumber
0

Bersihkan proyek, Bersihkan folder build, Mulai Ulang Xcode. saya hanya menghapus jalur di proyek goto> Pengaturan Bangun> Cari kata kunci. Swift Compiler - General -> Objective-C Bridging header bekerja untuk saya.

Madavaram Ramesh
sumber
0

Agustus 2019

Dalam kasus saya, saya ingin menggunakan protokol Swift dalam file header Objective-C yang berasal dari target yang sama dan untuk ini saya perlu menggunakan deklarasi maju dari protokol Swift untuk mereferensikannya di antarmuka Objective-C. Hal yang sama harus valid untuk menggunakan kelas Swift di file header Objective-C. Untuk menggunakan deklarasi maju, lihat contoh berikut dari dokumen di Sertakan Kelas Swift di Header Objective-C Menggunakan Deklarasi Teruskan :

// MyObjcClass.h
@class MySwiftClass; // class forward declaration
@protocol MySwiftProtocol; // protocol forward declaration

@interface MyObjcClass : NSObject
- (MySwiftClass *)returnSwiftClassInstance;
- (id <MySwiftProtocol>)returnInstanceAdoptingSwiftProtocol;
// ...
@end
ronatori
sumber