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
ios
objective-c
xcode
swift
user2408952
źródło
źródło
MyProjectName-Swift.h
iMyProjectName-Bridging-Header.h
pracuj w przeciwnych kierunkach.MyProjectName-Swift.h
jest dostarczana automatycznie.MyProjectName-Bridging-Header.h
jednak jest dostarczana półautomatycznie, tzn. musisz się upewnić, że tam jest. Czy na pewno widziszMyProjectName-Bridging-Header.h
w 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
.Odpowiedzi:
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:
Mam poprawnie wpisaną nazwę w ustawieniach kompilacji,
ale kompilator nie znajduje pliku.
Dlatego jeśli dodam ścieżkę względną z katalogu głównego projektu (czyli dodam
./ProjectName/BridgerFileName.h
),teraz kompiluje się i mogę wywołać metodę w mojej klasie Objective C:
źródło
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 :
Zauważ, że jeśli Twój projekt jest szybkim modułem (frameworkiem), to, jak wskazano w komentarzach, możesz preferować:
źródło
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
będzie bardziej powszechne :)$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
do folderu mojego projektu otrzymuję poprawną ścieżkę, ale/$(PROJECT_NAME)
nie dołączam do żądanej ścieżki.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.
źródło
W Swift 4.1
projektu nie masz
bridging-Header.h
pliku, ale projekt ma tę ścieżkę. W tym celu musisz usunąć tę ścieżkę ...Przejdź do
targets
pliku i wybierzBuild Settings
, ---->Swift Compiler - General
i usuń plikbridging-Header.h
. Wykonaj poniższe zrzuty ekranu ....Usuń
bridging-Header.h
plik w Swift Compiler - GeneralTeraz masz taki ...
źródło
Aby dodać plik Bridge w projekcie Swift.
Krok 1. Przejdź do Plik> Dodaj kakao z plikiem celu-C (do celów tymczasowych)
Krok 2. Następnie pojawi się następujące okienko
Teraz naciśnij przycisk Utwórz nagłówek mostkowania
Sporządzono
DOSTANIESZ Brigde PLIK W zestawie
DZIĘKI
źródło
Oto kroki tworzenia nagłówka Bridging.
Plik-> Nowy-> iOS-> Plik nagłówkowy , podaj nazwę pliku pomostowego, na przykład „nazwaNazwy Projektu-Mostkowanie-Nagłówek.h”
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.
Zbuduj projekt i zaimportuj niezbędne pliki w nagłówku Bridging.
źródło
U mnie pomogło użycie $ (SRCROOT) / $ (PROJECT_NAME) / przed moją ścieżką do pliku nagłówka mostkowania
źródło
Dla mnie pomogło to użyć
$(SRCROOT)
przed moją ścieżką nagłówka mostkującego Objective-C.źródło
Wykonaj poniższe kroki:
Może te dwie rzeczy pomogą rozwiązać Twój problem.
źródło
Pracowały dla mnie:
źródło
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.
źródło
Pomogło mi ręczne przeniesienie pliku do ścieżki wymienionej w komunikacie o błędzie. Więc:
źródło