Проблема импорта заголовка Swift Bridging
Следуя инструкциям, я создал соединительный заголовок и добавил в свой проект. К сожалению, произошла следующая ошибка:
: 0: ошибка: не удалось импортировать заголовок Objective-C '--- путь - к --- заголовку /....h'
В настройках сборки я добавил строку пути поиска заголовка в местоположение заголовка моста, но ничего не помогло.
Кто-нибудь сталкивался с этой проблемой?
19 ответов
Будьте осторожны, чтобы добавить файл в папку, на которую жалуется ваша ошибка! Я сделал ту же ошибку, если вы создадите файл из Xcode, он перейдет в папку: Project->Project->Header.h
И Xcode ищет Project-> Header.h
Это означает, что вам нужно поместить файл в папку вашего проекта (ProjectName->ProjectNameFolder)!
Надеюсь, это поможет;)
ОБНОВЛЕНО: Я не уверен, что понял, что вы имеете в виду, но попробуйте это, чтобы решить вашу проблему:
1. Удалите все файлы мостов, которые вы создали до сих пор.
2. Выберите основную папку проекта и нажмите новый файл->iOS-> Файл заголовка.
3. Запишите ваш импорт в созданный заголовочный файл.
4. Выберите проект в Xcode->Build Settings, введите в поле поиска: bridging и введите в ключ SWIFT_OBJC_BRIDGING_HEADER имя вашего файла заголовка или путь к нему!
Если вы выполните эти шаги, ваш заголовочный файл будет создан в правильном месте!
: D Надеюсь, это поможет!
В моем случае это была ошибка из-за циклической ссылки. У меня был класс, импортированный в заголовок моста, и файл заголовка этого класса импортировал заголовок swift (<MODULE_NAME>-Swift.h
). Я делал это, потому что в заголовочном файле Obj-C мне нужно было использовать класс, который был объявлен в Swift, решение было просто использовать @class
декларативный.
Таким образом, в основном ошибка говорит "Не удалось импортировать заголовок моста", ошибка выше <MODULE_NAME>-Swift.h
файл не найден, выше была ошибка, указывающая на определенный файл заголовка Obj-C (а именно, View Controller).
Осматривая этот файл, я заметил, что в заголовке объявлен файл -Swift.h. Перемещение этого импорта в реализацию решило проблему. Итак, мне нужно было использовать объект, давайте назовем его MyObject
определяется в Swift, поэтому я просто изменил заголовок, чтобы сказать
@class MyObject;
Найдите путь по адресу:
Настройки сборки / Быстрый компилятор - Генерация кода / Заголовок моста Objective-C
и удалите этот файл. Тогда ты должен быть в порядке.
Это, вероятно, затронет лишь небольшой процент людей, но в моем случае в моем проекте использовались CocoaPods, и у одного из этих модулей была субспекция со своими собственными CocoaPods. Решение состояло в том, чтобы использовать импорт под полным углом для ссылки на любые файлы в субподах.
#import <HexColors/HexColor.h>
Скорее, чем
#import "HexColor.h"
Удалив исправленные производные данные, я заметил, что даже если я извлекаю из старого коммита, возникает та же проблема.
Вы можете получить эту опцию формы Window-> Projects .
"нам нужно указать Xcode, где искать файлы заголовков, которые мы перечисляем в нашем соединительном заголовке. Найдите раздел" Пути поиска "и измените настройку уровня проекта для путей поиска заголовка пользователя, добавив рекурсивную запись для" Стручков ". каталог: Pods /** " http://swiftalicio.us/2014/11/using-cocoapods-from-swift/
Для меня это было потому, что я забыл добавить его в настройки сборки цели.
Я также столкнулся с этой проблемой, и, к сожалению, это просто ошибка в SDK + Xcode. Я поговорил с инженером на WWDC, об этом и нескольких других проблемах, которые у меня были с CloudKit. Эти ошибки будут устранены в следующем семени Xcode.
Это забавная часть об использовании бета-версии программного обеспечения.
Для тех, кто испытывает затруднения, чтобы добавить быстрый класс в проект target-c. это то, что работает для меня:
- создать новый файл swift. это заставит xcode запросить, хотите ли вы, чтобы xcode создал все настройки для проекта mix swift -jective-c, включая brigde-header.h. нажмите да.
- Теперь добавьте ваши существующие файлы swift, которые вы хотите использовать в своем проекте.
- в файле реализации вы собираетесь использовать класс swift add: #import "YOURPROJECTNAME-swift.h" . этот файл xcode создаю для вас. если ваш проект xcode - myProject, тогда "myProject-swift.h"
и это все. Теперь создайте Swift-класс в вашем коде, как это было с целью-c.
Я импортировал некоторые файлы из заголовочных файлов bridgin из cocoapods не должным образом.
Вместо импорта
#import <SomeCocoaPod/SomeCocoaPod.h>
я написал
#import "SomeCocoaPod.h"
И это была моя ОГРОМНАЯ ошибка
Добавьте временный файл Objective-C в ваш проект. Вы можете дать ему любое имя.
Выберите Да, чтобы настроить заголовок моста Objective C.
Удалите временный файл Objective-C, который вы только что создали.
В только что созданном файле projectName-Bridging-Header.h добавьте следующую строку:
'#import
Отредактируйте файл AppDelegate.swift:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
GMSServices.provideAPIKey("AIza....") //iOS API key
return true
}
Перейдите по ссылке для полного образца
Для меня это не было выбора "Копировать элементы при необходимости" в пути назначения при добавлении фреймворка. Просто заново добавьте фреймворк с выбранной опцией.
Я столкнулся с такой ошибкой, когда добавлял расширение Today в свое приложение. Цель сборки для расширения была сгенерирована с тем же именем заголовка моста, что и цель сборки моего приложения. Это привело к ошибке, потому что расширение не видит файлы, перечисленные в заголовке моста моего приложения.
Вам нужно только удалить или изменить имя соединительного заголовка для расширения, и все будет в порядке.
Надеюсь, что это поможет.
У меня та же проблема по другой причине, вот мой случай, когда я строю проект, которому нужно включить слайд-меню, я использую библиотеку SWRevealViewController, чтобы приблизиться к этому
Когда я импортирую библиотечные файлы, я добавляю подпапку (SWRevealViewController) в разделе "Вспомогательные файлы для файлов.h && .m", она выдает две ошибки, не может импортировать мост и SWRevealViewController.h не найдена.
Как я это исправлю
когда я перемещаю файлы непосредственно во вспомогательные файлы (удаляем подпапку), SWRevealViewController.m автоматически добавляется в этапы сборки -> Компилировать источники и проблема исчезает
После первых нескольких дней борьбы мне, наконец, удалось успешно интегрировать регистрацию в Facebook в мое приложение для iOS. Вот шаги (я предполагаю, что вы уже установили Facebook SDK v4.1 или выше на ваших машинах):
- Добавьте фреймворки Facebook - FBSDKCoreKit,FBSDKLoginKit под ваш проект.
- Не вносите изменений в настройки сборки, так как FB SDK v4.1 и более поздних версий больше не нужно соединять заголовочные файлы.
- Импортируйте FBSDKCorekit, FBSDKLoginKit в файлы ViewController.swift, AppDelegate.swift
Добавьте информацию в список, как упомянуто здесь
Создайте свое приложение. И вау! нет ошибок времени компиляции.
Имел подобную проблему, которая не могла быть решена любым решением выше. Мой проект использует 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 на No, и исходная ошибка исчезла.
Я фактически создал пустой файл OSX Source Objective C в рамках проекта (где находятся все мои файлы swift).
Я добавил импорт, а затем удалил файл .m.
Среди других исправлений у меня была ошибка, возникающая при попытке выполнить Product->Archive. Оказывается, у меня было это:
Objective-C Bridging Header
Debug (had the value)
Release (had the value)
Any architecture | Any SDK (this was blank - problem here!)
После установки последней строки все заработало.
Установите Precompile Bridging Header в No, чтобы решить проблему для меня.