Soru Objective-C çerçevelerini Swift projesine içe aktarırken Bridging Header'da “dosya bulunamadı”


ObjC tabanlı çerçeveler almaya çalıştığım bir Swift projem var. Çerçeve, proje yolunun altındaki bir dizinde bulunur ve Xcode'daki proje tarafından referans alınır. Ayrıca, projenin 'Yapı Aşamaları' sayfasındaki "Kütüphanelerle Bağlantı İkilisine" eklenir.

Ancak, bazı nedenlerle, çerçeveyi Bridging-Header dosyasına dahil edemiyorum. Aşağıdaki hatayı alıyorum:

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'

Kontrol ettiğim şeyler:

  1. "Objective-C Uyumluluk Üstbilgisini Kur", "EVET" olarak ayarlanmıştır.
  2. Üstbilgi Arama Yolları, çerçevelerin yolunu içerir.

Eminim ki bir şey özlüyorum, eğer herhangi bir ipucu varsa, bu harika olur.


76
2017-12-16 01:23


Menşei


kütüphane yolunu koymayı unuttum Header Search Paths, bu durumda soru yardımcı oldu: D - Aishwat Singh


Cevaplar:


Bir çözüm bulundu:

  • "Objective-C Bridging Header" ayarı (aka SWIFT_OBJC_BRIDGING_HEADER) Hedef seviyesinde ve Proje seviyesinde DEĞİL olmamalıdır. Proje seviyesindeki ayar değerini sildiğinizden emin olun.

(bana göre, bir Xcode hatası gibi görünüyor, çünkü bunu neden düzeltdiğini bilmiyorum).


64
2018-01-18 06:26



Bu gerçekten garip, aynı hatayı aldım ve proje seviyesinde tanımlanmış bir başlık vardı. Hedef seviyesinde tanımlamış olmama rağmen, üçüncü taraf Çerçevelerin eklenmesini sağlamak için onu Proje seviyesinden kaldırmak zorunda kaldım. Meydan okuyan bir Xcode hatası gibi görünüyor. - Jojodmo
Bunu yaptım, ama işe yaramadı. Xcode kullanarak 6.2. - Marco Almeida
@MarcoAlmeida, test hedefleriniz varsa, "Objective-C Bridging Header" ayarını da kaldırmayı deneyin. Yardım etmeli. - Davlat Mirmanov
Inanılmaz. Teşekkür ederim. - Darren
Selam! Burada aynı sorunu var :( Yukarıda açıklanan yöntemle çözülmemesine rağmen ... - Michael K


Bende aynı sorun var. Tüm ithalatlarımı değiştirdim #import "HMSegmentedControl.h" için #import <HMSegmentedControl/HMSegmentedControl.h> Örneğin.


51
2018-02-12 11:13



Benim için çalışmadı - Hernan Arber
Teşekkürler. Benim için çalıştı. :) - Muhammad Ibrahim
Kocoapodlarla çalışmak için bu gereklidir. Bridging üstbilgisinde hiçbir zaman bir "#portport" abc.h "kullanıcı #import <abc / abc.h> Başparmak yukarıya olarak içe aktarılmaz. - NaXir
Sen tanrı sensin! Bunun için çok teşekkürler. - Alper
Çok teşekkürler çok çalıştı! - Venu Gopal Tewari


Ekledim lib Kullanıcı Başlığı Arama Yollarındaki dizin:

test target settings - user header search path

Benim durumumda lib dizini içerir .a-library dosyası ve bazı başlık dosyaları. Bunlar köprüleme başlığı dosyasına dahil edilmiştir. Ancak, hızlı derleyici onları bulamaz. Sadece eklediğimde ${PROJECT_DIR}/lib Kullanıcı Başlığı Arama Yolu'na test hedefini oluşturdu.

(Mavericks 10.9.5 üzerinde Xcode 6.2 kullanıyorum)


21
2018-04-27 18:02



Bu sorunu, ana hedefin Üstbilgi Arama Yollarına Pods / * ekleyerek çözebilirim. İlginç bir şekilde, Swift çerçevelerini hedefime bağımlılıklar olarak eklemeden önce bu problemi almadım. Xcode 7 beta 6. - bizz84
Bu tam olarak benim için çalıştı. Projemde kütüphane (.a) içeren bir çerçevem ​​var. Kullanıcı Başlığı Arama Yolları'ndaki kitaplığın başlıklarına bir arama yolu oluşturmanız gerekiyordu. - Chris Livdahl
Ayrıca Podlar / kütüphane klasörü almak zorunda kaldı, çok teşekkür ederim! - thibaut noah


Tamamen farklı bir sebeple aynı hata mesajıyla karşılaştık.

Kurmak:

  • Uygulama hedefi, tüm Obj-C kodu
  • Tek bir hızlı test durumu ve uygulama koduna göre bir köprüleme başlığı ile Birim Test hedefi

İkinci hızlı test vakasını eklediğimizde, bir temizlemeden (ya da bir takım arkadaşının makinesinden), ünite test hedefini oluştururken bu hatayı gördük.

Ünite test hedefine kukla Obj-C sınıfı eklenerek giderildi.


18
2018-03-06 23:30



Teşekkür ederim. Bu kesinlikle hiçbir anlam ifade etmese de kesinlikle işe yaradı. - Curtis Steckel
Daha sonra sahte Obj-C sınıfını silebildim. Benim tahminim, bu çözümün bir yan etkisinin test-hedefe özel bir köprüleme başlığının yaratılmasıdır, ki bu da (şüpheliyim) Xcode'un ana bilgisayar uygulamasının köprüleme başlığını görmezden gelmesine neden olur. - clozach
Yukarıdaki ek: Temiz bir yapı yaptıktan sonra derleme sırasında bölümleme hatası 11 almaya başladım. Bazı deneme ve hatalardan sonra, kukla .m dosyasının mevcut olması gerektiği görünüyor, ancak kutu boş ol. Delilik. - clozach
Test hedefime bir kukla nesne sınıfı ekleyerek, onu benim için tamir ettim! - neoneye


Bu bir şekilde benim için hile yaptı:

  • Temiz proje
  • Temiz yapı klasörü
  • Xcode'ı yeniden başlat

4
2017-08-04 15:11



Jenerik cevaplarla gel ve hit'i dene. - Nico
Bu özel vuruş ve deneme hilesi çok daha az çaba gerektirir, bu yüzden diğer çözümleri düşünürken denemek zarar vermemelidir. ;) - Hlung


Onun biraz garip ama sanırım ana hedefin tüm başlıkları yüklemek için test hedefinizin "Kopya Bundle Kaynakları" aşamasına bir kaynak eklemelisiniz. Benim durumumda ekledim main.storyboard ve hatayı halletti.

enter image description here


3
2018-04-28 16:20



Fikrim yok, ama benim için çalıştı. - YSR fan
Storyboard ???? Bu, köprüleme başlığıyla ilgili olarak nasıl ... - Alix


Bu hata Cocoapods CocoaImageHashing kütüphanesi ile kurulum yaparken ortaya çıktı. Sorun, arama yollarının yanlış olmasıydı. Böylece, Hedef Düzeyinde, Yapı Ayarları -> Arama Yolları -> Üstbilgi Arama Yolları'nda, yollar, klasörlerin Başlıkları / Genel olduğunda, varolan olmayan klasörlere karşılık geliyordu, örneğin "$ {PODS_ROOT} / Üstbilgiler / Genel / CocoaImageHashing" / Var olmadı. $ {PODS_ROOT} / CocoaImageHashing yolunu ekledim ve hata kaybolacak.


3
2018-02-23 11:09





Bir sorunum vardı ve bulmak için 2 saat geçirdikten sonra düzeltdim. Benim ortamım aşağıdaki gibidir:

cocoapod 0.39.0

hızlı 2.x

XCode 7.3.1

Adımlar:

  1. proje yolu: project_name / project_name / your_bridging_header.h
  2. Yapı Ayarındaki Swift bölümünde Objective-C Bridging Header aşağıdaki gibi olmalıdır: project_name / your_bridging_header.h
  3. İçinde your_bridging_header.h, tüm bildirimleri değiştirin .h için #ithalat
  4. Kullanılan sınıfta your_3rd_party. Bildirmek your_3rd_party dosyasını içe aktar

2
2018-05-16 10:31



Cevabınız, daha net olması için üçüncü noktaya @jamesthakid cevabını eklemeniz yeterlidir. Benim için çalıştı teşekkürler. - NaXir
Tam olarak ".h'den #import'a tüm bildirimleri değiştir" ile ne demek istiyorsunuz? - Chris Gunawardena


Herkese yardımcı olursa.

Benim durumumda benim obj-c dosya eklenmiş bir referans klasörü (xcode mavi klasörleri) ve başlık onları bulamadı. Sadece dosyadan değil, klasörden, bulucudan xcode'a ve çözüldükten sonra eklendi.


2
2017-07-13 22:44





Bende aynı problem vardı. Benim için sebep, hem Uygulamam hem de Bugünün Eklentisi için aynı köprüleme başlığını kullanıyor olmama neden oldu. Benim Bugün Uzantım, Ayrıştırma'yı içermez, ancak köprüleme başlığında tanımlandığı için onu aramaya çalışıyordu. Bugün Uzantım için yeni bir köprü oluşturma başlığı oluşturdum ve hata ortadan kalktı.


1
2017-12-30 16:14



Benimkiyle aynı konuya benzemiyor. Bugün bir uzatma yok. Benim durumumda, uygulama için bir köprüleme başlığı kullanıyorum ve Parse çerçevesi uygulama bağımlılıklarına dahil edildi. Hata, yalnızca Parse değil, diğer çerçeveler için de oluşur. - Dia Kharrat


Benim çerçevem ​​daha önce çalışıyordu ve aniden çalışmayı durdurdu ve bu cevapların hiçbiri benim için çalışmıyordu. Çerçeveyi Oluşturma Aşamaları> Kütüphanelerle İkili Bağlantıda kaldırdım ve yeniden ekledim. Tekrar çalışmaya başladı.


1
2018-02-19 15:34