Xcode MyProjectName-Bridging-Header.h не існує


118

Я хочу почати використовувати 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 - Генерація коду-> Об'єктивний заголовок об'єктивного C" встановлено в MyProjectName-Bridging-Header.h

Що мені робити для вирішення цього питання?

Будь-яка допомога дуже цінується.

EDIT: Файл мостового заголовка: #if визначено (__ 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.hі MyProjectName-Bridging-Header.hпрацювати в протилежних напрямках. MyProjectName-Swift.hнадається автоматично. MyProjectName-Bridging-Header.hпроте надається напівавтоматично, тобто ви повинні переконатися, що він є. Отже, ви впевнені, що бачите MyProjectName-Bridging-Header.hу своєму навігаторі проекту? Якщо ні, створіть і додайте файл із цим іменем до свого проекту. Потім ще раз перевірте , що шлях до нього в параметрах збірки правильно (вона повинна включати в свій каталог проекту: MyProjectName/MyProjectName-Bridging-Header.h.
Мілош

Ви перевірили, чи ім’я модуля продукту не порожнє? (Налаштування збірки -> Упаковка -> Назва модуля продукту)
Ніна,

Ніна, так, назва мого модуля - "MyProjectName", і це щось не
хвилює

Мілос, я думав, що Xcode повинен автоматично створити цей файл нареченої. Так що ні, я не маю цього файлу у своєму проекті.
користувач2408952

1
Ви вказали Bridging-Header.h вручну? Я бачу, є орфографічна помилка "Наречена"
Ніна,

Відповіді:


191

Якщо мостовий файл створений на тому ж рівні, що й інші класи, можливо, вам доведеться додати відносний шлях, як показують ці малюнки. Зауважте тут, що мостиковий файл створюється на тому ж рівні, що й інші класи: введіть тут опис зображення

У мене правильно вказано ім’я в налаштуваннях збірки, введіть тут опис зображення

але компілятор не знаходить файл. введіть тут опис зображення

Тому, якщо я додаю відносний шлях від кореня проекту (тобто додаю ./ProjectName/BridgerFileName.h), введіть тут опис зображення

тепер він компілюється, і я можу викликати метод у своєму класі Objective C: введіть тут опис зображення


4
Для мене це зовсім не виправляється. Схоже, що XCode не реагує на оновлене поле Bridging заголовка Objective-C.
Дарій Міліаускас

Довго чекав, щоб мене знайшли, але нарешті. Дякуємо, виправили помилку :)
Anders Sørensen

Добре продемонстровано! І так, не забудьте зробити це як у налаштуваннях збірки проектів, так і в налаштуваннях цільової збірки.
Акаш Bhardwaj

72

Я виявив, що після створення файлу мостового заголовка вручну та вибору за замовчуванням імені та місця розташування мостовий заголовок буде розміщений у каталозі проекту, який знаходиться під кореневою каталогом.

Для цього потрібне наступне значення: Цілі> [Ціль програми]> Налаштування збірки> Швидкий компілятор - Генерація коду> Об'єктивний заголовок об'єктивного C :

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

Зауважте, що якщо ваш проект є швидким модулем (рамкою), то, як зазначено в коментарях, ви можете:

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

2
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hбуде більш поширеним :)
gaussblurinc

1
це має бути єдиною відповіддю!
Лука Даванцо

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hдо моєї папки проекту я отримую правильний шлях, але додаю, що /$(PROJECT_NAME)не веде мене до потрібного шляху.
iPeter

Примітка для інших, хто може мати таку ж проблему - Коли я копіюю / вставляю коментар @gaussblurinc, у частині рядка "Заголовок" був скопійований якийсь дивний символ. Після копіювання / вставлення тієї самої нитки з відповіді вона спрацювала нормально.
Адам Джонс

46

Для тих, хто знімає мостиковий заголовок

Я йшов навпаки, як і більшість інших відповідей тут. Раніше я використовував мостиковий заголовок, але він мені вже не потрібен. Після того як я видалив його з мого проекту, я почав отримувати помилку, зазначену в питанні. Я вирішив наступні кроки, щоб вирішити свою проблему.

  1. Перейдіть до Цілі> [Ціль програми]> Налаштування збірки> Швидкий компілятор - Загальне> Об'єктивний заголовок об'єктивного C та видаліть шлях. (Завдяки ідеї @Donamite .) (Ви можете просто ввести "мостик" у поле пошуку, щоб знайти його.)
  2. Видаліть отриману дату. Перейдіть до Xcode> Налаштування> Розташування та натисніть сіру стрілку в папці Отримані дані. Потім видаліть папку проекту.

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


22

У Swift 4.1

у вашому проекті у вас немає bridging-Header.hфайлу, але ваш проект має цей шлях. Для цього вам потрібно видалити цей шлях ...

Перейдіть до targetsфайлу та виберіть Build Settings, ----> Swift Compiler - General, і видаліть bridging-Header.h. Дотримуйтесь нижче знімків екрана ....введіть тут опис зображення

Видаліть bridging-Header.hфайл із загального компілятора Swift

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

Тепер у вас вийшло так ...

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


14

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

Крок 1. Перейдіть у меню Файл> Додати какао з файлом Objective-C (для тимчасової мети)

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

Крок 2. Потім з'явиться наступне спливаюче вікновведіть тут опис зображення

Тепер натисніть кнопку Створити кнопку мостового заголовка

Вчинено
ВИ ОТРИМАЙТЕ бруківку FILE в корінці
ЗАВДЯКИ


13

Це кроки зі створення мостового заголовка.

  1. Файл-> Створити-> iOS-> Файл заголовка , наведіть назву мостового файлу як "yourProjectName-Bridging-Header.h"

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

    ПРИМІТКА. Файл заголовка мосту повинен розташовуватися в головній кореневій папці проекту, де розміщений файл ".xcodeproj". Якщо не перемістити файл заголовка Bridging у кореневу папку проекту. Таким чином Xcode може отримати доступ до мостового файлу.

  3. Створіть проект та імпортуйте необхідні файли в заголовок мосту.


12

Для мене це допомогло використовувати $ (SRCROOT) / $ (PROJECT_NAME) / перед моїм мостом шляху до заголовка файлів


1
Це правильна відповідь. Це не повинно було бути позначене. Ви можете використовувати $ (SRCROOT) і $ (PROJECT_NAME) в якості керівництва, щоб дійти до правильної відповіді, але ви, ймовірно, не можете скопіювати та вставити кожне рішення.
Гоббс Тіге

Рішення, представлене у цій відповіді, фактично виправило мою проблему, дякую Шрінівас Падідала
Вілсон

Ідіть до цього. $ (SRCROOT) / $ (PROJECT_NAME) /YourProjectName-Bridging-Header.h працює для мене ............ Вставте $ (SRCROOT) / $ (PROJECT_NAME) / як це ..... не додайте назву проекту замість $ (PROJECT_NAME)
ioSana

6

Для мене це допомогло використовувати $(SRCROOT)перед моїм мостом шляху заголовка Objective-C.

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

5

Виконайте наведені нижче дії:

  1. Видаліть мостовий файл заголовка. . . (Можливо, ви створюєте вручну) і;
  2. Створіть новий файл Swift в Project Objective-C Project. . . (Не імпортуйте, спочатку створіть його)

Можливо, ці дві речі допоможуть вирішити вашу проблему.


5

Для мене працювало наступне:

  1. Файл заголовка мосту повинен розташовуватися в головній кореневій папці проекту, де знаходиться файл ".xcodeproj". Перейдіть до каталогу проектів і перетягніть заголовок мосту в корінь, якщо він знаходиться в будь-якій іншій папці.
  2. Виправте орфографічні помилки в назві заголовка.
  3. Очистити Отримані дані
  4. Мета -> Налаштування збірки -> Компілятор Swift: Загальне -> Додати ім'я заголовка Obj C.
  5. Очистіть і запустіть знову.

2

Створення мостового файлу заголовка вручну

Перш за все, видаліть файл заголовка, який створюється Xcode. І виберіть проект goto> Налаштування побудови> Пошук за ключовим словом. Швидкий компілятор - генерація коду. Натисніть на Об'єктивний заголовок мосту, видаліть цей шлях. Тепер очистіть свій проект.

Тепер виберіть проект> Вікно на панелі навігації. Виберіть Проекти та видаліть отримані дані звідти.

Тепер створіть новий файл, виберіть Джерело, а потім виберіть Файл заголовка та створіть свій файл заголовка «Мости». Ім'я файлу має бути назвою вашого проекту-Bridging-Header.h, а потім створити його

Виберіть проект goto> Налаштування побудови> Пошук за ключовим словом. Швидкий компілятор - генерація коду. Клацніть на заголовку мосту Objective-C і тепер додайте шлях до цього заголовка мосту Objective-C, наприклад, ім'я проекту-Bridging-Header.h

Тепер імпортуйте ваші класи в містковий файл заголовка, і ви зможете легко скласти його код.

Ваш мостовий файл заголовка виглядає так, коли ви створюєте файл вручну.


0

Що мені допомогло - перемістити файл вручну до шляху, зазначеного у повідомленні про помилку. Так:

  1. Я видалив файл (переміщений у кошик)
  2. Перемістив його зі сміття на шлях у повідомленні про помилку
  3. Пізніше мені також довелося прибирати проект
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.