xcode 在具有项目框架依赖项的应用程序中嵌入XCFramework

ghhaqwfi  于 2023-05-19  发布在  其他
关注(0)|答案(6)|浏览(142)

我有一个Xcode工作区,其中一个项目具有iOS Application目标,另一个项目具有Framework目标。框架目标依赖于另一个框架,该框架以xcframework的形式集成:

  • MyApp
  • MyFramework
  • OtherFramework

使用常规的OtherFramework.framework需要将其链接到MyFramework,然后嵌入到MyApp中,即使MyApp不需要框架本身。但是,当与xcframework集成时,该项目无法构建,并出现No such module 'OtherFramework'错误。
项目设置:
MyFramework Project
MyApp Project
MyApp目标中删除OtherFramework.xcframework修复了构建问题,但随后会导致library not loaded错误,因为应用程序中不存在框架。
Demo项目:https://github.com/msaps/XCFramework-Link-Issue
如何在应用程序中链接xcframework并在依赖框架中链接?
为什么?
pyckamil刚刚发布了这篇文章,详细解释了这个问题:Everything wrong with XCFrameworks
事实证明,Xcode对ProcessXCFrameworkLibrary步骤进行了优化,该步骤从.xcframework中提取了正确的.framework用于活动构建架构。这只运行一次,这会导致尝试链接同一框架的其他目标出现问题。

更新

此问题在Xcode 12.0中已解决

neekobn8

neekobn81#

已更新-Xcode 12.0中已解决

shinsuk提出了一个可靠的解决方案,它通过添加体系结构显式框架搜索路径来确保在XCFramework中找到正确的.framework
详情请参见README。

n1bvdmb6

n1bvdmb62#

检查构建设置并将框架搜索路径定义到包含有问题的框架的文件夹。如果框架位于项目目录中,只需将框架搜索路径设置为$(SRCROOT)并将其设置为recursive。
使用Xcode检查响应Getting error“No such module”,但框架存在

aelbi1ox

aelbi1ox3#

IMO,这似乎不是xcframework的问题。
看看这个答案:https://stackoverflow.com/a/59435627/2661407
iOS、watchOS或tvOS不支持Umbrella框架。
OtherFramework.xcframework应该被签名并嵌入到您的主机应用程序中。
并在MyFramework.framework > Build settings > Runpath Search Paths中添加“@executable_path/Frameworks”设置。

bttbmeg0

bttbmeg04#

我在使用xcframework而不是framework后也遇到了这个问题。所以我改变了我的项目结构:
MyFramework Peoject嵌入OtherFramework.xcframework,然后使用MyFramework Project中的@_exported import OtherFramework导出。而MyApp只是链接MyFramework,但可以导入/使用MyFrameworkOtherFramework
顺便说一句,它似乎自定义@rpath和手动协同设计OtherFramework

jv2fixgn

jv2fixgn5#

我也有过类似的问题。首先,确保您的MyFramework.framework文件与MyApp位于同一目录中。
其次,在构建MyFramework.framework时,确保OtherFramework.xcframework也在MyFramework的项目目录中。
还有一件事,检查目标SDK版本。他们应该在同一水平线上。

bpsygsoo

bpsygsoo6#

我和你有同样的问题,在看到你的pbxproj后,我认为它可以用同样的方法解决。
将框架搜索路径更改为递归(通过UI或手动编辑pbxproj "$(SRCROOT)/../Frameworks" => "$(SRCROOT)/../Frameworks/**"),如下所示:https://github.com/msaps/XCFramework-Link-Issue/pull/1/files

相关问题