Ошибка using bridging headers with module interfaces is unsupported (XCode)

У меня есть проект XCode (Swift), в котором используется статическая библиотека (Swift), и эта библиотека использует другую статическую библиотеку (C++)

статическая библиотека A (C++) -> статическая библиотека B (Swift) -> MyProject (Swift)

Чтобы иметь возможность использовать методы из библиотеки A в библиотеке B, мне нужно установить файл bridge в BuildSettings, верно? тогда я могу использовать любые методы из A в B, хорошо.

Если я пробую собрать библиотеку B с Build libraries for distribution = NO, все компилируется и работает, но если мне нужно изменить это значение на YES (чтобы собрать библиотеку как Release ver), я получаю ошибку

error: using bridging headers with module interfaces is unsupported

Я поискал и нашел несколько возможных решений на SO, где большинство из них предлагают установить Build libraries for distribution = NO, но это больше похоже на костыль так как для того, чтоб собраль либу в релизе нужно установить значение как YES.

Затем я нашел другое решение

https://developer.apple.com/forums/thread/10419

но здесь объясняется, что

You'll need to remove the bridging header from where you added it in the Build Settings, in order to get your framework to compile.

Но я не могу удалить файл bridge, потому что тогда я не смогу использовать методы из А в В.

Как правильно это сделать?


Ответы (1 шт):

Автор решения: Aleksey Timoshchenko

В общем в итоге я сделал это через modulemap файл

Я убрал ссылки на bridge файл (в Build Settings) и сделал вот такой modulemap для .h

module LibA {
    header "LibA.h"
    export *
}

который положил рядом с .h файлом

И теперь перед использованием методов либы в каком то файле мне нужно написать import LibA и тогда методы доступны и проблема с bridge файлом не возникает

Спасибо @kun wang за вот этот ответ https://stackoverflow.com/a/68980854/5709159

→ Ссылка