相关疑难解决方法(0)

为什么伞形框架不鼓励?

我想分发框架A.框架A依赖于框架B.我希望我的框架的用户只需要包含框架A,但仍然具有对框架B的编程访问权限.

Apple使用"Umbrella Frameworks"的概念一直这样做,但是文档中有这个主题:

不要创建伞框架

虽然可以使用Xcode创建伞形框架,但对大多数开发人员来说这样做是不必要的,不建议这样做.Apple使用伞形框架来掩盖操作系统中库之间的一些相互依赖关系.几乎在所有情况下,您都应该能够将代码包含在单个标准框架包中.或者,如果您的代码足够模块化,您可以创建多个框架,但在这种情况下,模块之间的依赖关系将是最小的或不存在的,并且不应该保证为它们创建保护伞.

为什么这种做法不鼓励?是什么使它成为Apple相互依赖框架问题的良好解决方案,而不是我的?

macos cocoa objective-c

40
推荐指数
2
解决办法
8366
查看次数

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

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

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

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

项目设置:

我的框架项目

我的应用项目

OtherFramework.xcframeworkMyApp目标中删除修复了构建问题,但随后会导致library not loaded错误,因为应用程序中不存在框架。

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

您打算如何xcframework在应用程序中链接 an并在依赖框架中链接?

为什么?

pyckamil刚刚发布了这篇文章,详细解释了这个问题:everything wrong with XCFrameworks

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

更新

此问题已在 Xcode 12.0 中解决

xcode catalyst ios swift xcframework

6
推荐指数
1
解决办法
7388
查看次数

导入包含嵌套内部框架的框架时缺少所需模块

我有两个适用于 iOS 13.2 的 Xcode 11.3.1 项目:

  • MyFramework:用于从我的 Swift 和 Objective-C 源文件生成框架。此源代码使用OpenSSL框架,该框架使用“嵌入并签名”选项嵌入到 MyFramework 中,因此 MyFramework 是一个具有嵌套框架(OpenSSL)的框架。
  • TestApp:一个导入 MyFramework 的快速应用程序(并且不需要 OpenSSL 功能)。

当我编译 MyFramework 时,会在 MyFramework Products 目录中创建以下目录(Xcode 在 MyFramework 中正确包含 OpenSSL 子模块):

MyFramework.framework/Frameworks/OpenSSL.framework

奇怪的是, “OpenSSL.framework”中缺少Modules目录Headers(尚未从原始 OpenSSL.framework 复制),但这对我来说似乎很好,因为我不想直接在我的 TestApp 中使用 OpenSSL 功能。

但是,当我将 MyFramework 添加到 TestApp 并尝试编译它时,我在 swift 文件中“import MyFramework”行所在的位置收到错误“缺少所需模块‘OpenSSL’”。这意味着 MyFramework 已正确找到,但 OpenSSL 尚未正确找到。

如果我手动添加包含以下内容的文件MyFramework.framework/Frameworks/OpenSSL.framework/Modules/module.modulemap(没有标题,没有导出),那么问题就消失了:

framework module OpenSSL {}

有更好的解决方案吗?为什么没有复制“Modules”和“Headers”目录?为什么在编译时TestApp 中需要 OpenSSL ?

附加说明(06-09-2020): 我忘记提及一个重要细节。TestApp 能够找到 OpenSSL 框架,因为我在 TestApp …

xcode frameworks objective-c ios swift

5
推荐指数
0
解决办法
843
查看次数

标签 统计

ios ×2

objective-c ×2

swift ×2

xcode ×2

catalyst ×1

cocoa ×1

frameworks ×1

macos ×1

xcframework ×1