Создание толстой платформы с целевой зависимостью платформы - PullRequest
0 голосов
/ 22 января 2019

Я работаю со Swift 4.2 и Xcode 10.1. Я пытаюсь построить фреймворк в Swift, который зависит от Alamofire, который написан на Objective C. Я добавил Alamofire.xcodeproj вручную, как указано в README от Alamofire. Индивидуальная цель строит нормально. Моя цель Framework хорошо работает.

Проблема возникает, когда я пытаюсь создать толстый фреймворк, используя скрипт, использующий следующую команду

xcodebuild -project "${FRAMEWORK_NAME}.xcodeproj" -scheme "${FRAMEWORK_NAME}" -configuration "${CONFIGURATION}" -arch arm64 -arch armv7 -arch armv7s only_active_arch=no BITCODE_GENERATION_MODE=bitcode defines_module=yes -sdk "iphoneos" -derivedDataPath "${OUTPUT_DIR}"

Я получаю следующую ошибку:

заголовок зонтика 'Alamofire.h' не найден

не удалось собрать модуль Objective-C 'Alamofire'

Вторая строка ошибки происходит от другой зависимости 'Moya', которая зависит от Alamofire (см. Рисунок)
enter image description here

Удивительно, что обычный Cmd + B работает нормально для обычной цели, но xcodebuild не работает.

Вещи, которые я пытался:

  1. Удаление производной папки, Чистая сборка.
  2. Сначала создайте индивидуальные зависимости, а затем создайте универсальную агрегированную цель.
  3. Создание пользовательской карты модуля
  4. Изменение конфигурации всех зависимостей на одну и ту же, например. Debug
  5. Изменение языковой версии Swift Alamofire.xcodeproj на Swift 4.2

Я думаю, что команде xcodebuild нужно больше ввода. Чего мне не хватает?

Обновление:

копаю дальше. Папка «Заголовки» внутри Debug-iphoneos / Alamofire.framework / пусто, которое, как ожидается, будет содержать зонтичный заголовок Alamofire.h.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Оказывается, вложенная зависимость была проблемой.

MyFramework зависел от Moya, а Moya зависел от Alamofire. После того, как я добавил Alamofire.xcodeproj как подмодуль в Moya.xcodeproj, xcodebuild волшебным образом нашел все зонтичные заголовки правильно.

0 голосов
/ 28 января 2019

Вы пробовали что-нибудь из этого:

1.Добавление -ObjC в Настройки сборки -> Связывание -> Другие флаги компоновщика.

2.Внедрение всех фреймворков, от которых зависит фреймворк Objective C, в ваш проект, то есть на этапах сборки -> Link Binary With Libraries.

3.Добавление # import для них в файл заголовка префикса, который необходимо добавить в проект в настройках сборки в поле заголовка префикса.

Обновление: Точка разработки 3:

Чтобы использовать Objective C Framework в вашем проекте Swift, вам нужно создать файл заголовка Swift Bridging в этом проекте. Лучший способ - создать файл .h вручную.

Сначала добавьте в проект файл заголовка с именем: MyProjectName-Bridging-Header.h. Это будет единственный заголовочный файл, в который вы импортируете любой код Objective C, для которого вам нужен код Swift.

Найдите Swift Compiler - раздел «Генерация кода» в настройках сборки вашего проекта. Добавьте путь к файлу заголовка моста рядом с Objective C Bridging Header из корневой папки проекта. Это должен быть MyProject / MyProject-Bridging-Header.h

Ему просто нужен один заголовок моста. Введите в этот файл операторы #import, и ваши классы будут доступны в вашем коде проекта Swift без каких-либо дополнительных операторов #import.

build settings

Вы также можете взглянуть на этот урок: Интегрирование цели c в быстром

...