Xcode MyProjectName-Bridging-Header.h non esiste


118

Voglio iniziare a utilizzare Swift nel mio progetto Objective-C. Quindi ho aggiunto una classe rapida:

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

E importato in un file .m:

#import "MyProjectName-Swift.h"

Quando creo il mio progetto ricevo il seguente errore:

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

NOTA: in "Impostazioni build-> Swift Compiler - Generazione codice-> Objective-C Briding Header" è impostato su MyProjectName-Bridging-Header.h

Cosa devo fare per risolvere questo problema?

Ogni aiuto è molto apprezzato.

EDIT: Bridging-Header file: #if defined (__ 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.he MyProjectName-Bridging-Header.hlavorare in direzioni opposte.MyProjectName-Swift.hviene fornito automaticamente. MyProjectName-Bridging-Header.h, tuttavia, viene fornito in modo semiautomatico, ovvero devi assicurarti che sia presente. Quindi, sei sicuro di poterlo vedere MyProjectName-Bridging-Header.hnel navigatore del tuo progetto? In caso contrario, crea e aggiungi un file con quel nome al tuo progetto. Poi verificare ancora una volta che il percorso nelle impostazioni di generazione sia corretta (che dovrebbe includere directory del progetto: MyProjectName/MyProjectName-Bridging-Header.h.
milos

Hai verificato che il nome del modulo del tuo prodotto non sia vuoto? (Impostazioni build -> Confezione -> Nome modulo prodotto)
Nina

Nina, sì, il nome del mio modulo è "MyProjectName" e non qualcosa di ells
user2408952

milos, pensavo che Xcode dovesse generare automaticamente questo file briding. Quindi no, non ho quel file nel mio progetto.
user2408952

1
Hai specificato manualmente Bridging-Header.h? Vedo, c'è un errore di ortografia "Briding"
Nina,

Risposte:


191

Se il file bridging viene creato allo stesso livello delle altre classi, potrebbe essere necessario aggiungere il percorso relativo, come mostrano queste immagini. Notare qui che il file bridging viene creato allo stesso livello delle altre classi: inserisci qui la descrizione dell'immagine

Ho inserito correttamente il nome nelle impostazioni di build, inserisci qui la descrizione dell'immagine

ma il compilatore non trova il file. inserisci qui la descrizione dell'immagine

Pertanto, se aggiungo il percorso relativo dalla radice del progetto (ovvero, aggiungo ./ProjectName/BridgerFileName.h), inserisci qui la descrizione dell'immagine

ora si compila e posso chiamare un metodo nella mia classe Objective C: inserisci qui la descrizione dell'immagine


4
Per me non si risolve affatto. Sembra che XCode non reagisca al campo Intestazione bridging Objective-C aggiornato.
Darius Miliauskas

Ci è voluto molto per trovarlo, ma alla fine. Grazie, corretto l'errore :)
Anders Sørensen

Ben dimostrato! E sì, non dimenticare di farlo sia nelle impostazioni di creazione del progetto che nelle impostazioni di creazione di destinazione.
Akash Bhardwaj

72

Ho scoperto che dopo aver creato manualmente il file di intestazione del bridging e aver scelto il nome e il percorso predefiniti, l'intestazione del bridging verrà posizionata nella directory del progetto, che si trova nella directory principale.

Ciò richiede il seguente valore per l'impostazione: Target> [Your App Target]> Build Settings> Swift Compiler - Code Generation> Objective-C Bridging Header :

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

Nota che se il tuo progetto è un modulo swift (framework) allora, come sottolineato nei commenti, potresti preferire:

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

2
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hsarà più comune :)
gaussblurinc

1
questa dovrebbe essere l'unica risposta!
Luca Davanzo

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hfino alla cartella del mio progetto ottengo il percorso corretto ma l'aggiunta /$(PROJECT_NAME)non mi porta al percorso desiderato.
iPeter

Nota per gli altri che potrebbero avere lo stesso problema: quando ho copiato / incollato il commento @gaussblurinc c'era uno strano carattere copiato nella parte "Intestazione" della stringa. Dopo aver copiato / incollato la stessa stringa dalla risposta, ha funzionato bene.
Adam Johns

46

Per coloro che stanno rimuovendo il Bridging Header

Stavo andando nella direzione opposta rispetto alla maggior parte delle altre risposte qui. In precedenza avevo utilizzato un'intestazione di bridging, ma non ne avevo più bisogno. Dopo averlo eliminato dal mio progetto, ho iniziato a ricevere l'errore menzionato nella domanda. Ho eseguito i seguenti passaggi per risolvere il mio problema.

  1. Vai a Target> [Your App Target]> Build Settings> Swift Compiler - General> Objective-C Bridging Header ed elimina il percorso. (Grazie a @Donamite per l'idea.) (Puoi semplicemente iniziare a digitare "bridging" nella casella di ricerca per trovarlo.)
  2. Elimina la data derivata. Vai a Xcode> Preferenze> Posizioni e fai clic sulla freccia grigia accanto alla cartella Dati derivati. Quindi elimina la cartella del progetto.

inserisci qui la descrizione dell'immagine


22

In Swift 4.1

il tuo progetto che non hai bridging-Header.h file, ma il tuo progetto ha quel percorso. Per questo è necessario eliminare quel percorso ...

Vai al targetsfile e seleziona Build Settings, ----> Swift Compiler - Generaled elimina il file bridging-Header.h. Segui le schermate di seguito ....inserisci qui la descrizione dell'immagine

Elimina il bridging-Header.hfile in Swift Compiler - Generale

inserisci qui la descrizione dell'immagine

Ora sei così ...

inserisci qui la descrizione dell'immagine


14

Per aggiungere Bridge File nel progetto Swift.

Passaggio 1. Vai su File> Aggiungi cacao con file Objective-C (per scopi temporanei)

inserisci qui la descrizione dell'immagine

Passaggio 2. Quindi apparirà il seguente pop-upinserisci qui la descrizione dell'immagine

Ora premi il pulsante Crea intestazione ponte

FATTO
RICEVERAI IL FILE BRIGDE IN BUNDLE
GRAZIE


13

Questi sono i passaggi per creare l'intestazione Bridging.

  1. File-> Nuovo-> iOS-> File di intestazione , dai il nome del file di collegamento come "nomeProgetto-Bridging-Header.h"

  2. Build-Settings-> Objective-C Bridging Header , basta dare il nome del file di intestazione bridging come "ProjectName-Bridging-Header.h"

    NOTA: il file di intestazione del bridging dovrebbe trovarsi nella cartella principale principale del progetto in cui si trova il file ".xcodeproj". In caso contrario, spostare il file di intestazione Bridging nella cartella principale del progetto. In questo modo Xcode può accedere al file bridge.

  3. Compilare il progetto e importare i file necessari nell'intestazione Bridging.


12

Per me ha aiutato a usare $ (SRCROOT) / $ (PROJECT_NAME) / davanti al mio percorso del file di intestazione di bridging


1
Questa è una risposta valida. Non avrebbe dovuto essere segnato. Puoi usare $ (SRCROOT) e $ (PROJECT_NAME) come guida per arrivare alla risposta giusta, ma probabilmente non puoi copiare e incollare ogni soluzione.
Hobbes the Tige

La soluzione presentata in questa risposta ha effettivamente risolto il mio problema, grazie Srinivas Padidala
Wilson

Prova. $ (SRCROOT) / $ (PROJECT_NAME) /YourProjectName-Bridging-Header.h funziona per me ............ Incolla $ (SRCROOT) / $ (PROJECT_NAME) / così com'è ..... non aggiungere il nome del tuo progetto al posto di $ (PROJECT_NAME)
ioSana l'

6

Per me ha aiutato l'uso $(SRCROOT)davanti al mio percorso di intestazione bridging Objective-C.

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

5

Segui i passaggi seguenti:

  1. Elimina il file di intestazione del ponte. . . (Forse crei manualmente) e;
  2. Crea un nuovo file Swift in Objective-C Project. . . (Non importare, prima crearlo)

Forse queste due cose aiuteranno a risolvere il tuo problema.


5

Quanto segue ha funzionato per me:

  1. Il file di intestazione del bridging dovrebbe trovarsi nella cartella principale principale del progetto in cui si trova il file ".xcodeproj". Spostati nella directory del progetto e trascina e rilascia l'intestazione del bridging alla radice se si trova all'interno di un'altra cartella.
  2. Correggi gli errori di ortografia nel nome dell'intestazione.
  3. Cancella dati derivati
  4. Target -> Build Settings -> Swift Compiler: General -> Add Obj C Header name.
  5. Pulisci e corri di nuovo.

2

Creazione manuale del file di intestazione di bridging

Prima di tutto elimina il file di intestazione Bridging che Xcode è stato creato. E seleziona il tuo progetto goto> Impostazioni build> Cerca la parola chiave. Swift Compiler - Generazione di codice. Fare clic su Objective-C Bridging Header, eliminare quel percorso. Ora pulisci il tuo progetto.

Ora seleziona il tuo progetto> Finestra nella barra di navigazione. Seleziona Progetti ed elimina i tuoi dati derivati ​​da lì.

Ora crea un nuovo file, seleziona la sorgente e quindi seleziona il file di intestazione e crea il tuo file di intestazione Bridging. Il nome del file deve essere il nome del progetto -Bridging-Header.h quindi crearlo

Seleziona il tuo progetto goto> Impostazioni build> Cerca la parola chiave. Swift Compiler - Generazione di codice. Fai clic su Objective-C Bridging Header e ora aggiungi il percorso in questo Objective-C Bridging Header come projectname-Bridging-Header.h

Ora importa le tue classi nel file di intestazione di bridging e puoi compilarlo facilmente con il tuo codice.

Il tuo file di intestazione di bridging ha questo aspetto quando crei il tuo file manualmente.


0

Ciò che mi ha aiutato è stato spostare manualmente il file nel percorso indicato in un messaggio di errore. Così:

  1. Ho eliminato il file (spostato nel cestino)
  2. Spostato dal cestino al percorso in un messaggio di errore
  3. In seguito ho anche dovuto pulire il progetto
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.