浅析XCode编译过程

作者: 微微笑的蜗牛 | 来源:发表于2017-01-09 23:42 被阅读2659次

    作为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
    

    相关文章

      网友评论

      本文标题:浅析XCode编译过程

      本文链接:https://www.haomeiwen.com/subject/hdrxbttx.html