作為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.png
build過程
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