it-swarm.com.ru

Xcode MyProjectName-Bridging-Header.h не существует

Я хочу начать использовать Swift в своем проекте Objective-C. Поэтому я добавил класс Swift:

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 Compiler - генерация кода-> заголовок сопряжения Objective-C» задано значение MyProjectName-Bridging-Header.h

Что я должен сделать, чтобы решить эту проблему?

Буду признателен за любую оказанную помощь.

Правка: Файл заголовка моста: #if define (__ 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
100
user2408952

Если файл моста создан на том же уровне, что и другие классы, вам может потребоваться добавить относительный путь, как показано на этих рисунках. Обратите внимание, что файл моста создается на том же уровне, что и другие классы: 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

170
James Toomey

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

Для этого требуется следующее значение для параметра: Цели> [Цель вашего приложения]> Настройки сборки> Swift Compiler - Генерация кода> Заголовок моста Objective-C :

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

Обратите внимание, что если ваш проект является модулем Swift (фреймворком), то, как указано в комментариях, вы можете предпочесть:

$(SRCROOT)/$(PROJECT_NAME)/$(Swift_MODULE_NAME)-Bridging-Header.h
67
DonVaughn

Для тех, кто удаляет Bridging Header

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

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

 enter image description here

42
Suragch

Добавить Bridge File в проект Swift.

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

 enter image description here

Шаг 2. Затем появится следующее всплывающее окно  enter image description here

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

СДЕЛАННЫЙ
ВЫ ПОЛУЧИТЕ ФИЛЬТ В ЯЗЫКЕ
СПАСИБО

13
Maninderjit Singh

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

  1. Файл-> Новый-> iOS-> Файл заголовка , дайте имя файлу моста как «yourProjectName-Bridging-Header.h»

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

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

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

12
Vishnuvardhan

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

12
Srinivas Padidala

В 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

11
iOS

Для меня это помогло использовать $(SRCROOT) перед моим путевым заголовком Objective-C.

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

Следующее работало для меня:

  1. Заголовочный файл моста должен быть расположен в главной корневой папке проекта, где находится файл «.xcodeproj». Перейдите в каталог проекта и перетащите заголовок моста в корневой каталог, если он находится внутри любой другой папки.
  2. Исправьте орфографические ошибки в названии заголовка.
  3. Очистить производные данные
  4. Цель -> Настройки сборки -> Swift Compiler: General -> Добавить имя заголовка C Obj.
  5. Очистить и запустить снова.
5
A.G

Следуйте инструкциям ниже:

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

Возможно, эти две вещи помогут решить вашу проблему.

5
iHart

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

Прежде всего удалите файл заголовка Bridging, который создан Xcode. И выберите ваш проект, перейдите> Настройки сборки> Поиск по ключевому слову. Swift Compiler - Генерация кода. Нажмите на заголовок моста Objective-C, удалите этот путь. Теперь почистите свой проект.

Теперь выберите ваш проект> Окно на панели навигации. Выберите Проекты и удалите ваши производные данные оттуда.

Теперь создайте новый файл, выберите Source, а затем выберите Header File и создайте свой заголовочный файл Bridging. Имя файла должно быть вашим projectname-Bridging-Header.h, а затем создать его

Выберите ваш проект, перейдите> Настройки сборки> Поиск по ключевому слову. Swift Compiler - Генерация кода. Нажмите на заголовок моста Objective C и теперь добавьте путь в этот заголовок моста Objective C как projectname-Bridging-Header.h 

Теперь импортируйте ваши классы в заголовочный файл моста, и вы можете легко скомпилировать его.

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

2
Mandeep Singh

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

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