Я хочу начать использовать Swift в своем проекте Objective-C. Итак, я добавил быстрый класс:
import Foundation
@objc class System : NSObject {
@objc func printSome() {
println("Print line System");
}
}
И импортировал его в файл .m:
#import "MyProjectName-Swift.h"
При создании своего проекта я получаю следующую ошибку:
Bridging header 'PathToMyProject/MyProjectName-Bridging-Header.h' does not exist
ПРИМЕЧАНИЕ. В разделе «Параметры сборки-> Компилятор Swift - Генерация кода-> Заголовок объединения Objective-C» установлено значение MyProjectName-Bridging-Header.h
Что мне делать, чтобы решить эту проблему?
Любая помощь очень ценится.
РЕДАКТИРОВАТЬ: файл заголовка моста: #if defined (__ has_include) && __has_include () # include #endif
#include <objc/NSObject.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#if defined(__has_include) && __has_include(<uchar.h>)
# include <uchar.h>
#elif __cplusplus < 201103L
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
#endif
#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if defined(__has_attribute) && __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted)
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
# else
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif
#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if defined(__has_attribute) && __has_attribute(objc_designated_initializer)
# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
# define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#if defined(__has_feature) && __has_feature(modules)
#endif
#pragma clang diagnostic pop
ios
objective-c
xcode
swift
user2408952
источник
источник
MyProjectName-Swift.h
иMyProjectName-Bridging-Header.h
работаем в противоположных направлениях.MyProjectName-Swift.h
предоставляется автоматически.MyProjectName-Bridging-Header.h
однако предоставляется полуавтоматически, т.е. вы должны убедиться, что он есть. Итак, вы уверены, что видитеMyProjectName-Bridging-Header.h
в навигаторе проекта? Если нет, создайте и добавьте файл с этим именем в свой проект. Затем еще раз проверьте , что путь к нему в параметрах сборки правильно (она должна включать в свой каталог проекта:MyProjectName/MyProjectName-Bridging-Header.h
.Ответы:
Если файл моста создается на том же уровне, что и другие классы, вам может потребоваться добавить относительный путь, как показано на этих рисунках. Обратите внимание, что файл моста создается на том же уровне, что и другие классы:
Я правильно ввел имя в настройках сборки,
но компилятор не находит файл.
Поэтому, если я добавляю относительный путь от корня проекта (то есть добавляю
./ProjectName/BridgerFileName.h
),теперь он компилируется, и я могу вызвать метод в моем классе Objective C:
источник
Я обнаружил, что после создания файла заголовка моста вручную и выбора имени и местоположения по умолчанию, заголовок моста будет помещен в каталог проекта, который находится в корневом каталоге.
Для этого требуется следующее значение параметра: Targets> [Your App Target]> Build Settings> Swift Compiler - Code Generation> Objective-C Bridging Header :
Обратите внимание, что если ваш проект представляет собой быстрый модуль (фреймворк), то, как указано в комментариях, вы можете предпочесть:
источник
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
будет чаще :)$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
до папки моего проекта я получаю правильный путь, но добавление/$(PROJECT_NAME)
не приводит меня к желаемому пути.Для тех, кто удаляет мостовой заголовок
Я шел противоположным путем, как и большинство других ответов здесь. Раньше я использовал Bridging Header, но он мне больше не нужен. После того, как я удалил его из своего проекта, я начал получать ошибку, упомянутую в вопросе. Я выполнил следующие шаги, чтобы решить свою проблему.
источник
В Swift 4.1
твой проект у тебя нет
bridging-Header.h
файла, но у вашего проекта есть этот путь. Для этого вам нужно удалить этот путь ...Перейдите к
targets
файлу и выберитеBuild Settings
---->Swift Compiler - General
и удалите файлbridging-Header.h
. Следуйте приведенным ниже снимкам экрана ....Удалите
bridging-Header.h
файл в Swift Compiler - ОбщиеВот и получилось вот так ...
источник
Чтобы добавить файл моста в проект Swift.
Шаг 1. Перейдите в Файл> Добавить какао с файлом Objective-C (для временной цели)
Шаг 2. Затем появится следующее всплывающее окно
Теперь нажмите кнопку Create Bridging Header Button.
СДЕЛАНО
ВЫ ПОЛУЧИТЕ ФАЙЛ BRIGDE УПАКОВКАМИ
СПАСИБО
источник
Это шаги для создания заголовка моста.
File-> New-> iOS-> Header File , укажите имя файла моста, например "yourProjectName-Bridging-Header.h"
Сборка-Настройки-> Заголовок моста Objective-C , просто укажите имя файла заголовка моста как "ProjectName-Bridging-Header.h"
ПРИМЕЧАНИЕ. Заголовочный файл моста должен находиться в главной корневой папке проекта, где находится файл «.xcodeproj». Если нет, переместите файл заголовка Bridging в корневую папку проекта. Таким образом, Xcode сможет получить доступ к файлу моста.
Соберите проект и импортируйте необходимые файлы в заголовок Bridging.
источник
Для меня это помогло использовать $ (SRCROOT) / $ (PROJECT_NAME) / перед моим путем к файлу заголовка моста.
источник
Для меня это помогло использовать
$(SRCROOT)
перед моим путем мостового заголовка Objective-C.источник
Следуйте инструкциям ниже:
Возможно, эти две вещи помогут решить вашу проблему.
источник
У меня сработало следующее:
источник
Создание файла заголовка моста вручную
Прежде всего удалите файл заголовка Bridging, который создается Xcode. И выберите свой проект goto> Build Settings> Search the keyword. Компилятор Swift - Генерация кода. Щелкните заголовок моста Objective-C, удалите этот путь. Теперь очистите свой проект.
Теперь выберите свой проект> Окно на панели навигации. Выберите "Проекты" и удалите оттуда полученные данные.
Теперь создайте новый файл, выберите Источник, а затем выберите файл заголовка и создайте файл заголовка моста. Имя файла должно быть вашим проектом-Bridging-Header.h а затем создайте его.
Выберите свой проект goto> Настройки сборки> Поиск по ключевому слову. Компилятор Swift - Генерация кода. Щелкните заголовок моста Objective-C и теперь добавьте путь в этот заголовок моста Objective-C, например имя проекта-Bridging-Header.h
Теперь импортируйте свои классы в файл заголовка моста, и вы можете легко скомпилировать его в свой код.
Ваш файл заголовка моста выглядит так, когда вы создаете файл вручную.
источник
Мне помогло переместить файл вручную по пути, указанному в сообщении об ошибке. Так:
источник