Swift源码编译(Xcode)

347 阅读1分钟

MNY5qqjdYe.jpg

背景

我们每天都在跟swift打交道,对oc的底层原理我们可能很熟悉,但是对于swift可能就不自信了,这里我们先编译好swift源码拉开后续原理探索之路...

目标

  • 成功编译源码
  • 可以通过源码调试工程

环境

Apple建议:

Xnip2023-11-01_11-42-22.jpg

本篇文档环境:

  • os 13.1
  • xcode 14.2
  • swift 5.7.2
  • cmake 3.26.4
  • ninja 1.11.1

操作步骤

第1步: 拉取代码

github.com/apple/swift…

Xnip2023-11-01_10-43-11.jpg

最好和本地版本一致,执行如下指令获取swift版本

xcrun swift -version

第2步:拉取swift的依赖

进入swift源码目录下,执行如下命令:

./utils/update-checkout --tag swift-x.x.x-RELEASE --clone

注意:[x.x.x]需要下载的版本一致

第3步:编译

执行如下指令

./utils/build-script --xcode --debug --skip-build-benchmarks --swift-darwin-supported-archs "\$(uname -m)" --sccache --skip-ios --skip-tvos --skip-watchos --bootstrapping=off

看到这样算是成功了,我的编译了近4个多小时😭

Xnip2023-10-31_19-10-36.jpg

问题记录:

1.问题1

error: using unsupported Xcode version:
error: using unsupported Xcode version: ​ Xcode 13.1 Build version 13A1030d ​ Install one of: 12.3 (12C33) 12.4 (12D4e) 12.5 (12E262) 13.0 beta (13A5154h) 13.0 beta 4 (13A5201i) ​ Or set 'SKIP\_XCODE\_VERSION\_CHECK=1' in the environment

执行

export SKIP\_XCODE\_VERSION\_CHECK=1
  1. 问题2
The following build commands failed: Ld /Users/gegaozhao/Desktop/person/Person-Project/swift/swift\_build/build/Xcode-RelWithDebInfoAssert+stdlib-
DebugAssert/swift-macosx-x86\_64/bootstrapping1/RelWithDebInfo/bin/swift-frontend normal (in target 'swift-frontend-bootstrapping1' from project 'Swift') 
(1 failure) ERROR: command terminated with a non-zero exit status 65, aborting

这个问题是我用如下指令编译的

utils/build-script --bootstrapping1=off \ 
--release-debuginfo --debug-swift-stdlib \
--xcode --skip-ios --skip-watchos --skip-tvos \
--skip-build-benchmarks \ 
--swift-darwin-supported-archs="\$(uname -m)"

forums.swift.org/t/building-… 这个帖子找到答案,找到上面的编译指令解决,主要是添加了 --bootstrapping=off

注意:这里需要把原来的swift编译信息全部删除下,我的第一次没有成功就是因为存在之前旧的编译数据,上面的帖子也提示要注意下

推荐swift社区:forums.swift.org/t/building-… swift编译问题基本都可以解决

编译demo验证

第一步:打开编译好的swift源码工程 Xnip2023-10-31_20-03-07.jpg 第二步:第一次打开会提示对scheme的管理方式,因为存在很多scheme所以建议手动管理 Xnip2023-10-31_20-05-19.jpg

第三步:进入会提示新建scheme点击close Xnip2023-10-31_20-05-37.jpg

第四步:新建我们需要的Scheme Xnip2023-10-31_20-06-23.jpg 名字随便,这里我的名字是SwiftSourceCode

第五步:依赖 ALL_BUILD(self) Xnip2023-11-01_13-36-24.jpg

第六步:添加测试代码 main.swift Xnip2023-11-01_13-43-40.jpg Test.swift Xnip2023-11-01_13-44-14.jpg

第七步:运行 需要等一会...成功后如下 Xnip2023-11-01_12-58-21.jpg

Xnip2023-11-01_13-45-16.jpg

参考

官方编译介绍

swift社区