Подтвердить что ты не робот

Получение "файла не найдено" в "Мостовой заголовок" при импорте фреймворков Objective-C в проект Swift

У меня есть проект Swift, для которого я пытаюсь импортировать рамки на основе ObjC. Структура находится в каталоге по пути к проекту и ссылается на проект в Xcode. Он также добавлен в "Link Binary with Libraries" на странице "Создание фаз" проекта.

Однако по какой-то причине я не могу включить фреймворк в файл Bridging-Header. Я получаю следующую ошибку:

BridgingHeader.h:5:9: error: 'Parse/Parse.h' file not found
#import <Parse/Parse.h>
        ^
<unknown>:0: error: failed to import bridging header 'BridgingHeader.h'

Вещи, которые я проверил:

  • "Установить заголовок совместимости Objective-C" установлен на "YES".
  • Пути поиска заголовков включают путь к фреймворкам.

Я уверен, что у меня что-то не хватает, поэтому, если у кого есть какие-то подсказки, это будет здорово.

4b9b3361

Ответ 1

Найдено решение:

  • Параметр "Objective-C Bridging Header" (aka SWIFT_OBJC_BRIDGING_HEADER) должен быть установлен на целевом уровне, а НЕ - на уровне проекта. Обязательно удалите значение параметра на уровне проекта.

(для меня это похоже на ошибку Xcode, так как я не знаю, почему он ее исправляет).

Ответ 2

У меня такая же проблема. Я изменил весь свой импорт из #import "HMSegmentedControl.h" до #import <HMSegmentedControl/HMSegmentedControl.h>, например.

Ответ 3

Мне пришлось добавить мой каталог lib в пути поиска заголовка пользователя:

test target settings - user header search path

В моем случае каталог lib содержит файл .a -library и некоторые файлы заголовков. Они включены в файл заголовка моста. Однако быстрый компилятор их не нашел. Только когда я добавил ${PROJECT_DIR}/lib к пути поиска заголовка пользователя, он создал тестовую цель.

(Я использую Xcode 6.2 на Mavericks 10.9.5)

Ответ 4

Мы столкнулись с тем же сообщением об ошибке с совершенно другой причиной.

Настройка:

  • Цель приложения, весь код Obj-C
  • Unit Test с одним быстрым тестовым примером и соединительным заголовком, ссылающимся на код приложения

Когда мы добавили второй тестовый случай, после чистой (или на машине для команды) мы увидели эту ошибку при создании цели unit test.

Он был исправлен добавлением фиктивного класса Obj-C в цель unit test.

Ответ 5

Это как-то помогло мне:

  • Очистить проект
  • Очистить папку сборки
  • Перезапустить Xcode

Ответ 6

Ну, это немного странно, но я думаю, вы должны добавить ресурс на свою фазу "Копирование запаса" вашей тестовой цели, чтобы он загружал все заголовки из главной цели приложения. В моем случае я добавил main.storyboard и позаботился об ошибке.

enter image description here

Ответ 7

Эта ошибка появилась при установке с Cocoapods библиотеки CocoaImageHashing. Проблема заключалась в том, что пути поиска были неправильными. Таким образом, на целевом уровне в настройках сборки → пути поиска → пути поиска заголовков пути соответствовали несуществующим папкам, например "$ {PODS_ROOT}/заголовок/публикация/CocoaImageHashing", когда структура папок Headers/Public/не существует. Я добавил путь ${PODS_ROOT}/CocoaImageHashing, и ошибка исчезла.

Ответ 8

Если кто-то помог.

В моем случае были добавлены мои файлы obj-c, есть справочная папка (синие папки в xcode), и заголовок не смог их найти. Просто добавили файлы, а не папку, из искателя в xcode и решили.

Ответ 9

У меня была та же проблема. Для меня причина в том, что я использовал один и тот же заголовок для моего приложения и моего Today Extension. My Today Extension не включает Parse, но поскольку он был определен в заголовочном заголовке, он пытался его найти. Я создал новый заголовок для моего расширения Today и ошибки.

Ответ 10

У меня была проблема и исправил ее, потратив 2 часа на поиски. Моя среда, как показано ниже:

cocoapod 0.39.0

swift 2.x

XCode 7.3.1

Шаги:

  • путь к проекту: имя_проекта/имя_проекта/your_bridging_header.h
  • В разделе Swift в настройке сборки Objective-C заголовок заголовка должен быть: имя_проекта/your_bridging_header.h
  • В your_bridging_header.h измените все объявления с .h на #import
  • В классе, который используется your_3rd_party. Объявить import your_3rd_party

Ответ 11

Мои рамки работали до этого и внезапно перестали работать, и ни один из этих ответов не работал на меня. Я удалил фреймворк в Build Phases > Link Binary With Libraries и повторно добавил его. Начинал работать снова.

Ответ 12

Я только что продублировал существующую схему и добавил еще одну конфигурацию в проект. Мне пришлось добавить конфигурацию с тем же именем в проект framework, чтобы он также мог быть создан в той же папке DerivedData/($AppName)/Build/Products/($CONFIGURATION_NAME). В противном случае файл .framework не создается и, следовательно, не может быть импортирован.

Ответ 13

Сегодня я столкнулся с тем же вопросом, пытаясь использовать pod, написанный в Objective-C в моем проекте Swift, ни одно из вышеперечисленных решений, похоже, не работает.

В podfile я написал use_frameworks!. Комментируя эту строку, а затем запустив pod install, она снова решила эту проблему для меня, и ошибка исчезла.

Ответ 14

(Обновлено от 27 мая 2017 года)

Xcode 8. Swift Project - импорт Цель C.

Что нужно знать:

  • Бридж файл заголовка ДОЛЖЕН быть сохранен в папке проекта. (то есть не сохраняется на том же уровне, что .xcodeproj сохраняется, но вместо этого один уровень далее вниз в папки, где сохраняются все ваши быстрые и объективные файлы c). Он все равно может найти файл на верхнем уровне, но он не будет правильно связываться и сможет импортировать файлы Objective C в заголовочный файл моста
  • Мостовой заголовочный файл можно назвать чем угодно, если он заголовочный файл .h
  • Убедитесь, что путь в настройках сборки > Swift Compiler - General > Objective C Bridging Header правильно указывает на то, что вы навели заголовочный файл, который вы создали.
  • ВАЖНО: если вы по-прежнему получаете "не найденный", попробуйте сначала очистить заголовочный файл моста и удалить все импортированные вами данные, которые вы там написали. Убедитесь, что первый заголовочный файл можно найти первым, а затем добавьте объектный импорт c в этот файл. По какой-то причине он отбросит ту же ошибку "не найден", даже если она найдена, но по какой-то причине импорт невозможен.
  • Вы не должны #import "MyBridgingHeaderFile.h" в любом из ваших объективных файлов C. Это также приведет к ошибке "файл не найден".

Ответ 15

При использовании cocoapods попробуйте переустановить контейнеры, выполнив следующую команду.

pod install

Ответ 16

У меня была похожая проблема, и для меня было разработано только одно решение. Я попробовал все предложенное, и я знал, что установил заголовок моста нормально, потому что у меня работала какая-то другая библиотека.

Когда я скопировал (перетащил) библиотеку в проект без Cocoapods, только после этого я мог импортировать заголовки без ошибок.

Я использовал библиотеку Facebook/Shimmer.

Ответ 17

У меня была похожая проблема со стручками. В основном пытаясь запустить мои тесты пользовательского интерфейса, XCode жаловался на отсутствие модулей. Решение этой проблемы было намного проще, чем любое из описанных выше:

  1. перейти к файлу проекта (главное не цель)
  2. нажмите на вкладку "Информация" (слева)
  3. установить правильную конфигурацию модуля для цели тестов пользовательского интерфейса (раздел "Конфигурации" в разделе "Цель развертывания")

За работой!

Я нашел это в потоке: https://github.com/CocoaPods/CocoaPods/issues/2695

Звучит как ошибка для cocoa-бобов, но я вижу причины, по которым это может быть сложно.

Ответ 18

Чистый проект, Чистая папка сборки, Перезапустите Xcode. я просто удаляю путь в проекте иди> Настройки сборки> Поиск по ключевому слову. Swift Compiler - General → Objective-C Bridging заголовок работал для меня.

Ответ 19

В моем случае мне просто нужно было выйти из симулятора...