У меня есть Swift Framework, который мы компилируем и распространяем среди сторонних разработчиков. Я хочу включить в проект некоторый код C, но единственный способ заставить его работать — импортировать заголовок C в заголовок моего фреймворка и установить заголовок C как общедоступный. Это открывает доступ ко всему коду C сторонним разработчикам, а это не то, что нам нужно.
Все, что я могу найти в Интернете о том, как это сделать, является разновидностью этого метода: https://spin.atomicobject.com/2015/02/23/c-libraries-swift/
Но предостережение этого метода: «Обратите внимание, что потребители любых фреймворков, которые вы создаете с использованием этой техники, также должны будут добавить модуль в свои пути поиска Swift». И мы попробовали это, и, конечно же, наши сторонние разработчики получили ошибку Missing required module 'CGeodesic'
, которая является модулем, который мы определили, указывающим на заголовок C.
Как мы можем просто скомпилировать код C прямо в нашу структуру, сохраняя при этом конфиденциальность кода и не требуя от сторонних разработчиков изменять свои настройки сборки, чтобы заставить его работать? Я не возражаю против установки этих подмодулей в нашем проекте, но, в конце концов, я хочу, чтобы он был скомпилирован непосредственно в один плоский двоичный файл фреймворка, без динамической компоновки, путей поиска или чего-то подобного.
Редактировать
Проект представляет собой код C бок о бок с кодом Swift. У меня есть подкаталог в моем проекте, который выглядит так:
- Geodesic/
- Geodesic.h
- Geodesic.c
- Geodesic.swift
Файл Swift оборачивает код C, чтобы сделать его более понятным для работы. У меня также был файл module.modulemap в этом каталоге, но, как я уже говорил ранее, это не сработало. Я бы предпочел сохранить код C рядом с моим кодом Swift, но я готов отказаться от этого, чтобы решить эту проблему.