Mackit New

Mackit — Cache cleaner for macOS developers: scans regenerable caches left by Xcode / Node / Flutter and more, risk-labeled, so you can reclaim disk space.

Learn more
Notice We stopped publishing new developer articles in June 2024. Thank you for visiting. Archived posts
知识

Flutter 打包 iOS 应用?总结

Flutter 是一种跨平台开发框架,可以快速构建高质量的应用程序。本文将介绍如何使用 Flutter 打包 iOS 应用。首先,需要安装 Flutter SDK 和 Xcode,然后使用 flutter build ios 命令进行打包。接着,在 Xcode 中配置应用信息,进行签名和构建,最后生成 IPA 文件。需要留意的是,打包过程中可能会遇到各种问题,需要仔细排查并解决。

Flutter是一款跨平台的移动应用开发框架,能够让开发者使用一套代码同时构建iOS和安卓应用。在开发完成后,我们需如果要把应用打包并发布到应用商店或者内部分发,本文将介绍如何打包Flutter应用并发布到iOS应用商店。

## 原理

Flutter应用在iOS上的打包过程与原生iOS应用类似,都是将源代码编译成可执行文件,然后将可执行文件和资源文件打包成一个ipa文件。具体的打包过程如下

1. 编译源代码Flutter应用的源代码通过Dart编写,需要先将Dart代码编译成C++代码,然后再将C++代码编译成iOS可执行文件。这个过程由Flutter SDK提供的工具完成。

2. 处理资源文件Flutter应用的资源文件(如图片、字体等)需要打包到应用中,这个过程由Flutter SDK提供的工具完成。

3. 配置Xcode项目将生成的可执行文件和资源文件添加到Xcode项目中,并配置应用的基本信息(如应用名称、版本号、Bundle ID等)。

4. 打包使用Xcode的Archive功能将应用打包成ipa文件,可以选择发布到应用商店或者使用企业分发方法分发给内部员工。

## 详细介绍

下面我们将详细介绍如何打包Flutter应用并发布到iOS应用商店。

### 1. 配置Flutter环境

在打包Flutter应用之前,需要先配置好Flutter环境。可以参考Flutter官方文档进行安装和配置https://flutter.dev/docs/get-started/install

### 2. 编译源代码

使用Flutter SDK提供的工具编译源代码,生成可执行文件。具体命令如下

```

flutter build ios --release

```

该命令会将Flutter应用的Dart代码编译成C++代码,然后再将C++代码编译成iOS可执行文件,并生成一个Runner.app文件夹。

### 3. 处理资源文件

使用Flutter SDK提供的工具将Flutter应用的资源文件打包到Runner.app文件夹中。具体命令如下

```

flutter build ios --release --asset-bundle-arguments=--split-debug-info=//app.flx

```

该命令会将Flutter应用的资源文件打包到Runner.app文件夹中,并生成一个app.flx文件。

### 4. 配置Xcode项目

将生成的可执行文件和资源文件添加到Xcode项目中,并配置应用的基本信息。

1. 打开Xcode,选择File -> New -> Project,选择iOS -> Application -> Single View App,点击Next。

2. 填写应用的基本信息,如应用名称、组织名称、Bundle ID等,点击Next。

3. 选择应用的存储位置,点击Create。

4. 将生成的Runner.app文件夹拖拽到Xcode项目中,选择Copy items if needed,点击Finish。

5. 在Xcode中选择项目的Build Settings,找到Code Signing Identity和Provisioning Profile,选择对应的证书和配置文件。

6. 在Xcode中选择项目的Build Phases,点击“+”,选择New Run Script Phase,输入以下脚本

```

# This script gets the absolute path to the current directory

DIR=$( cd $( dirname ${BASH,SOURCE[0]} ) >/dev/null 2>&1 && pwd )

# This script sets the absolute path to the Flutter app bundle

FLUTTER,APP,BUNDLE=$DIR/Runner.app

# This script sets the absolute path to the app.flx file

FLUTTER,APP,FLX=$DIR/Runner.app/app.flx

# This script sets the absolute path to the output IPA file

IPA,OUTPUT,FILE=$DIR/Runner.ipa

# This script packages the app bundle and the app.flx file into an IPA file

xcrun ditto -c -k --sequesterRsrc --keepParent $FLUTTER,APP,BUNDLE $IPA,OUTPUT,FILE

xcrun ditto -c -k --sequesterRsrc --keepParent $FLUTTER,APP,FLX $IPA,OUTPUT,FILE/Payload/Runner.app/app.flx

```

该脚本将生成一个IPA文件,包含可执行文件和资源文件。

### 5. 打包并发布

使用Xcode的Archive功能将应用打包成ipa文件,可以选择发布到应用商店或者使用企业分发方法分发给内部员工。具体操作如下

1. 在Xcode中选择Product -> Archive。

2. 等待打包完成后,选择Distribute App。

3. 选择发布方法(如App Store Connect或Enterprise),填写相应的信息,点击Next。

4. 选择证书和配置文件,点击Next。

5. 点击Export,选择输出路径,点击Export。

6. 将生成的ipa文件上传到应用商店或者使用企业分发方法分发给内部员工。

## 总结

Flutter应用在iOS上的打包过程与原生iOS应用类似,需要先编译源代码生成可执行文件,然后将可执行文件和资源文件打包成ipa文件。在配置Xcode项目时,需要注意选择正确的证书和配置文件。打包完成后,可以选择发布到应用商店或者使用企业分发方法分发给内部员工。