Публичный модуль импорта класса swift "приватный" модуль в динамической среде смешанного языка (ObjC+Swift)

У меня есть динамические рамки MyFramwork.framework он имеет код Swift и заголовки ObjC, помеченные как Protected (для внутреннего использования в MyFramwork.framework) и Public (для внешнего использования приложением) в проекте фреймворка. Также MyFramwork.framework - это встроенный фреймворк в приложении.

Следуя упомянутым здесь шагам http://nsomar.com/project-and-private-headers-in-a-swift-and-objective-c-framework/, я создал

module MyFramwork_Private {
    header "../...h"
    ...

    export *
}

со всеми защищенными заголовками (SWIFT_INCLUDE_PATHS = путь к каталогу, где находится файл module.modulemap)

и PublicHeaders.h(который я импортирую в заголовок моего зонтика MyFramwork.h) со всеми публичными заголовками

Как я могу сделать класс / структуру Public Swift, которые делают использование закрытого кода MyFramwork доступным в приложении?

Если я import MyFramwork_Private в быстром файле из MyFramwork приложение при создании MyFramwork.framework попытается получить доступ к закрытым заголовкам, определенным в module MyFramwork_Private и сборка не удалась, потому что приложение не может видеть защищенный заголовок

1 ответ

Я тоже боролся с этим, вот что я узнал, что помогло мне:

  1. Помимо шагов, которые вы уже предприняли, убедитесь, что вы создали другую карту модуля (например, MyFramework.private.modulemap) в $(SRCROOT)/Myframework и добавили в этот файл следующее:

    module MyFramework_Private { export *
    }

  2. Отредактируйте следующие параметры в вашем файле.xcconfig: SWIFT_INCLUDE_PATHS = $(SRCROOT)/MyFramework MODULEMAP_PRIVATE_FILE = $(SRCROOT)/MyFramework/MyFramework.private.modulemap

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

Другие вопросы по тегам