Case
Модуль (статическая библиотека с файлом-картой модуля) имеет смешанный код (Objective-C + Swift) в кодовой базе приложения для iOS.Код Swift необходимо использовать только из модуля, поэтому все необходимые интерфейсы: внутренний
Документация здесь говорит
Посколькусгенерированный заголовок является частью общедоступного интерфейса платформы, в сгенерированном заголовке для цели платформы отображаются только объявления, отмеченные модификатором public или openМетоды и свойства, помеченные внутренним модификатором и объявленные в классе, который наследуется от класса Objective C, доступны для среды выполнения Objective C.Однако они недоступны во время компиляции и не отображаются в сгенерированном заголовке для целевого фреймворка.
В XCode я могу успешно скомпилировать проект, но на нашей машине CI, которая использует BUCK построить не удалось, так как он не может найти методы Swift, определенные внутри кода Objective C в модуле.Сработавшее исправление сделало эти методы общедоступными.
Мои сомнения:
- Является ли это ошибкой в XCode, поскольку документация подразумевает, что методы Swift, которые мы хотим использовать из Objective C, имеютбыть публичным?
- Нужно ли нам отмечать весь интерфейс, необходимый внутри модуля, как public , даже если мы используем его из модуля?
Сгенерированный заголовок является частью открытого интерфейса фреймворка
- Даже если сгенерированный заголовок не объявлен в modulemap (или зонтичном заголовке), он останется открытым интерфейсом фреймворка?Что если Swift используется только внутри модуля, и я не хочу показывать его другим модулям?