Xcode 10 新编译系统你需要了解的 5 个特性

栏目: IOS · 发布时间: 5年前

内容简介:首发布于公众号iOS 知识小集。苹果随着 Xcode 9 的 preview 模式发布了回顾一下 new build system,从 Xcode 10 开始,可以从**

首发布于公众号iOS 知识小集。

苹果随着 Xcode 9 的 preview 模式发布了 Xcode New Build System ,默认是不开启的。Xcode 10 中默认是开启的,在你的已有工程中适应 new build system 可能面临一些问题。苹果完全意识到其中的一些问题,然后创建了独立的关于 new buiuld system 发布说明。我们在之前的blog post 中覆盖了 new build system 的内部细节,我们将要覆盖 iOS 开发者可能会遇到但苹果的发布说明中没有详细介绍的前 5 个问题,例如使用第三方工具 build new system。

Xcode 10: New Build System

回顾一下 new build system,从 Xcode 10 开始,可以从** Xcode-> Files-> Project/Workspace Settings **激活 new build system,我们可以在 legacy 和 new build system 之间切换。

Xcode 10 新编译系统你需要了解的 5 个特性

查看之前关于 Xcode new build system 的blog post 获得详细信息。如果你用 xcodebuild 在命令行里编译 iOS 工程,我们不得不传入额外的参数 -UseModernBuildSystem=YES 强制使用 new build system。new build system 叫 xcbuild 。苹果的 xcbuild 二进制文件路径如下所示。

/Applications/Xcode.app/Contents/SharedFrameworks/XCBuild.framework/Versions/A/Support/xcbuild
复制代码

New Build System 并行运行目标和构建阶段以加速整个 swift 编译。一旦从 Xcode 激活,我们将会开始从我们的 iOS 工程中的 new build system 中获益,同时遇到相关问题。我们将会介绍 Xcode New Build System 带来的常见问题和解决这些问题的潜在解决方法。我们将按照在 iOS 应用中每个受影响的范围分类这些问题。

1] info.plist

当一个 iOS 工程使用 New Build System 编译,一些基于 info.plist 文件的问题开始出现。这里有一些基于 New Build System 和 Info.plist 文件的规则你必须知道。

  • 任何 target 的 Copy Bundle Resources 编译阶段不应该有任何 plist 文件。否则 new build system 不会编译 app。另外,bundle 里的文件被复制多次,编译也不通过。

  • new build system 在 clean 后和增量编译中运行 info.plist 具有不同的优先级。clean 后编译,info.plist 在处理资源文件之后,链接 storyboard 之前,然而增量编译在签名之前。

  • 如果目标在仅在 Info.plist 有值,没有任何 Xcode 的引用文件目录,Xcode 编译系统编译失败。

###2] CocoaPods

iOS 工程有一些使用 CocoaPods 产生的问题。一些常见问题是:

  • 开发中的 Pods 只在运行 clean 后的编译更新。包含的 pods frameworks 编译阶段执行不稳定。Github 有一个相关 issue
  • 打包 app 可能失败,或者 app 内由于一些 Cocoapods 相关的编译阶段脚本运行不可靠造成可能有不稳定的表现。

简言之,Cocoapods 和 New build system 在一起工作工作不太好。

3] Run Script Phase

使用 new build system,你可能遇到 Run Script 阶段开始失败或是给出不稳定的结果。不要担心,这是一个关于这个问题的一个好结果。

在 Xcode 10 中, run script 编译阶段提升了很多,然而,我们不得不通过为 run script 阶段指定一些输入文件,帮助编译阶段处理。如果我们在 run script 阶段指定输入文件,对编译系统做出正确决定是重要的,就像 run scripts 需不需要被执行对于依赖的目标编译。Xcode 编译系统尝试并行的运行一些任务,如果 run script 阶段的输入没有被生成,编译系统迷惑然后失败。在适当的时候给 run scripts 提供输入文件始终是个好主意。随着输入文件增多,Xcode 10 提供在 .xcfilelist 格式问题件指定所有输入文件的方式,我们能够在 build phase 中以文件列表的形式添加这些文件。Xcode 编译系统始终会在没有输入文件,改变输入文件和丢失输出文件的时候运行 build phase。添加这些文件是重要的,避免在不必须的时候为所有增量编译系统运行这个 phase。

4] Clean Build Folder Action

使用 new build system,Xcode 的 clean 操作被废弃了,推荐使用 Clean Build Folder 操作。新的推荐的操作移除所有 iOS 应用的派生数据,引发从零开始干净的编译。这意味着如果你使用 Cocoapods,这会从零开始重新编译所有的 frameworks,在编译 iOS 工程时造成巨大的延时。如果你使用 Carthage 预编译 frameworks,不会有那么大的影响。如果你有 clean 编译的习惯,你需要特别关注这个等等待。同事也会面临缓慢的 Xcode 索引问题。

5] XCCONFIG Files

开发者大多会使用 .xcconfig 文件在某处为特殊的 targets 保持 Xcode 编译设置。这里有一些问题,在 xcconfig 文件里设置的一些条件变量可能不按逾期生效,导致编译失败。为了检查你的 xcconfig 文件,苹果推荐运行下面的命令。

defaults write com.apple.dt.XCBuild EnableCompatibilityWarningsForXCBuildTransition -bool YES

如果这个命令报任何警告和错误,我们需要修复它,获得稳定的编译。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Windows内核原理与实现

Windows内核原理与实现

潘爱民 / 电子工业出版社 / 2010年4月 / 99.00元

本书从操作系统原理的角度,详细解析了Windows如何实现现代操作系统的各个关键部件,包括进程、线程、物理内存和虚拟内存的管理,Windows中的同步和并发性支持,以及Windows的I/O模型。在介绍这些关键部件时,本书直接以Windows的源代码(WRK, Windows Research Kernel)为参照,因而读者可以了解像Windows这样的复杂操作系统是如何在x86处理器上运行的。 ......一起来看看 《Windows内核原理与实现》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具