关于Xcode7中的tbd文件
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文件相关推荐
- Xcode7 Xcode6 中添加pch文件
在Xcode7 和 Xcode6 中添加.pch文件是一样的,具体操作图文如下: 第一步:在Xcode的项目里,一般在Supporting Files 文件夹下创建,选中Supporting File ...
- Xcode7中 添加 .dylib
转一个 Xcode 7 缺少 *.dylib库的解决方法 Xcode7中 Link Binary With Libraries 没有 .dylib库,只能找到对应的 .tbd,但不能代替使用,通过查找 ...
- 在Xcode7中搭建python开发环境
在Xcode7中搭建python开发环境 我使用的版本为Version 7.3 (7D175),关于基础配置部分,参考了Xcode6中搭建python开发环境的方法 环境搭建 1.找到电脑上安装Pyt ...
- 通过Xcode 10链接libstdc++来深入分析tbd文件
相信玩iOS开发的同学对tbd这个格式的文件已经不再陌生了.最近Xcode 10升级的时候,你会发现很多原先用libstdc++的库在新的Xcode已经没有链接通过.而临时的解决方案也比较简单,网上也 ...
- C++ 笔记(25)— 理解 C++ 中的头文件和源文件的作用
1. C++ 编译模式 通常,在一个 C++ 程序中,只包含两类文件: .cpp 文件,被称作 C++ 源文件,里面放的都是 C++ 的源代码 .h 文件,被称作 C++ 头文件,里面放的也是 C++ ...
- 怎么将vue模板转换为html,vue中自定义html文件的模板
如果默认生成的 HTML 文件不适合需求,可以创建/使用自定义模板. 一是通过 inject 选项,然后传递给定制的 HTML 文件.html-webpack-plugin 将会自动注入所有需要的 C ...
- android打开wav格式,FileNotFoundException从Android资产中打开wav文件
在我们的android应用程序中,我们打开位于assets/config/notification.wav中的wav文件.要打开和播放声音,我们使用下面的代码:FileNotFoundExceptio ...
- html img调用js,html调用js变量 如何在html中输出js文件中的变量
html页面代码中怎么调用js变量?html页面代码中怎么调用js变量,例如 在html代码中插入js代码: a=取浏览你把index1.js 中的onReady 去掉,把index1.js改成 fu ...
- android读取工程目录下的文件,Android编程实现读取工程中的txt文件功能
本文实例讲述了Android编程实现读取工程中的txt文件功能.分享给大家供大家参考,具体如下: 1. 众所周知,Android的res文件夹是用来存储资源的,可以在res文件夹下建立一个raw文件夹 ...
最新文章
- 成为算法工程师的路上,掌握什么思维会让自我提升突飞猛进?
- 卡尔曼滤波matlab_卡尔曼滤波(kalaman Filter)
- 假笨说-从一起GC血案谈到反射原理
- PHP进行图片下载的时候,出现图片损坏,无法打开(实质原因,多输出了一个空白字符ZWNBSP )
- SQL学习---第一章
- HarmonyOS之bytrace命令的使用
- 新东方mti百科知识pdf_20南航翻硕mti初试417上岸经验贴
- 57 MM配置-评估和科目设置-物料类型与账户分类参考对应关系
- 浅谈Eclipse GEF
- 在React / React Native中使用构造函数与getInitialState有什么区别?
- python不同颜色散点图_Python+matplotlib绘制不同大小和颜色散点图实例
- 90%人不知道的大厂面试流程和技巧
- 模拟一个简单的购房商贷月供计算器,按照以下公式计算总利息和每月还款金额:总利息=贷款金额×利息。 每月还款金额=(贷款金额×总利息)÷ 贷款年限。
- linux mysql ip_Linux下配置mysql允许指定IP远程访问
- 电脑配件 - 如何选择电脑显示屏幕 - 学习/实践
- Python爬虫爬取豆瓣书籍数据
- 转型经验分享|作为传统汽车工程师,我如何转型去阿里做无人驾驶?
- flask android app socketio加解密 匿名加密聊天室 不被任何官方非官方机构个人监视的匿名聊天室!!! 想聊什么就聊什么!
- 【Py】pyecharts数据可视化案例——地下室空气治理
- [ENVI] 定量遥感实验-地表温度反演与地表温度测定 (超详细步骤)
热门文章
- 计算机毕业设计springboot酒店管理系统uah43源码+系统+程序+lw文档+部署
- 好玩的android单机游戏,2019好玩的安卓单机游戏有哪些 2019好玩的安卓单机游戏图文推荐...
- 2020年做什么行业,发展比较好?
- 初中没毕业建议学计算机吗,初中没毕业学什么好 能学电脑技术吗?
- 顶尖的人都是怎么想的!(很残酷)
- jQuery阻止冒泡事件的几种方法
- 4Gu盘格式化之后124M
- 【C语言】静态库和动态库
- 计算机毕业设计ssm小区物业管理系统51c00系统+程序+源码+lw+远程部署
- python统计前十出现最多的词