聊聊 Xcode 编译 ToolChain
来源:互联网 发布:淘宝退款空包 编辑:程序博客网 时间:2024/05/20 16:33
绝大部分开发者开发 iOS 或者 Mac APP 都会选择 Xcode 集成开发环境。Xcode 是一款强大的 GUI IDE,集开发、编译、调试和代码分析于一体,而在这背后,则是一系列工具的支撑,本文聊聊 Xcode 在编译过程涉及的工具及其作用。 —— 由网易云捕分享
“民之失德,乾糇以愆;他山之石,可以攻玉。”- 《诗经》
绝大部分开发者开发iOS或者Mac APP 都会选择Xcode集成开发环境。Xcode是一款强大的GUI IDE,集开发、编译、调试和代码分析于一体,而在这背后,则是一系列工具的支撑,本文聊聊Xcode在编译过程涉及的工具及其作用。一、编译ToolChina初窥
图1展示了在Xcode中选择Build时编译工程test-toolchain时的过程:查看图片图1:Build工程test-toolchain时的过程
从图1中可以看见,在Xcode中点击Build后,Xcode首先调用工具mkdir创建product目录,然后调用clang编译源码文件和链接生成可执行文件,调用ibtool编译storyboard文件,调用actool编译Asset文件等。可能是考虑到GUI的简洁和局限,Xcode并没有给出所有的编译涉及到的工具,我们通过命令行的方式来探索下~~
二、“黑乎乎”版的Xcode:xcodebuild
2.1 xcodebuild命令行编译Xcode工程
xcodebuild是编译Xcode工程的命令行工具,比如可用如下命令编译test-toolchain工程:
xcodebuild -project test-toolchain.xcodeproj -configuration Debug build
上面的命令表示:编译debug版本的test-toolchain,xcodebuild支持众多的选项配置,不指定会使用默认的设置。命令行的输出显示了更多的细节,如下部分片段:
=== BUILD TARGET test-toolchain OF PROJECT test-toolchain WITH CONFIGURATION Debug === Check dependencies Write auxiliary fileswrite-file /Users/netease/Desktop/ForTestApp/test-toolchain/......Create product structure /bin/mkdir -p /Users/netease/Desktop/ForTestApp/.../test-toolchain.app...** BUILD SUCCEEDED **
在其中,我们发现暴露了新的工具,如:builtin-productPackagingUtility打包工具、codesign签名工具等。那么,还有方法暴露更多的编译细节出来吗?请向下看~~注意: xcodebuild命令行编译工具和xcode IDE的编译环境变量是不一样的,xcodebuild默认是当前工程目录的build目录,而ide默认是/Users/用户名/Library/Developer/Xcode/DerivedData/Build/Intermediates/
2.2 Patch版的xcodebuild编译Xcode工程
利用DYLD_INSERT_LIBRARIES实现对Mac程序的动态库注入已经广为人知,在执行文件加载时,会调用注入库的构造函数,我们可以在这里将执行文件的名字打印出来,从而获取xcodebuild编译更多的细节。
动态库代码(名字为test_injector)如图2:
查看图片
图2:动态库test_injector代码
将injector编译,得到库:test_injector.dylib,然后注入到xcodebuild,如下:
DYLD_INSERT_LIBRARIES=./test_injector.dylib xcodebuild -project test-toolchain.xcodeproj -configuration Debug build
这次得到的信息如下:2016-07-28 19:00:53.874 xcodebuild[2038:85610] tool name:xcodebuild2016-07-28 19:00:53.904 xcodebuild[2038:85610] tool name:xcodebuild=== BUILD TARGET test-toolchain OF PROJECT test-toolchain WITH CONFIGURATION Debug === Check dependencies2016-07-28 19:00:54.396 sh[2042:85682] tool name:sh2016-07-28 19:00:54.426 sh[2045:85685] tool name:sh...CompileC build/test-toolchain.build/Debug-iphoneos/...2016-07-28 19:00:54.470 xcexec[2047:85693] tool name:xcexec2016-07-28 19:00:54.481 clang[2047:85693] tool name:clang2016-07-28 19:00:54.492 clang[2051:85701] tool name:clang...** BUILD SUCCEEDED **
可以看见,信息进一步丰富了,比如工具xcexec等。三、Xcode编译Toolchain汇总
使用patch版的xcodebuild,我们获得了Xcode在编译一个工程时所涉及的工具图谱,总结的信息见下表1:表1:Xcode 编译 ToolChain介绍工具名称用途介绍xcodebuild编译Xcode工程的命令行工具shShell工具mkdir创建目录xcexec执行wrapperclang编译器,内部封装了编译、优化过程ld链接器ibtoolnib资源文件本地化ibtoold资源文件链接actoolasset资源文件编译builtin-infoPlistUtilityPlist文件编译工具builtin-productPackagingUtility打包工具touch文件创建codesign创建、查看和修改签名codesign_allocate为Mach-O文件增加签名数据builtin-validationUtility校验工具
获得这些信息有什么好处呢,这个就是仁者见仁了,比如获取clang编译源码文件的时间,这儿也可当做一个切入点。
阅读全文
0 0
- 聊聊 Xcode 编译 ToolChain
- 在Leopard中编译搭建非官方iPhone toolchain开发环境并整合到XCode
- Yocto Toolchain编译busybox
- iphone toolchain 3.1.2 编译安装 --(2、编译toolchain)
- 外部Toolchain编译OpenWRT<iMX6UL>
- xcode中open toolchain开发iphone
- toolchain
- ToolChain
- 编译一个Cortex-M3 gcc toolchain
- 编译GNU toolchain for ARM 笔记
- Howto用自己的toolchain编译opencore
- Cross Toolchain-交叉编译工具链
- Cross Toolchain-交叉编译工具链
- Cross Toolchain-交叉编译工具链
- android NDK提取toolchain(交叉编译工具)
- android toolchain 交叉编译工具版本设置
- Cross Toolchain-交叉编译工具链
- openwrt toolchain 编译错误 *** [s-attrtab] Killed
- Node知识图谱
- 关于qemu的二三事(4)————qemu源码的下载与编译,以及fdt
- BZOJ 4916: 神犇和蒟蒻 杜教筛 数学
- Zookeeper + ActiveMQ 集群
- 【AtCoder Grand 015C】Nuske vs Phantom Thnook 题解
- 聊聊 Xcode 编译 ToolChain
- python中解析和生成pdf文件
- swing分组框
- React-Component(组件)
- 在树莓派上搭建LAMP服务
- 笔试编程经典(leetcode在线编程)
- android studio——替换全局的某个字符串
- 关于Objective C运行时(runtime)技术的几个要点总结
- java使用HttpClient模拟发送http的get、post请求