一个符号是由一个主体,名字组成的。如果你删除了函数的主体,你就节省了空间。 因为操作系统已经有了自己的Apple库的编译库,所以你不需要在编译过程中包含库体。安装后,操作系统(模拟器或真实设备)会很好地将其链接到实际的dylib。 它们很像一个符号链接/快捷方式,但是指向一个库。 所以我们有动态库,这些是Mach-O文件,它们公开代码和数据片段供可执行文件使用。 这些都是作为系统的一部分发布的。这就是我们的框架。你们中的许多人也使用自己的框架。 还有TBD文件,或者基于文本的dylib存根。那么这些是什么呢?当我们为iOS和macOS制作SDK时,我们有所有这些dylib,这些dylib有所有这些很棒的函数,比如MapKit和WebKit,你可能会想使用它们。但是我们不想随SDK一起提供这些dylib的整个副本,因为它会很大。编译器和链接器不需要Ant。它只需要运行程序。所以我们创建了一个叫做stub dylib的东西,我们删除了所有符号的主体,只保留了名字。 一旦我们这样做了,我们就为它们做了一个更容易使用的文本表示。目前,它们只用于分发SDK以减少大小。 所以你可能会在你的项目中看到它们,但你不必担心它们,它们只包含符号。 从Behind the Scenes of the Xcode Build Process - 48:38开始
4条答案
按热度按时间okxuctiv1#
我搜索了谷歌,但到目前为止,我唯一能找到的是苹果开发者论坛上的一句话:
对于那些好奇的人来说,. tbd文件是新的"基于文本的存根库",它提供了一个更紧凑的存根库版本,可供SDK使用,并有助于显著减少其下载大小。
希望很快会有更多的文档。
例如,下面是 * libsqlite3.tbd * 的全部内容。它只是一个文本文件。请注意,安装名称是 * libsqlite3.dylib *。
我在中找到了此文件和其他. tbd文件
如果您转到Xcode项目的"常规"选项卡,然后在"链接的框架和库"下添加库,您也可以看到一个. tbd文件。该. tbd文件将被复制到您的项目。
因此,. dylib文件似乎是您的项目正在使用的实际二进制代码库,位于用户设备上的/usr/lib/目录中。另一方面,. tbd文件只是包含在您的项目中的文本文件,用作指向所需的. dylib二进制文件的链接。由于此文本文件比二进制库小得多,它使SDK的下载大小更小。
在这一点上,我只是猜测从信息给,所以请纠正我,如果我错了。
fafcakar2#
.dylib是包含机器码的编译二进制文件。.tbd是一个较小的文本文件,类似于跨平台模块Map。
zu0ti5jz3#
基于文本的dylib存根(.tbd)
这是一种优化,意味着您不必将
.dylib
文件(存在于目标上)复制到您的捆绑包(例如应用程序)中。此文件不包含对文件大小有重大影响的二进制代码。它仅适用于:
Dynamic libraries
,因为它们是运行时链接的1.文件在目标上应该有一个相关路径。因此,它是
standard system libraries
的最佳位置。对于iOS开发,您可以在此处找到.tbd文件
例如,
libiconv.tbd
如下所示此文件包含一些 meta信息,如:
.dylib
位置34gzjxbg4#
一个符号是由一个主体,名字组成的。如果你删除了函数的主体,你就节省了空间。
因为操作系统已经有了自己的Apple库的编译库,所以你不需要在编译过程中包含库体。安装后,操作系统(模拟器或真实设备)会很好地将其链接到实际的dylib。
它们很像一个符号链接/快捷方式,但是指向一个库。
所以我们有动态库,这些是Mach-O文件,它们公开代码和数据片段供可执行文件使用。
这些都是作为系统的一部分发布的。这就是我们的框架。你们中的许多人也使用自己的框架。
还有TBD文件,或者基于文本的dylib存根。那么这些是什么呢?当我们为iOS和macOS制作SDK时,我们有所有这些dylib,这些dylib有所有这些很棒的函数,比如MapKit和WebKit,你可能会想使用它们。但是我们不想随SDK一起提供这些dylib的整个副本,因为它会很大。编译器和链接器不需要Ant。它只需要运行程序。所以我们创建了一个叫做stub dylib的东西,我们删除了所有符号的主体,只保留了名字。
一旦我们这样做了,我们就为它们做了一个更容易使用的文本表示。目前,它们只用于分发SDK以减少大小。
所以你可能会在你的项目中看到它们,但你不必担心它们,它们只包含符号。
从Behind the Scenes of the Xcode Build Process - 48:38开始