Заголовок моста Objective-C для фреймворков

Я сделал фреймворк, для которого требуется фреймворк sqlite3. Как добавить заголовок моста Objective-C для моего фреймворка, который импортирует sqlite3 в мой файл Swift?

У меня уже есть заголовочный файл моста для моего проекта, но не для моего фреймворка.


person Gustaf Rosenblad    schedule 19.07.2014    source источник


Ответы (2)


Я нашел настройку Objective-C Bridging Header в настройках целевой сборки. Он был скрыт по умолчанию. Отметьте все вместо основного.

В последних версиях Xcode это решение выдавало ошибку Using bridging headers with framework targets is unsupported.

Обходной путь, который я использовал, заключается в том, чтобы сделать C-заголовок общедоступным в файловом инспекторе и импортировать его в MyFramework.h, как в этом примере:

#import <MyFramework/MyObjectiveC.h>

Как изменить C-заголовок на общедоступный

Откройте C-заголовок и просмотрите инспектор, щелкнув в правом верхнем углу. Чтобы открыть инспектор файлов, щелкните значок файла в правом верхнем углу.

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

person Gustaf Rosenblad    schedule 19.07.2014
comment
Не могли бы вы уточнить, как сделать C-заголовок общедоступным в файловом инспекторе? - person Ravi; 30.09.2015
comment
Привет Густав, спасибо за быстрый ответ. Я пытаюсь импортировать стороннюю структуру Objective C в свою среду Swift, и я не получаю такой ошибки модуля. Я могу использовать эту структуру из кода objc, но не из быстрого кода в структуре, которую я создаю. Я знаю, что это может быть другой вопрос. - person Ravi; 30.09.2015
comment
Извините @Ravi, но я не могу вам помочь. Вы можете попробовать проверить, что фреймворк связан с вашей целью, я больше ничего не знаю, что могло бы помочь. - person Gustaf Rosenblad; 30.09.2015
comment
@GustafRosenblad нет проблем и спасибо за ответ. Поскольку я могу использовать инфраструктуру ObjC из файла ObjC .m, меня пока это устраивает. - person Ravi; 01.10.2015
comment
Если установить общедоступный C-заголовок, весь класс Objective-C будет виден за пределами фреймворка. Но я не хочу, чтобы эти классы Objective-C были раскрыты, что мне делать? - person DàChún; 10.10.2017
comment
@ User9527 Верно. У меня была такая же проблема, но я, к сожалению, не нашел решения. - person Gustaf Rosenblad; 10.10.2017
comment
Я нашел решение для этого. @GustafRosenblad, вам нужно создать xxx.modulemap, установить путь импорта, чтобы импортировать карту модулей. Файл modulemap должен выглядеть так: module OCModule [system] { header System Services/SystemServices.h header networking/Reachability/Reachability.h export * } - person DàChún; 10.10.2017

просто импортируйте свою структуру sqlite3 в файл моста Objective-C. Затем вы автоматически можете использовать его в Swift.

Документы Apple:

Взаимодействие — это возможность взаимодействовать между Swift и Objective-C в любом направлении, позволяя вам получать доступ и использовать фрагменты кода, написанные на одном языке, в файле на другом языке. Когда вы начнете интегрировать Swift в свой рабочий процесс разработки приложений, полезно понять, как вы можете использовать совместимость, чтобы переопределить, улучшить и улучшить способ написания приложений Cocoa. Одним из важных аспектов функциональной совместимости является то, что он позволяет вам работать с API-интерфейсами Objective-C при написании кода Swift. После импорта фреймворка Objective-C вы можете создавать из него экземпляры классов и взаимодействовать с ними, используя собственный синтаксис Swift.

РЕДАКТИРОВАНИЕ. Вы даже можете импортировать фреймворк Objective-C, фреймворк Swift или фреймворк на разных языках прямо в свой файл swift с помощью

import yourFramework

Документы Apple:

Импорт внешних фреймворков

Вы можете импортировать внешние фреймворки с чистой кодовой базой Objective-C, чистой кодовой базой Swift или смешанной кодовой базой. Процесс импорта внешней платформы одинаков, независимо от того, написана ли она на одном языке или содержит файлы на обоих языках. Когда вы импортируете внешнюю платформу, убедитесь, что для параметра сборки Defines Module для импортируемой платформы установлено значение «Да».

Вы можете импортировать фреймворк в любой файл Swift в другой цели, используя следующий синтаксис:

СВИФТ

import FrameworkName

Вы можете импортировать фреймворк в любой файл Objective-C .m в другой цели, используя следующий синтаксис:

@import FrameworkName;
person Bas    schedule 19.07.2014
comment
Использование заголовка моста не разрешено в Frameworks. Следование приведенным выше инструкциям в фреймворке приведет к указанной выше ошибке при сборке: error: using bridging headers with framework targets is unsupported - person Edmund Holderbaum; 25.10.2019