Получение "файл не найден" в заголовке моста при импорте фреймворков Objective-C в проект Swift
У меня есть проект Swift, для которого я пытаюсь импортировать фреймворки на основе ObjC. Платформа находится в каталоге по пути к проекту и ссылается на проект в Xcode. Он также добавлен в" Link Binary with Libraries "на странице" этапы сборки " проекта.
однако по какой-то причине я не могу включить фреймворк в файл заголовка моста. Я получаю следующую ошибку:
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" имеет значение "да".
- пути поиска заголовка включают путь к фреймворкам.
Я уверен, что я что-то упускаю, так что если у кого-то есть какие-то подсказки, это было бы здорово.
18 ответов:
нашел решение:
- настройка "Objective-C Bridging Header" (aka
SWIFT_OBJC_BRIDGING_HEADER
) должен быть установлен на целевом уровне, а не на уровне проекта. Обязательно удалите значение параметра на уровне проекта.(для меня это похоже на ошибку Xcode, так как я не знаю, почему он ее исправляет).
у меня та же проблема. Я изменил весь свой импорт с
#import "HMSegmentedControl.h"
до#import <HMSegmentedControl/HMSegmentedControl.h>
например.
Я должен был добавить мой
lib
каталог в пути поиска заголовка пользователя:в моем случае содержит
.a
-файл библиотеки и некоторые заголовочные файлы. Они включены в файл заголовка моста. Однако компилятор swift их не найдет. Только когда я добавил${PROJECT_DIR}/lib
к пути поиска заголовка пользователя он построил тестовую цель.(Я использую Xcode 6.2 на Mavericks 10.9.5)
мы столкнулись с тем же сообщением об ошибке, с совершенно другой причиной.
Setup:
- цель приложения, все Obj-C код
- цель модульного теста с одним тестовым случаем swift и заголовком моста, ссылающимся на код приложения
когда мы добавили второй тестовый случай swift, после очистки (или на машине товарища по команде), мы увидели эту ошибку при создании цели модульного теста.
Это было исправлено путем добавления фиктивного класса Obj-C цель единичного теста.
Ну, это немного странно, но я думаю, что вам нужно добавить ресурс в фазу "копировать ресурсы пакета" вашей тестовой цели, чтобы он загрузил все заголовки из вашей основной цели приложения. В моем случае, я добавил
main.storyboard
и он позаботился об ошибке.
Если кому-то помогает.
в моем случае мои файлы obj-c были добавлены в папку ссылок (синие папки в xcode), и заголовок не смог их найти. Просто добавил файлы, а не папку, из finder в xcode и решил.
эта ошибка появилась при установке с Cocoapods библиотеки CocoaImageHashing. Проблема заключалась в том, что пути поиска ошибались. Таким образом, на целевом уровне в настройках сборки -> пути поиска -> пути поиска заголовков пути соответствовали несуществующим папкам, например "${PODS_ROOT}/Headers/Public/CocoaImageHashing", когда заголовки структуры папок/Public/ не существовали. Я добавил путь ${PODS_ROOT} / CocoaImageHashing и ошибка исчезла.
У меня была проблема, и я исправил ее, потратив 2 часа, чтобы найти. Мое окружение, как показано ниже:
cocoapod 0.39.0
swift 2.x
XCode 7.3.1
действия:
- путь к проекту:имя_проекта/имя_проекта / your_bridging_header.h
- в разделе Swift при настройке сборки заголовок Objective-C Bridging должен быть:имя_проекта/your_bridging_header.h
- In your_bridging_header.h измените все заявления от .h до # import
- в классе, который используется your_3rd_party. Объявить import your_3rd_party
У меня была та же проблема. Для меня причиной было то, что я использовал один и тот же заголовок моста как для моего приложения, так и для моего расширения Today. Мое расширение Today не включает синтаксический анализ, но поскольку оно было определено в заголовке моста, оно пыталось его искать. Я создал новый заголовок моста для моего расширения Today, и ошибка исчезла.
моя структура работала раньше и внезапно перестала работать, и ни один из этих ответов не работал для меня. Я удалил фреймворк в Build Phases > Link Binary с библиотеками и повторно добавил его. Снова начал работать.
Я только что продублировал существующую схему и добавил другую конфигурацию в проект. Мне пришлось добавить конфигурацию с тем же именем в проект фреймворка, чтобы он также строился в том же . В противном случае .файл framework не создается и поэтому не может быть импортирован.
я столкнулся с той же проблемой сегодня при попытке использовать pod, написанный на Objective-C в моем проекте Swift, ни одно из вышеперечисленных решений, казалось, не работало.
в подфайле у меня было
use_frameworks!
написано. Комментируя эту строку, а затем работаетpod install
снова решил эту проблему для меня,и ошибка ушла.
(обновлено по состоянию на 27 мая 2017 года)
Xcode 8. Проект Swift-импорт цели C.
Что нужно знать:
- файл заголовка моста должен быть сохранен в папке проекта. (т. е. не сохраняется на том же уровне, что .xcodeproj сохраняется, но вместо этого на один уровень ниже в папки, где сохраняются все ваши файлы swift и objective c). Он все еще может найти файл на верхнем уровне, но это не будет правильно связать и иметь возможность импортировать файлы Objective C в файл заголовка моста
- файл заголовка моста может быть назван как угодно, если это a .заголовочный H-файл
- убедитесь, что путь в настройках сборки > Swift Compiler-General > Objective C Bridging Header правильно указывает на файл заголовка моста, который вы сделали
- важно: если вы все еще получаете "не найден", попробуйте сначала очистить файл заголовка моста и стереть все импортированные вами в настоящее время написали там. Убедитесь, что файл заголовка моста можно найти первым, а затем начните добавлять Objective C imports в этот файл. По какой-то причине он будет отбрасывать ту же ошибку "не найден", даже если она будет найдена, но ей не нравится импорт, который вы пытаетесь по какой-то причине
- вы не должны #import " MyBridgingHeaderFile.h"в любом из ваших файлов objective C. Это также приведет к ошибке "файл не найден"
при использовании cocoapods попробуйте переустановить модули, выполнив следующую команду.
pod install
У меня была похожая проблема и только одно решение сработало для меня. Я пробовал все, что предлагалось, и я знал, что я установил свой заголовок моста в порядке, потому что у меня была другая работа lib.
когда я скопировал библиотеку (перетаскивание) в проект, без Cocoapods, только после этого я мог импортировать заголовки без ошибок.
Я использовал библиотеку facebook / Shimmer.
У меня была аналогичная проблема с стручки. В основном пытаясь запустить мои тесты пользовательского интерфейса, Xcode жаловался на отсутствие стручков. Решение этой проблемы было намного проще, чем любое из описанных выше:
- перейти к файлу проекта (главное не цель)
- нажмите на вкладку" Информация " (самая левая)
- установите правильную конфигурацию pod для цели тестов пользовательского интерфейса (Раздел "конфигурации" прямо в разделе "цель развертывания")
работает!
Я нашел его в потоке: https://github.com/CocoaPods/CocoaPods/issues/2695
звучит немного как ошибка для какао-бобов, но я вижу причины, почему это может быть сложным делом.