Xcode MyProjectName-Bridging-Header.h nie istnieje

118

Chcę zacząć używać Swift w moim projekcie Objective-C. Dodałem więc klasę swift:

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

I zaimportowałem go do pliku .m:

#import "MyProjectName-Swift.h"

Podczas budowania projektu pojawia się następujący błąd:

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

UWAGA: W sekcji „Ustawienia kompilacji-> Swift Compiler - Generowanie kodu-> Nagłówek Briding Objective-C” ustawiono wartość MyProjectName-Bridging-Header.h

Co mam zrobić, aby rozwiązać ten problem?

Każda pomoc jest bardzo ceniona.

EDYCJA: Plik nagłówka mostkowania: #if zdefiniowany (__ 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
user2408952
źródło
2
MyProjectName-Swift.hi MyProjectName-Bridging-Header.hpracuj w przeciwnych kierunkach. MyProjectName-Swift.hjest dostarczana automatycznie. MyProjectName-Bridging-Header.hjednak jest dostarczana półautomatycznie, tzn. musisz się upewnić, że tam jest. Czy na pewno widzisz MyProjectName-Bridging-Header.hw nawigatorze projektu? Jeśli nie, utwórz i dodaj plik o tej nazwie do swojego projektu. Następnie ponownie sprawdzić, czy ścieżka do niego w ustawieniach kompilacji jest poprawna (powinno zawierać katalog projektu: MyProjectName/MyProjectName-Bridging-Header.h.
Milos
Czy sprawdziłeś, że nazwa modułu produktu nie jest pusta? (Ustawienia kompilacji -> Opakowania -> Nazwa modułu produktu)
Nina,
Nina, tak, nazwa mojego modułu to „MyProjectName”, a nie coś innego
user2408952
milos, myślałem, że Xcode powinien automatycznie wygenerować ten plik briding. Więc nie, nie mam tego pliku w moim projekcie.
user2408952
1
Czy ręcznie określono Bridging-Header.h? Widzę, jest błąd w pisowni „Briding”
Nina,

Odpowiedzi:

191

Jeśli plik mostkujący jest tworzony na tym samym poziomie co inne klasy, może być konieczne dodanie ścieżki względnej, jak pokazano na tych ilustracjach. Zwróć uwagę, że plik pomostowy jest tworzony na tym samym poziomie co inne klasy: wprowadź opis obrazu tutaj

Mam poprawnie wpisaną nazwę w ustawieniach kompilacji, wprowadź opis obrazu tutaj

ale kompilator nie znajduje pliku. wprowadź opis obrazu tutaj

Dlatego jeśli dodam ścieżkę względną z katalogu głównego projektu (czyli dodam ./ProjectName/BridgerFileName.h), wprowadź opis obrazu tutaj

teraz kompiluje się i mogę wywołać metodę w mojej klasie Objective C: wprowadź opis obrazu tutaj

James Toomey
źródło
4
U mnie to wcale nie naprawia. Wygląda na to, że XCode nie reaguje na zaktualizowane pole nagłówka mostkowania celu-C.
Darius Miliauskas
Tęskniłem za znalezieniem, ale w końcu. Dzięki, naprawiliśmy błąd :)
Anders Sørensen
Dobrze udowodnione! I tak, nie zapomnij zrobić tego zarówno w ustawieniach kompilacji projektu, jak iw ustawieniach kompilacji docelowej.
Akash Bhardwaj
72

Odkryłem, że po ręcznym utworzeniu pliku nagłówka mostkowania i wybraniu domyślnej nazwy i lokalizacji, nagłówek mostkowania zostanie umieszczony w katalogu projektu, który znajduje się w katalogu głównym.

Wymaga to następującej wartości ustawienia: Cele> [Cel Twojej aplikacji]> Ustawienia kompilacji> Swift Compiler - Generowanie kodu> Nagłówek mostkowania celu-C :

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

Zauważ, że jeśli Twój projekt jest szybkim modułem (frameworkiem), to, jak wskazano w komentarzach, możesz preferować:

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
Don Vaughn
źródło
2
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hbędzie bardziej powszechne :)
gaussblurinc 29.04.15
1
to powinna być jedyna odpowiedź!
Luca Davanzo
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hdo folderu mojego projektu otrzymuję poprawną ścieżkę, ale /$(PROJECT_NAME)nie dołączam do żądanej ścieżki.
iPeter
Uwaga dla innych, którzy mogą mieć ten sam problem - kiedy kopiowałem / wklejałem komentarz @gaussblurinc, był tam jakiś dziwny znak skopiowany w części „Nagłówek” ciągu. Po skopiowaniu / wklejeniu tego samego ciągu z odpowiedzi działało dobrze.
Adam Johns
46

Dla tych, którzy usuwają nagłówek pomostowy

Poszedłem w drugą stronę, jak większość innych odpowiedzi tutaj. Wcześniej korzystałem z nagłówka mostkującego, ale już go nie potrzebowałem. Po usunięciu go z projektu zacząłem otrzymywać błąd wymieniony w pytaniu. Wykonałem następujące kroki, aby rozwiązać mój problem.

  1. Idź do Cele> [Cel Twojej aplikacji]> Ustawienia kompilacji> Swift Compiler - Ogólne> Nagłówek Objective-C Bridging i usuń ścieżkę. (Dzięki @Donamite za pomysł.) (Możesz po prostu zacząć wpisywać „mostowanie” w polu wyszukiwania, aby go znaleźć.)
  2. Usuń datę pochodną. Wybierz Xcode> Preferencje> Lokalizacje i kliknij szarą strzałkę obok folderu Dane pochodne. Następnie usuń folder projektu.

wprowadź opis obrazu tutaj

Suragch
źródło
22

W Swift 4.1

projektu nie masz bridging-Header.hpliku, ale projekt ma tę ścieżkę. W tym celu musisz usunąć tę ścieżkę ...

Przejdź do targetspliku i wybierz Build Settings, ----> Swift Compiler - Generali usuń plik bridging-Header.h. Wykonaj poniższe zrzuty ekranu ....wprowadź opis obrazu tutaj

Usuń bridging-Header.hplik w Swift Compiler - General

wprowadź opis obrazu tutaj

Teraz masz taki ...

wprowadź opis obrazu tutaj

iOS
źródło
14

Aby dodać plik Bridge w projekcie Swift.

Krok 1. Przejdź do Plik> Dodaj kakao z plikiem celu-C (do celów tymczasowych)

wprowadź opis obrazu tutaj

Krok 2. Następnie pojawi się następujące okienkowprowadź opis obrazu tutaj

Teraz naciśnij przycisk Utwórz nagłówek mostkowania

Sporządzono
DOSTANIESZ Brigde PLIK W zestawie
DZIĘKI

Maninderjit Singh
źródło
13

Oto kroki tworzenia nagłówka Bridging.

  1. Plik-> Nowy-> iOS-> Plik nagłówkowy , podaj nazwę pliku pomostowego, na przykład „nazwaNazwy Projektu-Mostkowanie-Nagłówek.h”

  2. Build-Settings-> Objective-C Bridging Header , po prostu nadaj nazwę pliku nagłówka mostkowania w stylu „ProjectName-Bridging-Header.h”

    UWAGA: Plik nagłówkowy Bridging powinien znajdować się w głównym folderze głównym projektu, w którym znajduje się plik „.xcodeproj”. Jeśli nie, przenieś plik nagłówkowy Bridging do folderu głównego projektu. W ten sposób Xcode może uzyskać dostęp do pliku mostu.

  3. Zbuduj projekt i zaimportuj niezbędne pliki w nagłówku Bridging.

Vishnuvardhan
źródło
12

U mnie pomogło użycie $ (SRCROOT) / $ (PROJECT_NAME) / przed moją ścieżką do pliku nagłówka mostkowania

Srinivas Padidala
źródło
1
To jest prawidłowa odpowiedź. Nie powinno być zaznaczone. Możesz użyć $ (SRCROOT) i $ (PROJECT_NAME) jako przewodnika, aby znaleźć właściwą odpowiedź, ale prawdopodobnie nie możesz skopiować i wkleić każdego rozwiązania.
Hobbes the Tige
Rozwiązanie przedstawione w tej odpowiedzi faktycznie rozwiązało mój problem, dzięki Srinivas Padidala
Wilson
Śmiało. $ (SRCROOT) / $ (PROJECT_NAME) /YourProjectName-Bridging-Header.h działa dla mnie ............ Wklej $ (SRCROOT) / $ (PROJECT_NAME) / tak, jak jest ..... nie dodawaj nazwy swojego projektu zamiast $ (PROJECT_NAME)
ioSana
6

Dla mnie pomogło to użyć $(SRCROOT)przed moją ścieżką nagłówka mostkującego Objective-C.

$(SRCROOT)/swiftLibraries/swiftLibraries-Bridging-Header.h
Antoine
źródło
5

Wykonaj poniższe kroki:

  1. Usuń plik nagłówkowy mostkowania. . . (Może tworzysz ręcznie) i;
  2. Utwórz nowy plik Swift w projekcie Objective-C. . . (Nie importuj, najpierw utwórz)

Może te dwie rzeczy pomogą rozwiązać Twój problem.

iHart
źródło
5

Pracowały dla mnie:

  1. Plik nagłówkowy mostkowania powinien znajdować się w głównym folderze głównym projektu, w którym znajduje się plik „.xcodeproj”. Przejdź do katalogu projektu i przeciągnij i upuść nagłówek mostkowania do katalogu głównego, jeśli znajduje się w jakimkolwiek innym folderze.
  2. Popraw błędy w pisowni w nazwie nagłówka.
  3. Wyczyść dane pochodne
  4. Cel -> Ustawienia kompilacji -> Swift Compiler: Ogólne -> Dodaj nazwę nagłówka Obj C.
  5. Oczyść i uruchom ponownie.
AG
źródło
2

Ręczne tworzenie pliku nagłówkowego mostkowania

Przede wszystkim usuń plik nagłówkowy Bridging, który został utworzony przez Xcode. Następnie wybierz projekt> Ustawienia kompilacji> Wyszukaj słowo kluczowe. Swift Compiler - generowanie kodu. Kliknij Nagłówek mostkowania celu-C, usuń tę ścieżkę. Teraz wyczyść swój projekt.

Teraz wybierz swój projekt> Okno na pasku nawigacyjnym. Wybierz Projekty i usuń stamtąd swoje dane pochodne.

Teraz utwórz nowy plik, wybierz źródło, a następnie wybierz plik nagłówkowy i utwórz plik nagłówkowy Bridging. Nazwa pliku musi być nazwą projektu-Bridging-Header.h, a następnie utworzyć go

Wybierz projekt goto> Build Settings> Search the keyword. Swift Compiler - generowanie kodu. Kliknij nagłówek Objective-C Bridging Header, a teraz dodaj ścieżkę w tym Objective-C Bridging Header, na przykład nazwa projektu-Bridging-Header.h

Teraz zaimportuj swoje klasy do pliku nagłówkowego mostkowania i możesz łatwo skompilować swój kod.

Twój mostkowy plik nagłówkowy wygląda tak, gdy tworzysz plik ręcznie.

Mandeep Singh
źródło
0

Pomogło mi ręczne przeniesienie pliku do ścieżki wymienionej w komunikacie o błędzie. Więc:

  1. Usunąłem plik (przeniesiony do kosza)
  2. Przeniesiono go z kosza do ścieżki w komunikacie o błędzie
  3. Później musiałem też wyczyścić projekt
jreft56
źródło