iOS开发-Swift进阶之源码编译!
编译环境
- 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开发公众号:编程大鑫,不管你是小白还是大牛都欢迎入驻 ,让我们一起进步,共同发展!
- iOS开发进阶 - 日志输出框架CocoaLumberjack与XcodeColors插件的简单使用(swift版)
- iOS开发系列--Swift进阶
- iOS开发系列--Swift进阶
- iOS开发#使用Pods中使用Swift和Objective-C混编-编译不通过的原因-ld: symbol(s) not found for architecture arm64
- IOS开发之SWIFT进阶部分
- iOS开发系列--Swift进阶
- iOS开发特效源码:swift轮播图导航渐变跑马灯分段选择下拉菜单物流时间轴
- iOS开发进阶 - 日志输出框架CocoaLumberjack与XcodeColors插件的简单使用(swift版)
- iOS开发进阶 - 富文本正则替换表情
- 【Himi之Cocos2d-iOS游戏开发】系列博文26篇整合以及Android书籍的源码和样章▃11月10日更新第二十六章
- iOS 终端使用Clang编译 重写观察Runtime源码
- iOS开发日常-Carthage秘籍之【让现有的Swift项目支持Carthage】
- Swift开发IOS-UIWebView
- iOS开发 FFmpeg 编译及使用
- 2015App开发思维进阶(iOS、Android)
- ios开发学习--按钮(Button)效果源码分享--系列教程2
- Swift开发IOS的细节
- IOS开发语言Swift入门连载---基础部分
- Spring Cloud 微服务开发:入门、进阶与源码剖析 —— 14.2 Spring Cloud Alibaba Seata 概述
- ios开发学习-弹出视图(Popup View) 效果源码分享--系列教程1