Link Binary与库VS Embed Frameworks

时间:2014-11-19 10:59:21

标签: xcode frameworks

将框架放入“链接二进制文件库”或“嵌入框架”之间的构建阶段有何不同?

3 个答案:

答案 0 :(得分:38)

将二进制文件链接到库 将框架和库与项目的目标文件链接以生成二进制文件。您可以将目标的源文件链接到目标的活动SDK中的库或外部库。

嵌入框架 您可以创建一个嵌入式框架,以在您的应用扩展程序及其包含的应用程序之间共享代码。

-

时间轴 (看看这句话) - "如果您的应用目标链接指向嵌入式框架,则必须包含arm64架构,否则它将被App Store拒绝。"

答案 1 :(得分:2)

我一直在这里和那里看一些答案,如果有人再次遇到这个问题,我想修改此学习。

无论如何,如果我们要使用任何框架资源(即API),我们都需要链接到它。在这种情况下,我们需要将其添加到“常规目标设置”底部的“链接的框架和库”部分。

如果我们嵌入库,则将使用我们的应用程序捆绑包按原样运送该库。这可能很方便,例如在运行macOS的计算机上肯定没有特定的第三方库。

那么,iOS呢?本身无法在iOS设备上安装3rd party库-而且Apple对于胖框架(为多个平台构建的库)非常严格。因此,无论如何,必须有一种方法来交付图书馆?由于仅链接它们不足以为我们的应用程序用户提供服务,我们还有什么其他可能性?

这是一个特殊的构建阶段起作用的地方。在“构建阶段”下的项目设置中,有“带有库的链接二进制文件”部分。此步骤从胖框架中剥离了不必要的部分,并将必要的部分留在了捆绑包中,以便它可以在不依赖于应用程序依赖性的设备上运行。

答案 2 :(得分:0)

对于应用目标

  • mypy --strict-from typing import Generic, TypeVar class Product: def get_id(self) -> int: raise NotImplementedError T = TypeVar('T', bound=Product) class Store(Generic[T]): def get(self) -> T: return self.load_object() def load_object(self) -> T: raise NotImplementedError class Car(Product): def get_id(self) -> int: return hash(self.color) def __init__(self, color: str): self.color = color class CarStore(Store[Car]): def load_object(self) -> Car: return Car('red') if __name__ == '__main__': s = CarStore() c = s.get() print(c.color)
  • Static Library-Link
  • Static Framework-Link

How it works