Проблема импорта 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 на Нет, чтобы устранить проблему для меня.