将框架放入“链接二进制文件库”或“嵌入框架”之间的构建阶段有何不同?
答案 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