Можем ли мы ограничить сгенерированный Swift интерфейс, доступный из модуля только в Xcode? - PullRequest
0 голосов
/ 21 февраля 2019

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 используется только внутри модуля, и я не хочу показывать его другим модулям?

1 Ответ

0 голосов
/ 28 июня 2019

Нет, это невозможно сейчас.Я был неправ, говоря, что это работает с XCode.В репозитории Swift для него зарегистрирован запрос улучшение .

...