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, но он мне больше не нужен. После того, как я удалил его из своего проекта, я начал получать ошибку, упомянутую в вопросе. Я выполнил следующие шаги, чтобы решить мою проблему.

  1. Перейдите к Целям> [Цель вашего приложения]> Настройки сборки> Swift Compiler - General> Objective-C Bridging Header и удалите путь. (Спасибо @Donamite за идею.) (Вы можете просто начать набирать слово "мост" в поле поиска, чтобы найти его.)
  2. Удалить производную дату. Перейдите к Xcode> Предпочтения> Местоположения и щелкните серую стрелку у папки Производных данных. Затем удалите папку вашего проекта.

enter image description here

Ответ 4

Добавление файла Bridge в проект Swift.

Шаг 1. Перейдите в Файл > Добавить Cocoa с Objective-C Файл (для временного назначения)

введите описание изображения здесь

Шаг 2. Затем появится следующее всплывающее окно введите описание изображения здесь

Теперь нажмите кнопку Create Bridging Header

DONE
  ВЫ ПОЛУЧАЕТ БРИГДЕ ФАЙЛ В BUNDLE
БЛАГОДАРЯ

Ответ 5

Для меня это помогло использовать $(SRCROOT)/$(PROJECT_NAME)/перед моим мостом для заголовка моста

Ответ 6

Это шаги для создания заголовка Bridging.

  1. File-> New → iOS-> Заголовочный файл, присвойте файлу моста имя как "yourProjectName-Bridging-Header.h".

  2. Build-Settings-> Objective-C Bridging Header, просто дайте имя файла заголовка Bridging как "ProjectName-Bridging-Header.h"

    ПРИМЕЧАНИЕ. Файл заголовка моста должен быть расположен в главной корневой папке проекта, где находится файл ".xcodeproj". Если нет, переместите заголовочный файл Bridging в корневую папку проекта. Таким образом, Xcode может получить доступ к файлу моста.

  3. Создайте проект и импортируйте необходимые файлы в заголовок 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

Что помогло мне, так это переместить файл вручную по пути, указанному в сообщении об ошибке. Так:

  1. Я удалил файл (перенес в корзину)
  2. Переместил его из корзины в путь в сообщении об ошибке
  3. Позже мне также пришлось очистить проект