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

Не удалось импортировать заголовок заголовка

Я прочитал много вопросов и ответов, которые касаются подобной проблемы, но мне еще предстоит найти решение. Если бы кто-нибудь мог пролить свет, это было бы замечательно.

Я создал проект 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?

4b9b3361

Ответ 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