Xcode MyProjectName-Bridging-Header.h не существует
Я хочу начать использовать Swift в моем проекте Objective-C. Поэтому я добавил быстрый класс:
import Foundation
@objc class System : NSObject {
@objc func printSome() {
println("Print line System");
}
}
И импортировал его в файл .m:
#import "MyProjectName-Swift.h"
При создании моего проекта я получаю следующую ошибку:
Bridging header 'PathToMyProject/MyProjectName-Bridging-Header.h' does not exist
ПРИМЕЧАНИЕ. В разделе "Параметры сборки- > Swift-компилятор - Генерация кода → Objective-C Недействующий заголовок" установлен в MyProjectName-Bridging-Header.h
Что мне делать, чтобы решить эту проблему?
Любая помощь очень ценится.
РЕДАКТИРОВАТЬ: файл мостового заголовка: #if определено (__ has_include) && & __has_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
Ответы
Ответ 1
Если файл моста создается на том же уровне, что и другие классы, вам может потребоваться добавить относительный путь, как показывают эти снимки. Обратите внимание, что файл моста создается на том же уровне, что и другие классы:
![enter image description here]()
Я правильно ввел имя в настройках сборки,
![enter image description here]()
но компилятор не находит файл.
![enter image description here]()
Поэтому, если я добавляю относительный путь из корня проекта (т.е. добавляю ./ProjectName/BridgerFileName.h
),
![enter image description here]()
теперь он компилируется, и я могу вызвать метод в моем классе Objective C:
![enter image description here]()
Ответ 2
Я обнаружил, что после создания файла заголовка моста вручную и выбора имени и местоположения по умолчанию заголовок моста будет помещен в каталог проекта, который находится в корневом каталоге.
Для этого требуется следующее значение: Цели > [Цель вашего приложения] > Параметры сборки > Компилятор Swift - Генерация кодa > Objective-C Консоль верхнего уровня:
$(SRCROOT)/$(PROJECT_NAME)/$(PROJECT_NAME)-Bridging-Header.h
Обратите внимание, что если ваш проект является быстрым модулем (каркасом), то, как указано в комментариях, вы можете предпочесть:
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
Ответ 3
Для тех, кто удаляет Bridging Header
Я шел противоположным путем, как и большинство других ответов здесь. Ранее я использовал Bridging Header, но он мне больше не нужен. После того, как я удалил его из своего проекта, я начал получать ошибку, упомянутую в вопросе. Я выполнил следующие шаги, чтобы решить мою проблему.
- Перейдите к Целям> [Цель вашего приложения]> Настройки сборки> Swift Compiler - General> Objective-C Bridging Header и удалите путь. (Спасибо @Donamite за идею.) (Вы можете просто начать набирать слово "мост" в поле поиска, чтобы найти его.)
- Удалить производную дату. Перейдите к Xcode> Предпочтения> Местоположения и щелкните серую стрелку у папки Производных данных. Затем удалите папку вашего проекта.
![enter image description here]()
Ответ 4
Добавление файла Bridge в проект Swift.
Шаг 1. Перейдите в Файл > Добавить Cocoa с Objective-C Файл (для временного назначения)
![введите описание изображения здесь]()
Шаг 2. Затем появится следующее всплывающее окно ![введите описание изображения здесь]()
Теперь нажмите кнопку Create Bridging Header
DONE
ВЫ ПОЛУЧАЕТ БРИГДЕ ФАЙЛ В BUNDLE
БЛАГОДАРЯ
Ответ 5
Для меня это помогло использовать $(SRCROOT)/$(PROJECT_NAME)/перед моим мостом для заголовка моста
Ответ 6
Это шаги для создания заголовка Bridging.
-
File-> New → iOS-> Заголовочный файл, присвойте файлу моста имя как "yourProjectName-Bridging-Header.h".
-
Build-Settings-> Objective-C Bridging Header, просто дайте имя файла заголовка Bridging как "ProjectName-Bridging-Header.h"
ПРИМЕЧАНИЕ. Файл заголовка моста должен быть расположен в главной корневой папке проекта, где находится файл ".xcodeproj". Если нет, переместите заголовочный файл Bridging в корневую папку проекта. Таким образом, Xcode может получить доступ к файлу моста.
-
Создайте проект и импортируйте необходимые файлы в заголовок Bridging.
Ответ 7
В Swift 4.1
В вашем проекте у вас нет файла bridging-Header.h, но ваш проект имеет этот путь. Для этого вам нужно удалить этот путь...
Перейдите к файлу целей и выберите "Настройки сборки", → "Быстрый компилятор" - "Общие" и удалите файл bridging-Header.h. Следуйте приведенным ниже снимкам экрана... ![enter image description here]()
Удалить файл bridging-Header.h в компиляторе Swift - Общие сведения
![enter image description here]()
Теперь вы получили вот так...
![enter image description here]()
Ответ 8
Для меня это помогло использовать $(SRCROOT)
перед моим контуром заголовка Objective-C.
$(SRCROOT)/swiftLibraries/swiftLibraries-Bridging-Header.h
Ответ 9
Выполните следующие шаги:
- Удалить заголовочный файл., (Возможно, вы создаете вручную) и
- Создайте новый файл Swift в Objective-C Project., (Не импортировать, сначала создать его)
Возможно, эти две вещи помогут решить вашу проблему.
Ответ 10
Следующие работали для меня:
- Файл заголовка Bridging должен находиться в основной корневой папке проекта, где находится файл ".xcodeproj". Перейдите в каталог проекта и перетащите заголовок заголовка в корневой каталог, если он находится внутри любой другой папки.
- Корректные орфографические ошибки в заголовке.
- Очистить Производные данные
- Target → Настройки сборки → Компилятор Swift: Общие → Добавить имя заголовка Obj C.
- Очистите и снова запустите.
Ответ 11
Создание файла заголовка моста вручную
Прежде всего удалите заголовочный файл Bridging, который создается Xcode. И выберите свой проект goo > Настройки сборки > Поиск по ключевому слову. Быстрый компилятор - генерация кода. Нажмите Objective-C Bridging Header, удалите этот путь. Теперь очистите проект.
Теперь выберите проект > Окно в панели навигации. Выберите "Проекты" и удалите полученные производные данные.
Теперь создайте новый файл, выберите Источник, а затем выберите Заголовочный файл и создайте свой Мостовой файл заголовка. Имя файла должно быть вашим именем проекта-Bridging-Header.h, а затем создать его
Выберите проект goo > Настройки сборки > Поиск по ключевому слову. Быстрый компилятор - генерация кода. Нажмите Objective-C Bridging Header и добавьте путь в этот заголовок Objective-C Bridging Header, например projectname-Bridging-Header.h
Теперь импортируйте свои классы в мостовой файл заголовка, и вы легко скомпилируете его.
Ваш файл заголовка моста выглядит так, когда вы создаете файл вручную.
Ответ 12
Что помогло мне, так это переместить файл вручную по пути, указанному в сообщении об ошибке. Так:
- Я удалил файл (перенес в корзину)
- Переместил его из корзины в путь в сообщении об ошибке
- Позже мне также пришлось очистить проект