游览Xcode7中的tbd文件

最近弄H5离线打包,每次都报静态库啊,啥啥的,一大堆的错误,看着红眼睛。偶然间点开看见了这个东西


Xcode7中的tbd文件内容

然后觉得很奇怪,因为最近都被i386,arm64,7啊,这些CPU架构弄得很是头疼。就谷歌了一下。然后揭开它的面纱,我不知道接下来的有没有用,有些东西我也不知道在哪里。

简介

tbd 是 text-based stub libraries(基于文本的存根库)的意思, 是苹果在Xcode7中使用的一个技术,便于减少Xcode7中SDK的体积。

Xcode7如何通过tbd这个技术减少SDK的大小的

Xcode7中和各个平台相关的sdk都在/Applications/Xcode.app/Contents/Developer/Platforms
这个目录下,你可以看到如下的一些平台:

首先找到contents目录
然后找到platforms

这里列出了平台的名字 以及对应的动态链接库所需要的架构:
MacOSX (i386,x86_64)
iPhoneOS (armv7, armv7s, arm64)
iPhoneSimulator (i386,x86_64)
AppleTVOS (arm64)
AppleTVSimulator (x86_64)
WatchOS (armv7k)
WatchSimulator (i386)

每个平台的SDK都在对应的Developer/SDKs/
的子目录下,比如iPhoneOS的sdk在/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk
下, 每一个SDK目录下都会包含相应的动态Framework以及dylib库,分别在SDK目录下的System/Library/Frameworks
和/usr/lib
目录下。

别着急,一步一步来
Framework的位置
dylib库的位置

在使用tbd之前不管是哪个平台,Framework以及各个单独的dylib库的二进制都得放进来,数量多,体积大。但是真正有必要的其实只是各个模拟器要用的动态库,因为MacOSX的库系统自带,那些诸如iPhoneOS,AppleTVOS,WatchOS这些设备要用的动态库,也只是在设备上真正运行的时候才需要,编译的时候只需要一些简单的信息,符号表啥的,编译通过就好了,真正到设备上去跑的时候才真正需要整个动态库的二进制文件。

为了节省Xcode的体积,苹果创造了一种tbd文件,用作替代那些设备SDK下的动态库,这里我们以/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CFNetwork.framework
这个动态Framework库为例,进入到CFNet目录下你会看到一个CFNetwork.tbd文件,cat下

找到tbd文件
打开tbd文件进行查看

你会发现其实tbd文件就是一个文本文件,其中包含架构信息,以及在真实运行时候二进制所在的位置,以及包含了动态库的符号表还有类的一些信息,这些信息在编译阶段足够了。

通过通过这种技术,可以大大减少所有的设备SDK的二进制动态库的体积,其中包含MacOSX,iPhoneOS,AppleTVOS,WatchOS

模拟器SDK的动态库依然是原始的动态库二进制文件,这点你可以进到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks/CFNetwork.framework
目录下进行验证。

模拟器下的CFNetwork.framework的东西

文件的分类

一些文件的作用

一个特别的js文件

特别的一个js文件

两个可以在终端运行的文件

在终端运行两个文件模样

你看到的很通顺的话都不是我说的,我只发了图,就只知道了这么多,不要为我为什么,我也不知道。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • two Last login: Tue Aug 4 17:09:57 on ttys000 yushengyang...
    aofeilin阅读 1,090评论 1 9
  • 参考了以下几篇文章(谢谢各位作者大大的内容): http://www.jianshu.com/p/155a3cfb...
    辉546阅读 1,295评论 1 3
  • 首先如果遇到应用卡顿或者因为内存占用过多时一般使用Instruments里的来进行检测。但对于复杂情况可能就需要用...
    攻克乃还_阅读 2,058评论 0 7
  • 原文链接如何打包静态库文件为iOS? 在之前的辅导中,你学习了如何循环利用knob control,但是,如何让别...
    大亮code阅读 1,755评论 0 0
  • (原文:How to Create a Framework for iOS作者:Sam Davies 译者:Mr_...
    Yaanco阅读 2,428评论 4 5