【发布时间】:2015-01-16 20:54:53
【问题描述】:
将框架放入“将二进制文件与库链接”或“嵌入框架”在构建阶段有什么区别?
【问题讨论】:
-
我投票重新提出这个问题,它并不宽泛,我只是自己找到了这个选项,就像“它是什么?为什么我需要它?”它直接比较了 XCode 中的两个选项,而且它们都很奇怪。就像说“你想系鞋带,还是嵌入系鞋带的行为? - 这很令人困惑。
标签: xcode frameworks
将框架放入“将二进制文件与库链接”或“嵌入框架”在构建阶段有什么区别?
【问题讨论】:
标签: xcode frameworks
将二进制文件与库链接 将框架和库与项目的目标文件链接以生成二进制文件。您可以将目标的源文件链接到目标的活动 SDK 中的库或外部库。
嵌入框架 您可以创建一个嵌入式框架来在您的应用扩展程序及其包含的应用程序之间共享代码。
-
时间轴 (看这句话) - “如果您的包含应用程序目标链接到嵌入式框架,它必须包含 arm64 架构,否则将被 App Store 拒绝。”
【讨论】:
我一直在这里和那里寻找一些答案,如果有人再次遇到这个问题,我想修改这个学习。
无论如何,如果我们想使用任何框架资源(即 API),我们需要链接到它。在这种情况下,我们需要将其添加到 General Target Settings 底部的“Linked Frameworks and Libraries”部分。
如果我们嵌入了一个库,我们就是将这个库 - 原样 - 与我们的应用程序包一起提供。这可能很方便,例如在运行 macOS 且肯定没有特定的 3rd 方库的机器上。
那么,iOS 呢?没有可能在 iOS 设备本身上安装 3rd 方库——另外,Apple 对胖框架(为多个平台构建的库)非常严格。所以无论如何都必须有一种方法可以交付图书馆?由于仅链接它们对于我们应用程序的用户来说是不够的,我们还有哪些其他可能性?
这就是一个特殊的构建阶段发挥作用的地方。在 Build Phases 下的项目设置中,有带库的链接二进制文件部分。此步骤会从胖框架中去除不必要的部分,并将必要的部分留在捆绑包中,以便它能够在不知道应用程序依赖项的设备上运行。
【讨论】:
AVFoundation,它会神奇地链接起来,如 Apple 自己的 AVCam 示例所示
对于应用目标
Xcode 11
Static LibraryStatic Framework - Do Not Embed
Dynamic Framework - Embed
Xcode 11 之前
Static Library - Link
Static Framework - Link
Dynamic Framework - Embed
它是如何工作的 [Xcode v11] 和 [pre Xcode v11]
【讨论】: