作者:空白记忆
链接:https://juejin.cn/post/6914679835478458376
前言
OC的底层研究告于段落,下面我们研究Swift底层,研究Swift底层首先要对Swift源码进行编译
,下面我们就来编译一下Swift源码
编译环境
MacOS Catalina 10.15.5
Xcode 12.2
Python 2.x
brew install cmake ninja
编译步骤
准备工作
- 新建一个文件夹,命名为swift-compile
- 由于拉取资源过程需要访问外网,所以需要科学上网
第一步:clone swift源码
这里我编译的是swift-5.3.1-Release
,可以自行在官网上找到对应的分支,需要注意的是:Swift源码版本需要与Xcode版本匹配
(官方编译文档有说明)
git clone --branch swift-5.3.1-RELEASE https://github.com/apple/swift.git
此时完成文件的大小应该有3个多G
大小
第二步:update-checkout
这步非常重要,因为update-checkout
会clone编译swift相关的库
,不然在后面编译时一定会失败
,这步很关键!(编译过程会很长,我编译1个多小时,建议休息时间编译)
./swift/utils/build-script -r --debug-swift-stdlib --lldb
第三步:编译
编译过程中既可以使用ninja
,也可以使用Xcode
进行编译。但是Xcode编译
后的支持性不是特别好
,所以这里就使用了ninja
来作为编译工具了
./swift/utils/build-script -r --debug-swift-stdlib --lldb
此时包的大小如下图所示: 使用VSCode调试Swift
- 首先,在VSCode中安装
CodeLLDB
插件
- 添加配置
JSON文件
program上的路径需要淤泥编译的文件路径一致
不一致编译会报错
- 点击
Debug运行
,此时会断住,如下图所示:
到此说明编译已经成功了,下面我们进行调试
调试
这里有一个iOS交流圈:891 488 181 不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
- 切换至
终端
- 在终端中写入一下代码
- 源码中搜索
swift_allocObject
(这个在后面会研究,再次仅做调试的例子),加上断点
- 继续在终端输入
var t = LjTeacher()
,回车
我们发现断点断住了,这说明调试成功了(LjTeacher()内部调用了swift_allocObject方法)
至此Swift源码调试完成,为后面探索Swift底层实现提供很直观帮助。
文章到这里就结束了,你也可以私信我及时获取最新资料以及面试相关资料。如果你有什么意见和建议欢迎给我留言。