我有一个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中已解决
6条答案
按热度按时间neekobn81#
已更新-Xcode 12.0中已解决
shinsuk提出了一个可靠的解决方案,它通过添加体系结构显式框架搜索路径来确保在XCFramework中找到正确的
.framework
。详情请参见README。
n1bvdmb62#
检查构建设置并将框架搜索路径定义到包含有问题的框架的文件夹。如果框架位于项目目录中,只需将框架搜索路径设置为$(SRCROOT)并将其设置为recursive。
使用Xcode检查响应Getting error“No such module”,但框架存在
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”设置。
bttbmeg04#
我在使用
xcframework
而不是framework
后也遇到了这个问题。所以我改变了我的项目结构:MyFramework Peoject
嵌入OtherFramework.xcframework
,然后使用MyFramework Project
中的@_exported import OtherFramework
导出。而MyApp
只是链接MyFramework
,但可以导入/使用MyFramework
和OtherFramework
。顺便说一句,它似乎自定义
@rpath
和手动协同设计OtherFramework
。jv2fixgn5#
我也有过类似的问题。首先,确保您的MyFramework.framework文件与MyApp位于同一目录中。
其次,在构建MyFramework.framework时,确保OtherFramework.xcframework也在MyFramework的项目目录中。
还有一件事,检查目标SDK版本。他们应该在同一水平线上。
bpsygsoo6#
我和你有同样的问题,在看到你的pbxproj后,我认为它可以用同样的方法解决。
将框架搜索路径更改为递归(通过UI或手动编辑pbxproj
"$(SRCROOT)/../Frameworks"
=>"$(SRCROOT)/../Frameworks/**"
),如下所示:https://github.com/msaps/XCFramework-Link-Issue/pull/1/files