Справочная информация: я конвертирую большую старую смешанную кодовую базу в каркас. У меня проблемы, поэтому я решил начать с минимального тестового проекта, чтобы увидеть, как все работает. Я столкнулся с большим количеством проблем. Это Swift 5.0 с Xcode 10.2.1.
Я создал новый проект iOS-фреймворка под названием TestFramework. TestFramework имеет следующие исходные файлы:
OCTest.[hm]
, с одного частного класса
OCPublic.[hm]
, с одним публичным классом. Он называет OCTest.
STest.swift
, с одним публичным классом. Он вызывает OCPublic и OCTest.
У меня также есть следующие два зонтичных заголовка в той же папке, что и исходные файлы:
Все они находятся в папке TestFramework
вместе с Info.plist
и всем остальным, что Xcode создает автоматически.
Мне удалось сделать эту компиляцию, собрать пакет фреймворка с carthage build --archive
и успешно использовать полученный фреймворк в тестовом приложении со следующими картами модулей и настройками сборки:
TestFramework/module.modulemap
существует и пуст.
TestFramework/module.private.modulemap
существует с этими строками:
module TestFramework_Private {
umbrella header "TestFramework_Private.h"
export *
}
Обе MODULEMAP_FILE
и MODULEMAP_PRIVATE_FILE
в настройках сборки не установлены.
SWIFT_INCLUDE_PATHS
- это $(PROJECT_DIR)/TestFramework
.
DEFINES_MODULE
верно.
Если я добавлю какой-либо контент (framework module TestFramework { … }
) в module.modulemap
или попытаюсь MODULEMAP_FILE
или MODULEMAP_PRIVATE_FILE
указать на их файлы (со значениями TestFramework/module.modulemap
и TestFramework/module.private.modulemap
), я получу различные ошибки сборки ( невозможно найти TestFramework_Private, переопределение модуля TestFramework и т. д.)
Если я удаляю пустую карту основного модуля, я получаю Нет такого модуля 'TestFramework_Private', где STest.swift
пытается импортировать его.
Если я попытаюсь переместить личные вещи в отдельную папку и изменить SWIFT_INCLUDE_PATHS
и MODULEMAP_PRIVATE_FILE
, я получу больше ошибок при сборке.
Есть ли какие-то значения для настроек MODULEMAP
*, которые должны работать, с содержимым или без него внутри основной карты модуля? Что мне делать, если я хочу переместить вещи в разные папки?