Встраивание XCFramework в приложение с зависимостями фреймворка проекта
У меня есть рабочая область Xcode, в которой есть проект с целью приложения iOS и другой проект с целью Framework. Целевая платформа зависит от другой структуры, которая интегрирована в видеxcframework
:
- MyApp
- MyFramework
- Другое
Использование обычных OtherFramework.framework
потребует, чтобы он был связан с MyFramework
а затем встроен в MyApp
даже если MyApp
не требует самого фреймворка. Однако при интеграции сxcframework
, затем этот проект не может быть построен с No such module 'OtherFramework'
ошибка.
Настройки проекта:
Удаление 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 ответов
Проверьте настройки сборки и определите пути поиска фреймворков к папке, содержащей рассматриваемые фреймворки. Если фреймворки помещены в каталог вашего проекта, просто установите путь поиска фреймворка на $(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