Проблема импорта Swift Bridging Header

Следуя инструкциям, я создал заголовок моста и добавлен в мой проект. К сожалению, произошла следующая ошибка:

: 0: ошибка: не удалось импортировать заголовок Objective-C '--- path - to --- header/.... h'

Снимок экрана 1

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

Кто-нибудь испытал эту проблему?

Ответ 1

Будьте внимательны, чтобы добавить файл в папку, в которую исправлялась ваша ошибка! Я сделал ту же ошибку, если вы создадите файл из Xcode, он перейдет в папку: Project- > Project- > Header.h

И Xcode ищет Project- > Header.h

Это означает, что вам нужно поместить файл в папку проекта (ProjectName- > ProjectNameFolder)!

Надеюсь, что помогает;)

ОБНОВЛЕНО: Я не уверен, получил ли я то, что вы имеете в виду, но попробуйте это, чтобы решить вашу проблему:
1. Удалите все ваши файлы мостов, которые вы создали до сих пор.
2. Выберите главную папку проекта и нажмите новый файл → iOS- > Заголовок.
3. Напишите свой импорт в созданном файле заголовка.
4. Выберите проект внутри Xcode- > Build Settings, введите поле поиска: перемычка и введите ключ SWIFT_OBJC_BRIDGING_HEADER имя вашего файла заголовка или путь к нему!

Если вы выполните следующие действия, ваш файл заголовка будет создан в правильном месте!

: D Надеюсь, что это поможет!

Ответ 2

В моем случае это была ошибка в результате циклической ссылки. У меня был класс, импортированный в заголовок моста, и этот заголовочный файл этого класса импортировал заголовок swift (<MODULE_NAME>-Swift.h). Я делал это, потому что в заголовочном файле Obj-C мне нужно было использовать класс, объявленный в Swift, решение состояло в том, чтобы просто использовать декларацию @class.

Таким образом, в основном ошибка указала: "Не удалось импортировать заголовок моста", ошибка над ним указала, что файл <MODULE_NAME>-Swift.h не найден, выше это была ошибка, указывающая на конкретный файл заголовка Obj-C (а именно контроллер просмотра).

Проверяя этот файл, я заметил, что в заголовке был объявлен -Swift.h. Перемещение этого импорта в реализацию разрешило проблему. Поэтому мне нужно было использовать объект, позвонил ему MyObject, определенный в Swift, поэтому я просто изменил заголовок, чтобы сказать

@class MyObject;

Ответ 3

Найдите путь по адресу:

Настройки сборки/Быстрое создание кода компилятора / Objective-C Заголовок заголовка

и удалите этот файл. Тогда вы должны быть в порядке.

Ответ 4

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

#import <HexColors/HexColor.h>

Вместо

#import "HexColor.h"

Ответ 5

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

Вы можете получить эту опционную форму Window- > Projects.

Ответ 6

Для меня это было потому, что я забыл добавить его в Target Build Settings.

enter image description here

Ответ 7

"нам нужно указать Xcode, где искать файлы заголовков перечислены в нашем заголовке моста. Найдите раздел" Пути поиска ", и измените настройку уровня проекта для Пути поиска заголовка пользователя, добавив рекурсивную запись для каталога" Pods: Pods/ ** " http://swiftalicio.us/2014/11/using-cocoapods-from-swift/

Ответ 8

У меня также возникла эта проблема, и, к сожалению, это просто ошибка в SDK + Xcode. Я поговорил с инженером в WWDC, об этом и о нескольких других проблемах, с которыми я столкнулся с CloudKit. Эти ошибки будут рассмотрены в следующем семестре Xcode.

Это забавная часть об использовании бета-версии.

Ответ 9

для других, у кого есть проблемы, чтобы добавить быстрый класс в проект objective-c. это то, что работает для меня:

  • создать новый быстрый файл. это заставит xcode запросить, хотите ли вы, чтобы xcode создавал все настройки для проекта mix swift- objective-c, включая brigde-header.h для вас. нажмите "Да".
  • теперь добавьте существующие быстрые файлы, которые вы хотите использовать в своем проекте.
  • в файле реализации, который вы собираетесь использовать, добавьте быстрый класс: #import "YOURPROJECTNAME-swift.h". этот файл xcode создается для вас. если ваш проект xcode - myProject, тогда "myProject-swift.h"

и что он. теперь создайте быстрый код в вашем коде, например, objective-c.

Ответ 10

Добавьте временный файл Objective-C к вашему проекту. Вы можете дать ему любое имя, которое вам нравится.

Выберите "Да", чтобы настроить заголовок моста Objective-C.

Удалите временный файл Objective-C, который вы только что создали.

В только что созданном файле projectName-Bridging-Header.h добавьте эту строку:

'# import < GoogleMaps/GoogleMaps.h > '

Отредактируйте файл AppDelegate.swift:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    GMSServices.provideAPIKey("AIza....") //iOS API key

    return true
}

Следуйте ссылке для полного образца

Ответ 11

Для меня он не выбирал "Копировать элементы, если это необходимо" в пути назначения, добавляя фреймворк. Просто добавьте фреймворк с этой опцией.

Ответ 12

После первых нескольких дней борьбы мне наконец удалось успешно интегрировать подписку Facebook в мое приложение iOS. Вот шаги (я предполагаю, что вы уже установили Facebook SDK v4.1 или выше в своих машинах):

  • Добавьте фреймворки Facebook - FBSDKCoreKit, FBSDKLoginKit в рамках вашего проекта.
  • Не изменяйте настройки сборки, так как FB SDK v4.1 и выше больше не нуждаются в перекрестке файлов заголовков.
  • Импортировать FBSDKCorekit, FBSDKLoginKit в файлы ViewController.swift, AppDelegate.swift.
  • Добавить информацию в pList, как указано здесь

  • Создайте приложение. И wohoo! нет ошибок времени компиляции.

Ответ 13

У меня такая же проблема по разной причине, вот мой случай Я строю проект, для которого нужно включить меню слайдов, я использую SWRevealViewController lib, чтобы подойти к этому

когда я импортирую файлы библиотеки, я добавляю подпапку (SWRevealViewController) в разделе Файлы поддержки для .h && &.m, он запускает две ошибки, мотив импорта и SWRevealViewController.h не найден.

Как я его исправить

когда я перемещаю файлы в Supporting Files напрямую (удаляю подпапку), SWRevealViewController.m автоматически добавляется в Build Phases → Compile Sources, и проблема пропадает

введите описание изображения здесь

Ответ 14

Я испытал такую ​​ошибку, когда добавлял расширение "Сегодня" для своего приложения. Цель сборки для расширения была сгенерирована с тем же именем заголовка моста, что и моя цель построения приложения. Это привело к ошибке, потому что расширение не видит файлы, перечисленные в заголовочном заголовке моего приложения.

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

Надеюсь, что это поможет.

Ответ 15

На самом деле я создал пустой файл OSX Source Objective C в проекте (где все мои быстрые файлы).

Я добавил импорт, а затем удалил файл .m.

Ответ 16

Среди других исправлений у меня возникла ошибка, когда я пытался сделать Product- > Archive. Оказывается, у меня было это:

Objective-C Bridging Header
  Debug (had the value)
  Release (had the value)
    Any architecture | Any SDK (this was blank - problem here!)

После установки его в этой последней строке он работал.

Ответ 17

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

Вместо импорта

#import <SomeCocoaPod/SomeCocoaPod.h>

Я написал

#import "SomeCocoaPod.h"

И это была моя БОЛЬШАЯ ошибка

Ответ 18

Имел аналогичную проблему, которая не могла быть решена никаким решением выше. Мой проект использует CocoaPods. Я заметил, что вместе с ошибками я получил предупреждение со следующим сообщением:

Uncategorized: Target 'Pods' of project 'Pods' was rejected as an implicit dependency for 'Pods.framework' because its architectures 'arm64' didn't contain all required architectures 'armv7 arm64'

введите описание изображения здесь

Таким образом, решение было довольно простым. Для проекта Pods измените флаг Build Active Architecture Only на Нет и исходная ошибка исчезла.

Ответ 19

Установите Precompile Bridging Header на Нет, чтобы устранить проблему для меня.