您的位置:首页 > 移动开发 > Swift

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

2021-05-25 14:06 1051 查看

编译环境

  • 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中安装插件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hbBS6EAz-1621922762700)(//upload-images.jianshu.io/upload_images/2251862-21c4a2ee54da7308.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)]

  • 添加配置文件

    launch.json
    ,并修改

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nZSzW9P2-1621922762701)(//upload-images.jianshu.io/upload_images/2251862-81d320da8eec98ce.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)]

    需要注意的是

    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
    运行,断住

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LG4ZQEl8-1621922762703)(//upload-images.jianshu.io/upload_images/2251862-08f4b350e750c3ff.png?imageMogr2/auto-orient/strip|imageView2/2/w/622/format/webp)]

    然后过掉断点

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vs6PZBEp-1621922762706)(//upload-images.jianshu.io/upload_images/2251862-033f35ccd9550c46.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)]

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

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UeYwHCyk-1621922762707)(//upload-images.jianshu.io/upload_images/2251862-de860a2b10893d5d.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)]

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

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

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yRT6FMnX-1621922762708)(//upload-images.jianshu.io/upload_images/2251862-92684919f60ef58f.png?imageMogr2/au 1e662 to-orient/strip|imageView2/2/w/1200/format/webp)]

  • 源码中搜索

    swift_allocObject
    (这个在后面文章会讲解,仅作为调试的例子),加上断点

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JtC7kQz4-1621922762710)(//upload-images.jianshu.io/upload_images/2251862-4d0b3194df5d373b.png?imageMogr2/auto-orient/strip|imageView2/2/w/1132/format/webp)]

  • 继续在终端输入

    var t = CJLTeacher()
    ,回车

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y5K7BqGl-1621922762711)(//upload-images.jianshu.io/upload_images/2251862-e551c997906706ca.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)]

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

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发公众号:编程大鑫,不管你是小白还是大牛都欢迎入驻 ,让我们一起进步,共同发展!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: