Swift源码编译-让底层更清晰

WWDC2020.png

WWDC2020 大会将通过 Apple Developer AppApple Developer网站免费向所有开发者开放! 从去年火遍全网的 SwiftUI 以及 Combine 到今年全新的“Swift Student Challenge” 无时不刻都在透露 Swift 时代已经来临

本人也是Swift一个深度着迷的开发者,并且有点喜欢玩底层! 非常感谢苹果爸爸 Swift 高度开源, 但是日常开发过程中总感觉还是缺了一点什么...

其实说白了要是能够我不能懂的底层,直接跑进源码看看流程,分析一下原理!这就完美了... 所以我毫不犹豫:Swift源码编译走起

着急尝鲜的小伙伴,请点击我的快速通道:Swift源码编译-Github地址

一、Swift编译准备

  • apple/swift 官网地址 这里clone我们需要编译的源码
  • 版本准备:macOS 10.15.3 Xcode 11.5 (这是我当前的版本,应该是只需要 Xcode 11.2)
  • 这里最新的源码编译时需要 Xcode 12.0 我本人现在没有升级,况且还只是beta 就不去玩,毕竟还要一段时间!以防不稳定
  • 由于编译速度还是有点慢,建议电脑性能稍微高一点,具体你们自己定
  • 网络建议:小楼梯 (不解释),稳定网线
  • 最重要的就是:keep patient (肯定会有各种问题报错,还是耗时非常严重:1-2h 这是正常现象)

二、开始编译吧

首先编译的手法有很多:Xcode - Ninja - Linux - VScode !各有各的方便,这里我们不去说其他的先来一个大家非常熟悉的:Xcode

1:准备编译目录

创建一个你喜欢的文件目录

mkdir swift-source
cd swift-source

2:clone 源码

这里用的是 swift-5.2.4-RELEASE 这个稳定版本,对于现在开发来说够了!未来更新再说,请记住一定要根据我这个版本,因为版本不一样会和你Xcode不兼容,后面报错,我可就不负责了:哈哈哈哈

git clone --branch swift-5.2.4-RELEASE
https://github.com/apple/swift.git
  • 这里如果你有小楼梯,应该很快的

3:clone 补充核验

  • 跳到swift文件下面 utils/update-checkout
  • clone 出后面编译需要的文件
  • 这很重要,因为update-checkout 将检出Swift源目录旁边的存储库
  • 这一步也是比较耗时的,这个时候你可以:Have a cup of coffee
./swift/utils/update-checkout --tag swift-5.2.4-RELEASE --clone

4:buid Swift (waiting)

  • 利用swift源码中的脚本编译
./swift/utils/build-script -x -R --debug-swift
  • 苹果github上面也指出了几个编译实例,大家也可以自己去玩!
  • 如果你编译还不是很熟练,也想避免踩坑(毕竟这一踩就要1-2h) 跟我给你的步骤走,安全又可靠!
utils/build-script --release-debuginfo --debug-swift # Swift frontend built in debug
utils/build-script --release-debuginfo --debug-swift-stdlib # Standard library built in debug
utils/build-script --release-debuginfo --debug-swift --force-optimized-typechecker # Swift frontend sans type checker built in debug

当然也会有一些玩得好的,想要更多参数命令,推荐这个脚本查阅
./swift/utils/build-script -h 由于篇幅原因不展开,大家可以自行去玩!比如说编译标准库和编译LLDB以及全部 等等。。。

构建完上一步,就会进入非常漫长难受的等待过程!如果觉得无聊可以趁这个时间去看看我其他博客:Cooci_和谐学习——不急不躁

⚠️:BUILD SUCCEEDED 这个字眼好好看哦!😄

三、调试Swift源码

要在 Xcode 中打开 Swift 项目,请打开/swift-source/build/Xcode-ReleaseAssert+swift-DebugAssert/swift-macosx-x86_64/Swift.xcodeproj。它将为所有可用目标自动创建很多方案。常见的调试流程将涉及:

  • 选择 swift scheme。
  • 调出 scheme 编辑器(⌘⇧<)。
  • 选择 Arguments 选项卡,然后单击 +
  • 添加命令行选项,这个根据自行需求设置,如果没有特殊需求,正常编译
  • 关闭scheme 编辑器。
  • 编译并运行。

另一个选择是将方案更改为 Wait for executable to be launched,然后在终端中运行构建产品。

到目前为止,基本操作就完毕了,大家可以自由自在的畅玩在Swift的海洋,注意发量 ~ 哈哈哈~

四、构建失败原因分析

  • clone 失败大概率就是网络问题

  • 确保使用正确版本的 Xcode

  • 如果您已更改 Xcode 版本,但仍然遇到与Xcode版本有关的错误,请尝试将传递 --cleanbuild-script

  • 当发布新版本的 Xcode 时,您可以通过传递 --reconfigure 选项来更新构建,而无需重新编译整个项目。

  • 确保所有存储库都是上述 update-checkout 命令中最新的

感谢

Swift源码编译-Github地址

OK 这篇文章就先写到这里,大家可以先行去下载尝鲜,如果觉得还可以还请不要吝啬你的 点赞和star

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342