Не удалось импортировать заголовок заголовка
Я прочитал много вопросов и ответов, которые касаются подобной проблемы, но мне еще предстоит найти решение. Если бы кто-нибудь мог пролить свет, это было бы замечательно.
Я создал проект Swift, и теперь я хочу объединить его с некоторым Objective-C. Мой "не удалось импортировать заголовок моста" возникает только при попытке #import файла Chartboost.h. Итак, до тех пор, пока у меня нет ничего в моем заголовочном файле, Xcode находит его и не дает мне никаких проблем. Но как только я добавлю это:
#import <Chartboost/Chartboost.h>
Я получаю ошибку вместе с 38 другими ошибками, говорящими: "Ошибка Swift Compiler - определение функции здесь не разрешено".
Я правильно импортировал свою фреймворк. И мой путь поиска каркаса правильный. И это только при импорте рамки Chartboost. UIKit и Foundation работают нормально.
Вот что я сделал, чтобы решить проблему. Сначала я создал новый файл Obj-C, а затем нажал "Да, когда Xcode дал мне всплывающее окно с вопросом, может ли он сконфигурировать заголовок моста. созданный" FunFacts-Bridging-Header.h"
Затем я убедился, что Objective-C Путь перемычек между строками был правильным в Swift Compiler - Code Generation.
Я даже поставил очень конкретный путь /Users/me/Desktop/FunFacts/FunFacts -Bridging-Header.h
и он все еще говорит "Не удалось импортировать".
Я также установил Defines Module в "Yes" (потому что я слышал, что это может помочь). И мое имя модуля продукта - FunFacts.
Почему FunFacts-Bridging-Header.h не удается импортировать, когда я пытаюсь добавить #import?
Ответы
Ответ 1
Я выяснил 2 решения!
1) Это не самый красивый способ сделать это, но я копирую и вставляю весь свой код из файла Chartboost.h в свой файл Bridging-Header.h вместо импорта. Это сработало. Но я знал, что есть лучший способ, поэтому я продолжал охотиться...
2) Правильное решение, я считаю, это то, что я сделал дальше. Мой проект (не целевой) Пути поиска Framework был пуст. Итак, я пошел вперед и добавил путь к SDK Chartboost, например:/Users/me/Desktop/Apps/SDK/Chartboost
Теперь он строит и работает без проблем, и мне не нужно было копировать и вставлять все в заголовок моста. Все, что было необходимо, было
#import <Chartboost/Chartboost.h>
Если у кого-то есть аналогичная проблема, просто прочитайте, что я сделал в моем вопросе, а затем следуйте за этим ответом.
Ответ 2
Я ответил на это в другом сообщении: Проблемы интеграции Chartboost с XCode 6.1
ОБЪЯСНЕНИЕ:
Кажется, что некоторые модули и библиотеки не беспокоят импорт базовых фреймворков, поскольку они ожидают, что ваш код уже будет иметь их. Это не работает с Swift по мере изменения способа импорта фреймворков.
Все, что вам нужно сделать, это добавить фреймворки, необходимые в файле заголовка моста.
Ответ:
Это зависит от того, какие ошибки генерирует компилятор.
Если он жалуется на NSObject
, NSString
и т.д.... вам нужно добавить
#import <Foundation/Foundation.h>
в верхней части вашего заголовочного файла.
Если он жалуется на UIView
, UIButton
и т.д., вам нужно добавить #import <UIKit/UIKit.h>
в верхнюю часть вашего заголовочного файла.
Ответ 3
Проблема, подобная твоей, озадачила меня.
Но я нашел решение.
#import <Foundation/Foundation.h>
Вы должны поместить этот код (↑) перед кодом.
Это только мое решение (↓).
#import <Foundation/Foundation.h>
#import <Chartboost/Chartboost.h>
Удачи!
Ответ 4
Вот как я решил (и работает!):
- Создайте файл yourProjectName-Bridging-Header.h в корневом каталоге вашего проекта.
- Включить в этот файл .h классов, которые вы хотите открыть и использовать в своем быстром проекте
- Перейдите в свой проект- > Настройки сборки- > Пути поиска и установите для параметра "Всегда поиск пользовательских путей".
- Задайте "Пути поиска заголовка пользователя" к корневому пути вашего проекта.
Что это.
По-видимому, Xcode пропускает сторонние папки, когда они копируются в ваш проект
Я нахожусь на Xcode 6.3, swift 1.2.
Ответ 5
Ответ на самом деле очень прост.
Убедитесь, что вы добавляете свой путь заголовка моста в SWIFT_OBJC_BRIDGING_HEADER в целевом разделе вместо раздела проекта.
Ответ 6
Имел почти идентичную проблему и нашел решение, которое сработало для меня.
Моя проблема заключалась в том, что заголовок моста не был во ВСЕХ моих целях.
![Заголовок проекта Bridging]()
Это было в моем проекте, но не в моей цели UnitTest. Поэтому я добавил его в свой UITest и UnitTest, и он начал работать без проблем.
![Тестирование цели]()
Ответ 7
Если вы используете CocoaPods, это может сэкономить ваше время.
1) Первое, что вам нужно сделать, это проверить ваш подфайл, это будет выглядеть как:
target 'YourProjTests' do
inherit! :search_paths
end
target 'YourProjUITests' do
inherit! :search_paths
end
2) Откройте конфигурацию baseproj и установите для целевых целей правильный Pods-Proj.debug, см. прикрепленное изображение: ![введите описание изображения здесь]()
Ответ 8
Если у вас есть эти строки, вы соединяете заголовок:
#ifndef Bridging_Header_h
#define Bridging_Header_h
#endif /* Bridging_Header_h */
Просто удалите их, это решит проблемы Foundation и UIKit.
Ответ 9
В одном случае, если import <Chartboost+Extention/Chartboost+Extention.h>
,
Правильный путь - import <Chartboost**_**Extention/Chartboost+Extention.h>
,
Просто потому, что Pod build изменит имя фрейма Chartboost+Extention
на Chartboost_Extention