Публичный модуль импорта класса 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 ответ
Я тоже боролся с этим, вот что я узнал, что помогло мне:
Помимо шагов, которые вы уже предприняли, убедитесь, что вы создали другую карту модуля (например, MyFramework.private.modulemap) в $(SRCROOT)/Myframework и добавили в этот файл следующее:
module MyFramework_Private { export *
}- Отредактируйте следующие параметры в вашем файле.xcconfig:
SWIFT_INCLUDE_PATHS = $(SRCROOT)/MyFramework MODULEMAP_PRIVATE_FILE = $(SRCROOT)/MyFramework/MyFramework.private.modulemap
После этого у вас должно получиться, что приложение, использующее вашу инфраструктуру, теперь должно иметь четкое представление о том, что такое MyFramework_Private, а ваши внутренние файлы Swift имеют способ доступа к закрытым заголовкам. Дайте мне знать, как это сработало для вас, с радостью помогу, если смогу.