Встраивание XCFramework в приложение с зависимостями фреймворка проекта

У меня есть рабочая область Xcode, в которой есть проект с целью приложения iOS и другой проект с целью Framework. Целевая платформа зависит от другой структуры, которая интегрирована в видеxcframework:

  • MyApp
  • MyFramework
  • Другое

Использование обычных OtherFramework.framework потребует, чтобы он был связан с MyFramework а затем встроен в MyApp даже если MyAppне требует самого фреймворка. Однако при интеграции сxcframework, затем этот проект не может быть построен с No such module 'OtherFramework' ошибка.

Настройки проекта:

MyFramework Project

Проект MyApp

Удаление OtherFramework.xcframework из MyApp target устраняет проблему сборки, но затем вызывает library not loaded ошибки, так как фреймворк отсутствует в приложении.

Демо-проект здесь: https://github.com/msaps/XCFramework-Link-Issue

Как вы хотите связать xcframework в приложении и ссылку в зависимом фреймворке?

Почему?

pyckamil только что опубликовал эту статью, в которой подробно объясняется проблема: с XCFrameworks все не так.

Оказывается, в Xcode есть оптимизация для ProcessXCFrameworkLibrary шаг, который извлекает правильный .framework из .xcframeworkдля активной архитектуры сборки. Это выполняется только один раз, что вызывает проблемы для дополнительных целей, которые пытаются связать ту же структуру.

Обновить

Эта проблема решена в Xcode 12.0.

6 ответов

ОБНОВЛЕНО - решено в Xcode 12.0

Shinsuk разработал надежный обходной путь, который работает путем добавления путей поиска с явной архитектурой для обеспечения правильного.framework в XCFramework.

Подробности можно найти в README.

Проверьте настройки сборки и определите пути поиска фреймворков к папке, содержащей рассматриваемые фреймворки. Если фреймворки помещены в каталог вашего проекта, просто установите путь поиска фреймворка на $(SRCROOT) и установите его как рекурсивный.

проверьте ответ. Получение ошибки "Нет такого модуля" с помощью Xcode, но фреймворк есть

У меня тоже была эта проблема после использования xcframework вместо того framework. Итак, я изменил структуру своего проекта:

В MyFramework Peoject вставлять OtherFramework.xcframework, Затем сделайте экспорт, используя @_exported import OtherFramework в MyFramework Peoject. ИMyApp просто ссылка MyFramework но могут как импортировать / использовать MyFramework а также OtherFramework.

Кстати, похоже на кастом @rpath и вручную кодировать OtherFramework.

ИМО, похоже, не проблема с xcframework.

Посмотрите этот ответ: /questions/54146118/vstroennaya-platforma-podpisi-ne-rabotaet-v-xcode-1121/54146130#54146130

Фреймворки Umbrella не поддерживаются в iOS, watchOS и tvOS.

OtherFramework.xcframework должен быть подписан и встроен в ваше хост-приложение.

и добавьте параметр "@executable_path/Frameworks" в свой MyFramework.framework > Настройки сборки> Пути поиска Runpath.

У меня тоже была такая проблема. Во-первых, убедитесь, что файл MyFramework.framework находится в том же каталоге, что и MyApp.

Во-вторых, при создании MyFramework.framework убедитесь, что OtherFramework.xcframework также находится в каталоге проекта MyFramework.

И еще: проверьте целевые версии SDK. Они должны быть где-то на одном уровне.

У меня была такая же проблема, как и у вас, и, увидев ваш pbxproj, я думаю, что ее можно решить таким же образом.

Измените путь поиска фреймворка на рекурсивный (либо через пользовательский интерфейс, либо вручную отредактировав файл pbxproj "$(SRCROOT)/../Frameworks" => "$(SRCROOT)/../Frameworks/**"), вот так: https://github.com/msaps/XCFramework-Link-Issue/pull/1/files

Другие вопросы по тегам