作为iOS开发,XCode一天编译几十上百遍是常事。cmd+B,两指一按,哗啦啦的就开始build了。但是,我们是否曾想过,这背后究竟做了哪些工作呢?工具会用是最基本的,但也要适当了解其原理。
build一瞥
模拟器build过程如图。
process@2x.png
大致的过程是:
- compile各个.m文件
- copy静态资源,包括img,string,font。
- compile xib
- compile storyboard
- compile asset catalogs
- process info.plist
- link storyboards
- run custom script
- touch app
- sign app
- validate app(真机build有)
另外,如果工程有第三方依赖库,首先会build依赖库target,然后build主target。
QQ20170106-5@2x.pngbuild过程
clang compile
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c -arch x86_64 -W -c path/main.m -o path/main.o
- -x 表示编译语言
- -arch 表示编译的架构
- -W 各种编译警告
- -c 表示进行预处理,编译,汇编过程
- -o 输出结果
copy静态资源
copy图片到app
/Applications/Xcode.app/Contents/Developer/usr/bin/copypng
-compress -strip-PNG-text path/MaskView/MaskView/en.lproj/icons.png path/MaskView.app/en.lproj/icons.png
copy strings
builtin-copyStrings
compile xib
编译xib,生成nib文件
/Applications/Xcode.app/Contents/Developer/usr/bin/ibtool
compile storyboard
编译storyboard,生成.storyboardc文件,打开包内容,是nib+plist。
/Applications/Xcode.app/Contents/Developer/usr/bin/ibtool
compile asset catalogs
生成Asset.car文件。
/Applications/Xcode.app/Contents/Developer/usr/bin/actool
process info.plist
处理info.plist
builtin-infoPlistUtility
link storyboards
链接storyboard
/Applications/Xcode.app/Contents/Developer/usr/bin/ibtool
run custom script
执行脚本
/bin/sh
touch app
/usr/bin/touch
sign app
对app进行签名
/usr/bin/codesign
validate app
校验app
builtin-validationUtility
网友评论