Xcode 编译设置
了解了这么多编译原理,除了写一个自动化编译脚本以外,还可以看懂很多之前完全看不明白的编译错误。在 Xcode 中,也可以对编译过程进行完整的设置,很多时候编译错误的解决就是在这里进行的。
1.1 Build Settings
这里是编译设置,针对编译流程中的各个过程进行参数和工具的配置:
-
Architectures:编译目标 CPU 架构,这里比较常见的是 Build Active * Architectures Only(只编译为当前架构,是指你在 scheme 中选定的设备的 CPU 架构),debug 设置为 YES,Release 设置为 NO。
-
Assets:Assets.xcassets 资源组的配置。
-
Build Locations:查看 Build 日志可以看到在编译过程中的目标文件夹。
-
Build Options:这里是一些编译的选项设定,包含:
- 是否总是嵌入 Swift 标准库,这个在静态库和动态库的第一篇文章中有讲,iOS 系统目前是不包含 Swift 标准库的,都是被打包在项目中。
- c/c++/objective-c 编译器:Apple LLVM 9.0
- 是否打开 Bitcode
- …
-
Deployment:iOS 部署设置。说白了就是安装到手机的设置。
-
Headers:头文件?具体作用不详,知道的可以说一下。
-
Kernel Module:内核模块,作用不详。
-
Linking:链接设置,链接路径、链接标记、Mach-O 文件类型。
-
Packaging:打包设置,info.plist 的路径设置、Bundle ID 、App 显示名称的设置。
-
Search Paths:库的搜索路径、头文件的搜索路径。
-
Signing:签名设置,开发、生产的签名设置,这些都和你在开发者网站配置的证书相关。
-
Testing:测试设置,作用不详。
-
Text-Based API:基于文本的 API,字面翻译,作用不详。
-
Versioning:版本管理。
-
Apple LLVM 9.0 系列:LLVM 的配置,包含路径、编译器每一步的设置、语言设置。在这里 Apple LLVM 9.0 - Warnings 可以选择在编译的时候将哪些情况认定为错误(Error)和警告(Warning),可以开启困难模式,任何一个小的警告都会被认定为错误。
-
Asset Catalog Compiler - Options:Asset 文件的编译设置。
-
Interface Builder Storyboard Compiler - Options:Storyboard 的编译设置。
-
以及一些静态分析和 Swift 编译器的设定。
1.2 Build Phases
编译阶段,编译的时候将根据顺序来进行编译。这里固定的有:
- Compile Sources:编译源文件。
- Link Binary With Libraries:相关的链接库。
- Copy Bundle Resources:要拷贝的资源文件,有时候如果一个资源文件在开发过程中发现找不到,可以在这里找一下,看看是不是加进来了。
如果使用了 Cocoapods,那么将会被添加:
- [CP] Check Pods Manifest.lock:检查 Podfile.lock 和 Manifest.lock 文件的一致性,这个会再后面的 Cocoapods 原理中详细解释。
- [CP] Embed Pods Frameworks:将所有 cocoapods 打的 framework 拷贝到包中。
- [CP] Copy Pods Resources:将所有 cocoapods 的资源文件拷贝到包中。
1.3 Build Rules
编译规则,这里设定了不同文件的处理方式,例如:
- Copy Plist File:在编译打包的时候,将 info.plist 文件拷贝。
- Compress PNG File:在编译打包的时候,将 PNG 文件压缩。
- Swift Compiler:Swift 文件的编译方式,使用 Swift 编译器。
- ….