Xcode MyProjectName-Bridging-Header.h mevcut değil


118

Objective-C projemde Swift kullanmaya başlamak istiyorum. Ben de hızlı bir sınıf ekledim:

import Foundation
@objc class System : NSObject {
    @objc func printSome() {
        println("Print line System");
    }
}

Ve bir .m dosyasına aktardı:

#import "MyProjectName-Swift.h"

Projemi oluştururken aşağıdaki hatayı alıyorum:

Bridging header 'PathToMyProject/MyProjectName-Bridging-Header.h' does not exist

NOT: "Build Settings-> Swift Compiler - Code Generation-> Objective-C Briding Header" altında MyProjectName-Bridging-Header.h olarak ayarlanmıştır.

Bu sorunu çözmek için ne yapmalıyım?

Herhangi bir yardım çok takdir edilmektedir.

DÜZENLEME: Köprüleme-Başlık dosyası: # tanımlıysa (__ has_include) && __has_include () # include #endif

#include <objc/NSObject.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if defined(__has_include) && __has_include(<uchar.h>)
# include <uchar.h>
#elif __cplusplus < 201103L
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
#endif
#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif

#if defined(__has_attribute) && __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) 
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if defined(__has_attribute) && __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"

#if defined(__has_feature) && __has_feature(modules)
#endif

#pragma clang diagnostic pop

2
MyProjectName-Swift.hve MyProjectName-Bridging-Header.hzıt yönlerde çalışın. MyProjectName-Swift.hotomatik olarak sağlanır. MyProjectName-Bridging-Header.hancak yarı otomatik olarak sağlanır, yani orada olduğundan emin olmanız gerekir. Peki, MyProjectName-Bridging-Header.hproje gezgininizde görebileceğinizden emin misiniz ? Değilse, projenize bu isimde bir dosya oluşturun ve ekleyin. : Sonra Yapı Ayarlar kendisine yolun doğru olduğunu tekrar kontrol edin (o proje dizini içermelidir MyProjectName/MyProjectName-Bridging-Header.h.
milos

Ürün modülü adınızın boş olmadığını kontrol ettiniz mi? (Yapım Ayarları -> Paketleme -> Ürün Modülü Adı)
Nina

Nina, evet modül adım "
ProjemAdı

milos, Xcode'un bu köprü dosyasını otomatik olarak oluşturması gerektiğini düşündüm. Yani hayır, projemde o dosya yok.
user2408952

1
Bridging-Header.h dosyasını manuel olarak belirttiniz mi? Görüyorum, 'Briding' yazım hatası var
Nina

Yanıtlar:


191

Köprü dosyası diğer sınıflarla aynı seviyede oluşturulursa, bu resimlerin gösterdiği gibi göreceli yolu eklemeniz gerekebilir. Burada köprüleme dosyasının diğer sınıflarla aynı seviyede oluşturulduğuna dikkat edin: görüntü açıklamasını buraya girin

Yapı Ayarlarında adı doğru bir şekilde girdim, görüntü açıklamasını buraya girin

ancak derleyici dosyayı bulamaz. görüntü açıklamasını buraya girin

Bu nedenle, projenin kökünden göreli yolu eklersem (yani eklerim ./ProjectName/BridgerFileName.h), görüntü açıklamasını buraya girin

şimdi derliyor ve Objective C sınıfımda bir yöntem çağırabilirim: görüntü açıklamasını buraya girin


4
Benim için hiç düzelmiyor. XCode'un güncellenmiş Objective-C Bridging Header alanına tepki vermediği görülüyor.
Darius Miliauskas

Bulmam uzun sürdü ama sonunda. Teşekkürler, hatayı düzeltti :)
Anders Sørensen

İyi gösterildi! Ve evet, bunu hem Proje Oluşturma Ayarlarınızda hem de Hedef Oluşturma ayarlarınızda yapmayı unutmayın.
Akash Bhardwaj

72

Köprüleme başlık dosyasını manuel olarak oluşturduktan ve varsayılan adı ve konumu seçtikten sonra, köprüleme başlığının kök dizinin altındaki proje dizinine yerleştirileceğini gördüm.

Bu, ayar için aşağıdaki değeri gerektirir: Hedefler> [Uygulama Hedefiniz]> Oluşturma Ayarları> Swift Derleyici - Kod Oluşturma> Objective-C Köprüleme Başlığı :

$(SRCROOT)/$(PROJECT_NAME)/$(PROJECT_NAME)-Bridging-Header.h 

Projeniz hızlı bir modül (çerçeve) ise, yorumlarda belirtildiği gibi, aşağıdakileri tercih edebileceğinizi unutmayın:

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h

2
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hdaha yaygın olacak :)
gaussblurinc

1
tek cevap bu olmalı!
Luca DaVanzo

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hproje klasörüme kadar doğru yolu alıyorum ancak /$(PROJECT_NAME)beni istenen yola götürmüyorum.
iPeter

Aynı sorunu yaşayabilecek diğer kişiler için not - @gaussblurinc yorumunu kopyaladığımda / yapıştırdığımda, dizenin 'Başlık' kısmında kopyalanan bazı garip karakterler vardı. Aynı dizeyi yanıttan kopyaladıktan / yapıştırdıktan sonra, iyi çalıştı.
Adam Johns

46

Bridging Header'ı kaldıranlar için

Buradaki diğer cevapların çoğu gibi ben de tam tersi gidiyordum. Daha önce bir Bridging Header kullanıyordum ama artık ona ihtiyacım yoktu. Projemden sildikten sonra soruda bahsedilen hatayı almaya başladım. Sorunumu çözmek için aşağıdaki adımları uyguladım.

  1. Git > Swift Derleyici Hedefler> [Kişisel App Hedef]> Yapı Ayarlar - Genel> Objective-C Bridging Başlık ve yolu silin. ( Fikir için @ Donamite'a teşekkürler .) (Bulmak için arama kutusuna "köprü" yazmaya başlayabilirsiniz.)
  2. Türetilen tarihi silin. Git Xcode> Tercihler> yerler ve Türetilmiş Veri klasöre göre gri oka tıklayın. Ardından proje klasörünüzü silin.

görüntü açıklamasını buraya girin


22

In Swift 4.1

projenizde bridging-Header.hdosyanız yok, ancak projenizde bu yol var. Bunun için o yolu silmeniz gerekiyor ...

targetsDosyaya gidin ve Build Settings----> öğesini seçin Swift Compiler - Generalve bridging-Header.h. Aşağıdaki ekran görüntülerini takip edin ....görüntü açıklamasını buraya girin

bridging-Header.hDosyayı Swift Compiler'da silme - Genel

görüntü açıklamasını buraya girin

Şimdi böyle anladın ...

görüntü açıklamasını buraya girin


14

Swift projesine Köprü Dosyası eklemek için.

Adım 1. Dosya> Objective-C Dosyası ile Kakao Ekle'ye gidin (Geçici Amaç için)

görüntü açıklamasını buraya girin

Adım 2. Ardından aşağıdaki açılır pencere görünecektirgörüntü açıklamasını buraya girin

Şimdi Köprü Başlığı Oluştur Düğmesine basın

YAPILAN
SİZE Köprüsü DOSYA OLARAK PAKET KAZANACAK
TEŞEKKÜRLER


13

Bunlar, Bridging başlığı oluşturma adımlarıdır.

  1. File-> New-> iOS-> Header File , "yourProjectName-Bridging-Header.h" gibi köprüleme dosyası adını verin

  2. Build-Settings-> Objective-C Bridging Header , Köprüleme başlığı dosya adını "ProjectName-Bridging-Header.h" gibi verin

    NOT: Köprüleme başlık dosyası, ".xcodeproj" dosyasının bulunduğu projenin ana kök klasöründe yer almalıdır. Bridging başlık dosyasını projenin kök klasörüne taşımazsanız. Bu şekilde Xcode köprü dosyasına erişebilir.

  3. Projeyi oluşturun ve gerekli dosyaları Bridging başlığına içe aktarın.


12

Benim için köprü başlık dosyası yolumun önünde $ (SRCROOT) / $ (PROJECT_NAME) / kullanılmasına yardımcı oldu


1
Bu geçerli bir cevaptır. İşaretlenmemesi gerekirdi. Doğru cevaba ulaşmak için kılavuz olarak $ (SRCROOT) ve $ (PROJECT_NAME) kullanabilirsiniz, ancak muhtemelen her çözümü kopyalayıp yapıştıramazsınız.
Hobbes the Tige

Bu cevapta sunulan çözüm aslında sorunumu çözdü, teşekkürler Srinivas Padidala
Wilson

Bunun için gidin. $ (SRCROOT) / $ (PROJECT_NAME) /YourProjectName-Bridging-Header.h benim için çalışıyor ............ $ (SRCROOT) / $ (PROJECT_NAME) / olduğu gibi yapıştırın ..... $ (PROJECT_NAME) yerine Proje adınızı eklemeyin
ioSana

6

$(SRCROOT)Benim için Objective-C köprüleme başlık yolumun önünde kullanmaya yardımcı oldu .

$(SRCROOT)/swiftLibraries/swiftLibraries-Bridging-Header.h

5

Aşağıdaki adımları takip et:

  1. Köprüleme başlık dosyasını silin. . . (Belki manuel olarak yaratırsınız) ve;
  2. Objective-C Project'te yeni Swift dosyası oluşturun. . . (İçe aktarmayın, önce oluşturun)

Belki bu iki şey sorununuzu çözmenize yardımcı olur.


5

Aşağıdakiler benim için çalıştı:

  1. Köprüleme başlık dosyası, ".xcodeproj" dosyasının bulunduğu projenin ana kök klasöründe yer almalıdır. Proje dizinine gidin ve başka bir klasörün içindeyse köprü başlığını köke sürükleyip bırakın.
  2. Başlık adındaki yazım hatalarını düzeltin.
  3. Türetilmiş verileri temizle
  4. Hedef -> Yapı Ayarları -> Swift Derleyici: Genel -> Obj C Başlık adı ekle.
  5. Temizleyin ve tekrar çalıştırın.

2

Köprüleme Üstbilgi Dosyasını Manuel Olarak Oluşturma

Öncelikle Xcode'un oluşturulduğu Bridging başlık dosyasını silin. Ve projenizi seçin> Yapı Ayarları> Anahtar kelimeyi arayın. Swift Derleyici - Kod Üretimi. Objective-C Bridging Header'a tıklayın, bu yolu silin. Şimdi Projenizi temizleyin.

Şimdi gezinti çubuğunda projenizi> Pencere'yi seçin. Projeler'i seçin ve türetilmiş verilerinizi buradan silin.

Şimdi yeni bir dosya oluşturun, Kaynağı seçin ve ardından Başlık Dosyasını seçin ve Bridging başlık dosyanızı oluşturun. Dosya adı proje adınız-Bridging-Header.h olmalıdır ve ardından onu oluşturun

Projenizi seçin> Yapı Ayarları> Anahtar kelimeyi arayın. Swift Derleyici - Kod Üretimi. Objective-C Bridging Header'a tıklayın ve şimdi bu Objective-C Bridging Header'a projectname-Bridging-Header.h gibi yolu ekleyin.

Şimdi sınıflarınızı köprü başlık dosyasına aktarın ve kodunuzu kolayca derleyebilirsiniz.

Köprü başlık dosyanız, dosyanızı manuel olarak oluştururken böyle görünür.


0

Bana yardımcı olan şey, dosyayı manuel olarak bir hata mesajında ​​belirtilen yola taşımaktı. Yani:

  1. Dosyayı sildim (çöp kutusuna taşındım)
  2. Bir hata mesajında ​​çöp kutusundan yola taşıdı
  3. Daha sonra projeyi de temizlemek zorunda kaldım
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.