本文将向大家介绍 Flutter 的构建系统是如何将 Flutter 项目 (及其资源) 转换为 iOS 应用包的。我希望揭开一些构建步骤的神秘面纱,并解释生成出来的工件的用途,方便大家将这个流程集成到自己的构建环境中。关于工作流程,请注意: 在构建要发布的应用时,您可以直接使用 Flutter 工具,这样会简化构建流程。但也有一部分开发者可能会发现这个流程的可配置性不太理想,或是不适用于他们的构建设置或持续集成 (CI) 设置。如果您使用自定义的 Xcode 或 Gradle 设置,那 Flutter 工具带来的所有开箱即用的便利都是可选的,您完全可以尽情调整,以让它适合自己的工作流程。本文中的所有信息均适用于准备发布到 App Store 的 iOS 应用包。也就是说,项目是根据 Flutter 的发布模式 (Release Mode) 构建的。编译为 Debug 或 Profile 模式会使用不同的运行时和打包模型,以便支持热重装和观测工具。
Flutter 应用会将所有的用户界面在原生视图层级结构中渲染为单一的视图,如下图:
△ 在 Xcode 中看到的 Flutter 应用视图层级结构
应用包
使用 flutter build ios --release 命令创建 (或使用 IDE 直接创建) 的应用包 (application bundle) 看起来和典型的 iOS 应用包是相似的,该代码包内含应用可执行文件,以及所有引用到的框架和资源。
比如 Flutter 为 Runner 这个应用生成的代码包结构如下:
编译应