9

我有一个 Xcode 工作区,其中包含一个带有 iOS 应用程序目标的项目和另一个带有框架目标的项目。框架目标依赖于另一个框架,该框架以以下形式集成xcframework

  • 我的应用
  • 我的框架
  • 其他框架

使用常规OtherFramework.framework需要将其链接到MyFramework然后嵌入,MyApp即使MyApp不需要框架本身。但是,当与 集成时xcframework,该项目将无法构建并出现No such module 'OtherFramework'错误。

项目设置:

我的框架项目

我的应用项目

OtherFramework.xcframework从目标中移除MyApp修复了构建问题,但随后library not loaded由于框架不存在于应用程序中而导致错误。

演示项目:https ://github.com/msaps/XCFramework-Link-Issue

你打算如何链接xcframework应用程序和依赖框架中的链接?

为什么?

pyckamil刚刚发布了这篇文章,详细解释了这个问题:XCFrameworks 的一切都错了

事实证明,Xcode 对从活动构建架构ProcessXCFrameworkLibrary中提取正确的步骤进行了优化。这仅运行一次,这会导致尝试链接同一框架的其他目标出现问题。.framework.xcframework

更新

此问题已在 Xcode 12.0 中解决

4

6 回答 6

2

更新 - 在 Xcode 12.0 中解决

shinsuk提出了一种可靠的解决方法,该解决方法通过添加架构明确的框架搜索路径来确保.framework在 XCFramework 中找到正确的。

详细信息可以在README中找到。

搜索路径

于 2020-06-01T08:15:58.803 回答
1

在使用xcframework而不是framework. 所以我改变了我的项目结构:

MyFramework Peoject嵌入OtherFramework.xcframework,然后使用@_exported import OtherFrameworkin将其导出MyFramework Project。而MyApp只是链接MyFramework,但可以导入/使用MyFrameworkOtherFramework.

顺便说一句,似乎自定义@rpath和手动共同设计OtherFramework.

于 2020-04-13T04:17:49.860 回答
1

IMO,似乎不是 xcframework 问题。

看看这个答案:https ://stackoverflow.com/a/59435627/2661407

iOS、watchOS 或 tvOS 不支持 Umbrella 框架。

OtherFramework.xcframework 应该被签名并嵌入到您的主机应用程序中。

并将“@executable_path/Frameworks”设置添加到您的 MyFramework.framework > Build settings > Runpath Search Paths 中。

于 2020-04-28T06:20:59.690 回答
1

检查构建设置并将框架搜索路径定义到包含相关框架的文件夹。如果框架放置在您的项目目录中,只需将框架搜索路径设置为 $(SRCROOT) 并将其设置为递归。

使用 Xcode检查响应获取错误“没有这样的模块”,但框架在那里

于 2020-02-05T16:50:58.617 回答
0

我也有这样的问题。首先,确保您的 MyFramework.framework 文件与 MyApp 位于同一目录中。

其次,在构建 MyFramework.framework 时,确保 OtherFramework.xcframework 也在 MyFramework 的项目目录中。

还有一件事,检查目标 SDK 版本。他们应该在同一级别的某个地方。

于 2020-02-05T16:07:35.987 回答
-1

我和你有同样的问题,在看到你的 pbxproj 之后,我认为它可以用同样的方式解决。

将您的框架搜索路径更改为递归(通过 UI 或手动编辑 pbxproj "$(SRCROOT)/../Frameworks"=> "$(SRCROOT)/../Frameworks/**"),如下所示:https ://github.com/msaps/XCFramework-Link-Issue/pull/1/files

于 2020-04-21T15:03:48.870 回答