iOS开发-Swift进阶之源码编译!

479 阅读2分钟

编译环境

  • MacOS Big Sur 11.0.1
  • Xcode 12.2
  • Python 2.x
  • brew install cmake ninja

编译步骤

准备工作

  • 新建一个文件夹,命名为swift-source

  • 由于拉取资源过程中,需要访问外网,所以需要梯子(各位童鞋自行解决)

第一步:clone swift源码

这里编译的是swift-5.3.1-Release。可以自行在官网找到对应的分支,需要注意的是:swift源码版本需要与Xcode版本匹配(官方编译文档有说明)

git clone --branch swift-5.3.1-RELEASE https://github.com/apple/swift.git

第二步:update-checkout

这步主要是clone编译swift相关的库,否则在编译时一定会失败,这步很关键!(编译过程会很长,建议休息时间编译)

./swift/utils/build-script -r --debug-swift-stdlib --lldb

这里编译需要注意一点:文件的路径尽量避免出现中文,中文有很大的概率会报错

第三步:采用ninja编译

编译过程可以使用ninja,也可以使用Xcode,但是Xcode编译之后的支持性不是太好,所以这里采用ninja编译

./swift/utils/build-script -r --debug-swift-stdlib --lldb

第四步:使用VSCode调试Swift

  • 首先,在VSCode中安装插件

  • 添加配置文件launch.json,并修改

需要注意的是**program**的路径需要与你编译的文件路径一致

{
    "version": "0.2.0",
    "configurations": [

        {
            "type": "lldb",
            "request": "launch",
            "name": "Debug",
            "program": "${workspaceFolder}/build/Ninja-RelWithDebInfoAssert+stdlib-DebugAssert/swift-macosx-x86_64/bin/swift",
            "args": [],
            "cwd": "${workspaceFolder}"
        }
   ]
}
  • 点击**Debug**运行,断住

然后过掉断点

  • 看到以下结果就是运行成功了

  • 然后切换至终端,我们可以开始源码调试啦。

  • 在终端中输入以下代码(也可以从swift文件拷贝)

    • 源码中搜索**swift_allocObject**(这个在后面文章会讲解,仅作为调试的例子),加上断点

    • 继续在终端输入**var t = CJLTeacher()**,回车

这样,我们就可以愉快的调试的Swift源码啦。

资料收录

由于文章篇幅有限,只能点到即止地介绍当前一些工作成果和思考,各个 Swift 还有一些新的方向在探索,如果你对 iOS 底层原理、架构设计、构建系统、如何面试有兴趣了解,你也可以关注我及时获取最新资料以及面试相关资料。如果你有什么意见和建议欢迎给我留言!

写的不好的地方欢迎大家指出,希望大家多留言讨论,让我们共同进步!

喜欢iOS的小伙伴可以关注我,一起学习交流!!!

收录