tbd 是 text-based stub libraries的意思, 是苹果在Xcode7中使用的一个技术,便于减少Xcode7中SDK的体积。

下面讲解下Xcode7如何通过tbd这个技术减少SDK的大小的。 Xcode7中和各个平台相关的sdk都在/Applications/Xcode.app/Contents/Developer/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目录下。

在使用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库为例,进入到CFNetwork.framework目录下你会看到一个CFNetwork.tbd文件,cat下

---
archs:           [ armv7, armv7s, arm64 ]
platform:        ios
install-name:    /System/Library/Frameworks/CFNetwork.framework/CFNetwork
current-version: 758.3.15
exports:         - archs:           [ armv7, armv7s, arm64 ]symbols:         [ '$ld$hide$os4.3$_NSHTTPCookieComment', '$ld$hide$os4.3$_NSHTTPCookieCommentURL', '$ld$hide$os4.3$_NSHTTPCookieDiscard', '$ld$hide$os4.3$_NSHTTPCookieDomain', '$ld$hide$os4.3$_NSHTTPCookieExpires', '$ld$hide$os4.3$_NSHTTPCookieLocationHeader', '$ld$hide$os4.3$_NSHTTPCookieManagerAcceptPolicyChangedNotification', '$ld$hide$os4.3$_NSHTTPCookieManagerCookiesChangedNotification', '$ld$hide$os4.3$_NSHTTPCookieMaximumAge', '$ld$hide$os4.3$_NSHTTPCookieName', '$ld$hide$os4.3$_NSHTTPCookieOriginURL', '$ld$hide$os4.3$_NSHTTPCookiePath', '$ld$hide$os4.3$_NSHTTPCookiePort', '$ld$hide$os4.3$_NSHTTPCookieSecure', '$ld$hide$os4.3$_NSHTTPCookieValue', '$ld$hide$os4.3$_NSHTTPCookieVersion', '$ld$hide$os4.3$_NSNetServicesErrorCode', '$ld$hide$os4.3$_NSNetServicesErrorDomain',.......

你会发现其实tbd文件就是一个文本文件,其中包含架构信息,以及在真实运行时候二进制所在的位置,以及包含了动态库的符号表还有类的一些信息,这些信息在编译阶段足够了。通过通过这种技术,可以大大减少所有的设备SDK的二进制动态库的体积,其中包含MacOSX,iPhoneOS,AppleTVOS,WatchOS

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

关于Xcode7中的tbd文件相关推荐

  1. Xcode7 Xcode6 中添加pch文件

    在Xcode7 和 Xcode6 中添加.pch文件是一样的,具体操作图文如下: 第一步:在Xcode的项目里,一般在Supporting Files 文件夹下创建,选中Supporting File ...

  2. Xcode7中 添加 .dylib

    转一个 Xcode 7 缺少 *.dylib库的解决方法 Xcode7中 Link Binary With Libraries 没有 .dylib库,只能找到对应的 .tbd,但不能代替使用,通过查找 ...

  3. 在Xcode7中搭建python开发环境

    在Xcode7中搭建python开发环境 我使用的版本为Version 7.3 (7D175),关于基础配置部分,参考了Xcode6中搭建python开发环境的方法 环境搭建 1.找到电脑上安装Pyt ...

  4. 通过Xcode 10链接libstdc++来深入分析tbd文件

    相信玩iOS开发的同学对tbd这个格式的文件已经不再陌生了.最近Xcode 10升级的时候,你会发现很多原先用libstdc++的库在新的Xcode已经没有链接通过.而临时的解决方案也比较简单,网上也 ...

  5. C++ 笔记(25)— 理解 C++ 中的头文件和源文件的作用

    1. C++ 编译模式 通常,在一个 C++ 程序中,只包含两类文件: .cpp 文件,被称作 C++ 源文件,里面放的都是 C++ 的源代码 .h 文件,被称作 C++ 头文件,里面放的也是 C++ ...

  6. 怎么将vue模板转换为html,vue中自定义html文件的模板

    如果默认生成的 HTML 文件不适合需求,可以创建/使用自定义模板. 一是通过 inject 选项,然后传递给定制的 HTML 文件.html-webpack-plugin 将会自动注入所有需要的 C ...

  7. android打开wav格式,FileNotFoundException从Android资产中打开wav文件

    在我们的android应用程序中,我们打开位于assets/config/notification.wav中的wav文件.要打开和播放声音,我们使用下面的代码:FileNotFoundExceptio ...

  8. html img调用js,html调用js变量 如何在html中输出js文件中的变量

    html页面代码中怎么调用js变量?html页面代码中怎么调用js变量,例如 在html代码中插入js代码: a=取浏览你把index1.js 中的onReady 去掉,把index1.js改成 fu ...

  9. android读取工程目录下的文件,Android编程实现读取工程中的txt文件功能

    本文实例讲述了Android编程实现读取工程中的txt文件功能.分享给大家供大家参考,具体如下: 1. 众所周知,Android的res文件夹是用来存储资源的,可以在res文件夹下建立一个raw文件夹 ...

最新文章

  1. 成为算法工程师的路上,掌握什么思维会让自我提升突飞猛进?
  2. 卡尔曼滤波matlab_卡尔曼滤波(kalaman Filter)
  3. 假笨说-从一起GC血案谈到反射原理
  4. PHP进行图片下载的时候,出现图片损坏,无法打开(实质原因,多输出了一个空白字符ZWNBSP )
  5. SQL学习---第一章
  6. HarmonyOS之bytrace命令的使用
  7. 新东方mti百科知识pdf_20南航翻硕mti初试417上岸经验贴
  8. 57 MM配置-评估和科目设置-物料类型与账户分类参考对应关系
  9. 浅谈Eclipse GEF
  10. 在React / React Native中使用构造函数与getInitialState有什么区别?
  11. python不同颜色散点图_Python+matplotlib绘制不同大小和颜色散点图实例
  12. 90%人不知道的大厂面试流程和技巧
  13. 模拟一个简单的购房商贷月供计算器,按照以下公式计算总利息和每月还款金额:总利息=贷款金额×利息。 每月还款金额=(贷款金额×总利息)÷ 贷款年限。
  14. linux mysql ip_Linux下配置mysql允许指定IP远程访问
  15. 电脑配件 - 如何选择电脑显示屏幕 - 学习/实践
  16. Python爬虫爬取豆瓣书籍数据
  17. 转型经验分享|作为传统汽车工程师,我如何转型去阿里做无人驾驶?
  18. flask android app socketio加解密 匿名加密聊天室 不被任何官方非官方机构个人监视的匿名聊天室!!! 想聊什么就聊什么!
  19. 【Py】pyecharts数据可视化案例——地下室空气治理
  20. [ENVI] 定量遥感实验-地表温度反演与地表温度测定 (超详细步骤)

热门文章

  1. 计算机毕业设计springboot酒店管理系统uah43源码+系统+程序+lw文档+部署
  2. 好玩的android单机游戏,2019好玩的安卓单机游戏有哪些 2019好玩的安卓单机游戏图文推荐...
  3. 2020年做什么行业,发展比较好?
  4. 初中没毕业建议学计算机吗,初中没毕业学什么好 能学电脑技术吗?
  5. 顶尖的人都是怎么想的!(很残酷)
  6. jQuery阻止冒泡事件的几种方法
  7. 4Gu盘格式化之后124M
  8. 【C语言】静态库和动态库
  9. 计算机毕业设计ssm小区物业管理系统51c00系统+程序+源码+lw+远程部署
  10. python统计前十出现最多的词