将 Flutter 模块集成到您的 iOS 项目中
了解如何将 Flutter 模块集成到您现有的 iOS 项目中。
Flutter UI 组件可以逐步添加到您现有的 iOS 应用程序中,作为嵌入式框架。要将 Flutter 嵌入到您现有的应用程序中,请考虑以下三种方法之一。
| 嵌入方法 | 方法论 | 优势 |
|---|---|---|
| 使用 CocoaPods (推荐) | 安装并使用 Flutter SDK 和 CocoaPods。Flutter 每次 Xcode 构建 iOS 应用时都会从源代码编译 flutter_module。 |
将 Flutter 嵌入到您的应用中的最简单方法。 |
| 使用 iOS 框架 | 为 Flutter 组件创建 iOS 框架,将其嵌入到您的 iOS 中,并更新您现有应用程序的构建设置。 | 不需要每个开发人员在其本地机器上安装 Flutter SDK 和 CocoaPods。 |
| 使用 iOS 框架和 CocoaPods | 将框架嵌入到您的 iOS 应用和插件中,但将 Flutter 引擎作为 CocoaPods podspec 分发。 | 提供了一种替代方案,用于分发大型 Flutter 引擎 ( Flutter.xcframework ) 库。 |
当您将 Flutter 添加到现有的 iOS 应用时,它会 增加 iOS 应用的大小。
有关使用使用 UIKit 构建的应用的示例,请参阅 add_to_app 代码示例中的 iOS 目录。有关使用 SwiftUI 的示例,请参阅 News Feed App 中的 iOS 目录。
开发系统要求
#Flutter 需要最新版本的 Xcode 和 CocoaPods。
创建 Flutter 模块
#要使用任何方法将 Flutter 嵌入到您现有的应用程序中,首先创建一个 Flutter 模块。使用以下命令创建 Flutter 模块。
cd /path/to/my_flutter
flutter create --template module my_flutter
Flutter 在 /path/to/my_flutter/ 下创建模块项目。如果您使用 CocoaPods 方法,请将模块保存在与您现有的 iOS 应用相同的父目录中。
从 Flutter 模块目录,您可以运行与任何其他 Flutter 项目中相同的 flutter 命令,例如 flutter run 或 flutter build ios。您还可以使用 Flutter 和 Dart 插件在 VS Code 或 Android Studio/IntelliJ 中运行该模块。该项目包含模块的单视图示例版本,在将其嵌入到您现有的 iOS 应用中之前。这有助于测试 Flutter 代码的独立部分。
组织您的模块
#my_flutter 模块目录结构类似于典型的 Flutter 应用。
-
my_flutter/
.ios/
- Runner.xcworkspace
Flutter/
- podhelper.rb
lib/
- main.dart
- test/
- pubspec.yaml
您的 Dart 代码应添加到 lib/ 目录。您的 Flutter 依赖项、包和插件必须添加到 pubspec.yaml 文件中。
.ios/ 隐藏子文件夹包含一个 Xcode 工作区,您可以在其中运行模块的独立版本。此包装项目引导您的 Flutter 代码。它包含辅助脚本,以方便构建框架或使用 CocoaPods 将模块嵌入到您现有的应用程序中。
将 Flutter 模块嵌入到您的 iOS 应用中
#在您开发完 Flutter 模块后,可以使用页面顶部的表格中描述的方法将其嵌入。
您可以在 Debug 模式下在模拟器或真机上运行,也可以在 Release 模式下在真机上运行。
使用 CocoaPods 和 Flutter SDK
#方法
#第一种方法使用 CocoaPods 嵌入 Flutter 模块。CocoaPods 管理 Swift 项目的依赖项,包括 Flutter 代码和插件。每次 Xcode 构建应用时,CocoaPods 都会嵌入 Flutter 模块。
这允许您在无需在 Xcode 之外运行其他命令的情况下,使用最新版本的 Flutter 模块进行快速迭代。
要了解更多关于 CocoaPods 的信息,请参阅 CocoaPods 入门指南。
观看视频
#如果观看视频有助于您学习,此视频涵盖了将 Flutter 添加到 iOS 应用的过程
要求
#您的项目中的每个开发人员都必须在其本地机器上安装 Flutter SDK 和 CocoaPods。
示例项目结构
#本节假定您的现有应用和 Flutter 模块位于同级目录中。如果您的目录结构不同,请调整相对路径。示例目录结构如下所示
-
my_flutter/
- .ios/
Flutter/
- podhelper.rb
-
MyApp/
- Podfile
更新您的 Podfile
#将您的 Flutter 模块添加到您的 Podfile 配置文件中。本节假定您将您的 Swift 应用命名为 MyApp。
-
(可选) 如果您现有的应用缺少
Podfile配置文件,请导航到您应用目录的根目录。使用pod init命令创建Podfile文件。 -
更新您的
Podfile配置文件。在
platform声明之后添加以下行。MyApp/Podfilerubyflutter_application_path = '../my_flutter' load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')对于需要嵌入 Flutter 的每个 Podfile target,请调用
install_all_flutter_pods(flutter_application_path)方法。在之前的步骤中的设置之后添加这些调用。MyApp/Podfilerubytarget 'MyApp' do install_all_flutter_pods(flutter_application_path) end在
Podfile的post_install块中,调用flutter_post_install(installer)。此块应是Podfile配置文件的最后一个块。MyApp/Podfilerubypost_install do |installer| flutter_post_install(installer) if defined?(flutter_post_install) end
要查看示例 Podfile,请参阅此 Flutter Podfile 示例。
嵌入您的框架
#在构建时,Xcode 会将您的 Dart 代码、每个 Flutter 插件和 Flutter 引擎打包到各自的 *.xcframework 包中。CocoaPod 的 podhelper.rb 脚本然后将这些 *.xcframework 包嵌入到您的项目中。
Flutter.xcframework包含 Flutter 引擎。App.xcframework包含此项目的编译后的 Dart 代码。<plugin>.xcframework包含一个 Flutter 插件。
要将 Flutter 引擎、您的 Dart 代码和您的 Flutter 插件嵌入到您的 iOS 应用中,请完成以下步骤。
-
刷新您的 Flutter 插件。
如果您更改了
pubspec.yaml文件中的 Flutter 依赖项,请在您的 Flutter 模块目录中运行flutter pub get。这将刷新podhelper.rb脚本读取的插件列表。flutter pub get -
使用 CocoaPods 嵌入插件和框架。
导航到您的 iOS 应用项目,位于
/path/to/MyApp/MyApp。使用
pod install命令。pod install
您的 iOS 应用的 Debug 和 Release 构建配置嵌入了与该构建模式对应的 Flutter 组件。
-
构建项目。
在 Xcode 中打开
MyApp.xcworkspace。验证您是否正在打开
MyApp.xcworkspace而不是打开MyApp.xcodeproj。.xcworkspace文件具有 CocoaPod 依赖项,而.xcodeproj没有。选择 Product > Build 或按 Cmd + B。
设置 LLDB Init 文件
#-
生成 Flutter LLDB 文件。
- 在您的 flutter 应用中,运行以下命令
flutter build ios --config-only这将在
.ios/Flutter/ephemeral目录中生成 LLDB 文件。 -
设置 LLDB Init 文件。
转到 Product > Scheme > Edit Scheme。
在左侧边栏中选择 Run 部分。
使用与您在 更新您的 Podfile 部分中放入 Flutter 应用中的相同相对路径设置 LLDB Init File。
$(SRCROOT)/../my_flutter/.ios/Flutter/ephemeral/flutter_lldbinit如果您的方案已经具有 LLDB Init File,您可以将 Flutter 的 LLDB 文件添加到其中。Flutter LLDB Init 文件的路径必须相对于您的项目的 LLDB Init 文件的位置。
例如,如果您的 LLDB 文件位于
/path/to/MyApp/.lldbinit,您将添加以下内容command source --relative-to-command-file "../my_flutter/.ios/Flutter/ephemeral/flutter_lldbinit"
在 Xcode 中链接和嵌入框架
#方法
#在第二种方法中,编辑您现有的 Xcode 项目,生成必要的框架,并将它们嵌入到您的应用中。Flutter 为 Flutter 本身、您编译的 Dart 代码以及每个 Flutter 插件生成 iOS 框架。嵌入这些框架并更新您现有的应用程序的构建设置。
要求
#此方法不需要额外的软件或硬件要求。在以下用例中使用此方法
- 您的团队成员无法安装 Flutter SDK 和 CocoaPods
- 您不想在现有的 iOS 应用中使用 CocoaPods 作为依赖项管理器
局限性
#Flutter 无法处理 具有 xcframework 的常见依赖项。如果您同时使用主机应用和 Flutter 模块的插件定义相同的 pod 依赖项,并且使用此选项集成 Flutter 模块,则会发生错误。这些错误包括类似 Multiple commands produce 'CommonDependency.framework' 的问题。
要解决此问题,请将 Flutter 模块的每个插件源链接到主机应用的 Podfile 中的其 podspec 文件中。链接源而不是插件的 xcframework 框架。下一节解释了如何 生成该框架。
为了防止由于公共依赖项存在而发生的错误,请使用 flutter build ios-framework 命令,并加上 --no-plugins 标志。
示例项目结构
#以下示例假定您希望将框架生成到 /path/to/MyApp/Flutter/。
flutter build ios-framework --output=/path/to/MyApp/Flutter/
每次更改 Flutter 模块中的代码时,都必须运行此命令。
生成的项目结构应类似于以下目录树。
-
/path/to/MyApp/
Flutter/
Debug/
- Flutter.xcframework
- App.xcframework
- FlutterPluginRegistrant.xcframework(如果您有带有 iOS 平台代码的插件)
- example_plugin.xcframework(每个插件一个框架文件)
Profile/
- Flutter.xcframework
- App.xcframework
- FlutterPluginRegistrant.xcframework
- example_plugin.xcframework
Release/
- Flutter.xcframework
- App.xcframework
- FlutterPluginRegistrant.xcframework
- example_plugin.xcframework
步骤
#您将生成的框架链接、嵌入或同时进行链接和嵌入到您现有的 Xcode 应用中,取决于框架的类型。
- 链接并嵌入动态框架。
- 链接静态框架。 切勿嵌入它们。
Flutter 插件可能会生成 静态或动态框架。链接静态框架,切勿嵌入它们。
如果您将静态框架嵌入到您的 iOS 应用中,您将无法将该应用发布到 App Store。发布会因 Found an unexpected Mach-O header code 存档错误而失败。
链接所有框架
#要链接必要的框架,请按照以下步骤操作。
-
选择要链接的框架。
在 项目导航器 中,单击您的项目。
单击 构建阶段 选项卡。
展开 链接二进制文件与库。

在 Xcode 中展开 链接二进制文件与库 构建阶段
单击 + (加号)。
单击 添加其他...,然后单击 添加文件...。
在 选择要添加的框架和库: 对话框中,导航到
/path/to/MyApp/Flutter/Release/目录。命令单击该目录中的框架,然后单击 打开。

从 Xcode 的 选择要添加的框架和库: 对话框中选择要链接的框架
-
更新库的路径以考虑构建模式。
启动 Finder。
导航到
/path/to/MyApp/目录。右键单击
MyApp.xcodeproj并选择 显示包内容。使用 Xcode 打开
project.pbxproj。该文件在 Xcode 的文本编辑器中打开。这也会锁定 项目导航器,直到您关闭文本编辑器。
Xcode 文本编辑器中打开的
project-pbxproj文件在
/* Begin PBXFileReference section */中找到类似于以下文本的行。312885572C1A441C009F74FF /* Flutter.xcframework */ = { isa = PBXFileReference; expectedSignature = "AppleDeveloperProgram:S8QB4VV633:FLUTTER.IO LLC"; lastKnownFileType = wrapper.xcframework; name = Flutter.xcframework; path = Flutter/Release/Flutter.xcframework; sourceTree = "<group>"; }; 312885582C1A441C009F74FF /* App.xcframework */ = { isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = App.xcframework; path = Flutter/Release/App.xcframework; sourceTree = "<group>"; };更改上一步中突出显示的
Release文本,并将其更改为$(CONFIGURATION)。同时用引号将路径括起来。312885572C1A441C009F74FF /* Flutter.xcframework */ = { isa = PBXFileReference; expectedSignature = "AppleDeveloperProgram:S8QB4VV633:FLUTTER.IO LLC"; lastKnownFileType = wrapper.xcframework; name = Flutter.xcframework; path = "Flutter/$(CONFIGURATION)/Flutter.xcframework"; sourceTree = "<group>"; }; 312885582C1A441C009F74FF /* App.xcframework */ = { isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = App.xcframework; path = "Flutter/$(CONFIGURATION)/App.xcframework"; sourceTree = "<group>"; };
-
更新搜索路径。
单击 构建设置 选项卡。
导航到 搜索路径
双击 框架搜索路径 右侧。
在组合框中,单击 + (加号)。
键入
$(inherited)并按 Enter。单击 + (加号)。
键入
$(PROJECT_DIR)/Flutter/$(CONFIGURATION)/并按 Enter。
更新 Xcode 中的 框架搜索路径
链接框架后,它们应显示在目标 常规 设置的 框架、库和嵌入内容 部分中。
嵌入动态框架
#要嵌入您的动态框架,请完成以下步骤。
-
导航到 常规 > 框架、库和嵌入内容。
-
单击您的每个动态框架,然后选择 嵌入 & 签名。

在 Xcode 中为您的每个框架选择 嵌入 & 签名
不要包含任何静态框架,包括
FlutterPluginRegistrant.xcframework。 单击 构建阶段 选项卡。
-
展开 嵌入框架。您的动态框架应显示在该部分中。

Xcode 中展开的 嵌入框架 构建阶段
-
构建项目。
在 Xcode 中打开
MyApp.xcworkspace。验证您是否正在打开
MyApp.xcworkspace而不是打开MyApp.xcodeproj。.xcworkspace文件具有 CocoaPod 依赖项,而.xcodeproj没有。选择 产品 > 构建 或按 Cmd + B。
设置 LLDB Init 文件
#-
生成 Flutter LLDB 文件。
- 在您的 Flutter 应用程序中,如果您尚未这样做,请重新运行
flutter build ios-framework
flutter build ios-framework --output=/path/to/MyApp/Flutter/这将在
/path/to/MyApp/Flutter/目录中生成 LLDB 文件。 - 在您的 Flutter 应用程序中,如果您尚未这样做,请重新运行
-
设置 LLDB Init 文件。
转到 Product > Scheme > Edit Scheme。
在左侧边栏中选择 Run 部分。
将 LLDB 初始化文件 设置为以下内容
$(PROJECT_DIR)/Flutter/flutter_lldbinit如果您的方案已经具有 LLDB Init File,您可以将 Flutter 的 LLDB 文件添加到其中。Flutter LLDB Init 文件的路径必须相对于您的项目的 LLDB Init 文件的位置。
例如,如果您的 LLDB 文件位于
/path/to/MyApp/.lldbinit,您将添加以下内容command source --relative-to-command-file "Flutter/flutter_lldbinit"
在 Xcode 和 Flutter 框架中使用框架作为 podspec
#方法
#此方法生成 Flutter 作为 CocoaPods podspec,而不是将大型 Flutter.xcframework 分发给其他开发人员、机器或持续集成系统。Flutter 仍然为您的编译后的 Dart 代码以及您的每个 Flutter 插件生成 iOS 框架。嵌入这些框架并更新您现有应用程序的构建设置。
要求
#此方法不需要额外的软件或硬件要求。在以下用例中使用此方法
- 您的团队成员无法安装 Flutter SDK 和 CocoaPods
- 您不想在现有的 iOS 应用中使用 CocoaPods 作为依赖项管理器
局限性
#Flutter 无法处理 具有 xcframework 的常见依赖项。如果您同时使用主机应用和 Flutter 模块的插件定义相同的 pod 依赖项,并且使用此选项集成 Flutter 模块,则会发生错误。这些错误包括类似 Multiple commands produce 'CommonDependency.framework' 的问题。
要解决此问题,请将 Flutter 模块的每个插件源链接到主机应用的 Podfile 中的其 podspec 文件中。链接源而不是插件的 xcframework 框架。下一节解释了如何 生成该框架。
为了防止由于公共依赖项存在而发生的错误,请使用 flutter build ios-framework 命令,并加上 --no-plugins 标志。
此方法仅适用于 beta 或 stable 发布通道。
示例项目结构
#以下示例假定您希望将框架生成到 /path/to/MyApp/Flutter/。
flutter build ios-framework --output=/path/to/MyApp/Flutter/
每次更改 Flutter 模块中的代码时,都必须运行此命令。
生成的项目结构应类似于以下目录树。
-
/path/to/MyApp/
Flutter/
Debug/
- Flutter.xcframework
- App.xcframework
- FlutterPluginRegistrant.xcframework(如果您有带有 iOS 平台代码的插件)
- example_plugin.xcframework(每个插件一个框架文件)
Profile/
- Flutter.xcframework
- App.xcframework
- FlutterPluginRegistrant.xcframework
- example_plugin.xcframework
Release/
- Flutter.xcframework
- App.xcframework
- FlutterPluginRegistrant.xcframework
- example_plugin.xcframework
将 Flutter 引擎添加到您的 Podfile
#可以使用 CocoaPods 的宿主应用将 Flutter 引擎添加到其 Podfile。
pod 'Flutter', :podspec => '/path/to/MyApp/Flutter/[build mode]/Flutter.podspec'
链接并嵌入应用和插件框架
#Flutter 插件可能会生成 静态或动态框架。链接静态框架,切勿嵌入它们。
如果您将静态框架嵌入到您的 iOS 应用中,您将无法将该应用发布到 App Store。发布会因 Found an unexpected Mach-O header code 存档错误而失败。
链接所有框架
#要链接必要的框架,请按照以下步骤操作。
-
选择要链接的框架。
在 项目导航器 中,单击您的项目。
单击 构建阶段 选项卡。
展开 链接二进制文件与库。

在 Xcode 中展开 链接二进制文件与库 构建阶段
单击 + (加号)。
单击 添加其他...,然后单击 添加文件...。
在 选择要添加的框架和库: 对话框中,导航到
/path/to/MyApp/Flutter/Release/目录。命令单击该目录中的框架,然后单击 打开。

从 Xcode 的 选择要添加的框架和库: 对话框中选择要链接的框架
-
更新库的路径以考虑构建模式。
启动 Finder。
导航到
/path/to/MyApp/目录。右键单击
MyApp.xcodeproj并选择 显示包内容。使用 Xcode 打开
project.pbxproj。该文件在 Xcode 的文本编辑器中打开。这也会锁定 项目导航器,直到您关闭文本编辑器。
Xcode 文本编辑器中打开的
project-pbxproj文件在
/* Begin PBXFileReference section */中找到类似于以下文本的行。312885572C1A441C009F74FF /* Flutter.xcframework */ = { isa = PBXFileReference; expectedSignature = "AppleDeveloperProgram:S8QB4VV633:FLUTTER.IO LLC"; lastKnownFileType = wrapper.xcframework; name = Flutter.xcframework; path = Flutter/Release/Flutter.xcframework; sourceTree = "<group>"; }; 312885582C1A441C009F74FF /* App.xcframework */ = { isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = App.xcframework; path = Flutter/Release/App.xcframework; sourceTree = "<group>"; };更改上一步中突出显示的
Release文本,并将其更改为$(CONFIGURATION)。同时用引号将路径括起来。312885572C1A441C009F74FF /* Flutter.xcframework */ = { isa = PBXFileReference; expectedSignature = "AppleDeveloperProgram:S8QB4VV633:FLUTTER.IO LLC"; lastKnownFileType = wrapper.xcframework; name = Flutter.xcframework; path = "Flutter/$(CONFIGURATION)/Flutter.xcframework"; sourceTree = "<group>"; }; 312885582C1A441C009F74FF /* App.xcframework */ = { isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = App.xcframework; path = "Flutter/$(CONFIGURATION)/App.xcframework"; sourceTree = "<group>"; };
-
更新搜索路径。
单击 构建设置 选项卡。
导航到 搜索路径
双击 框架搜索路径 右侧。
在组合框中,单击 + (加号)。
键入
$(inherited)并按 Enter。单击 + (加号)。
键入
$(PROJECT_DIR)/Flutter/$(CONFIGURATION)/并按 Enter。
更新 Xcode 中的 框架搜索路径
链接框架后,它们应显示在目标 常规 设置的 框架、库和嵌入内容 部分中。
嵌入动态框架
#要嵌入您的动态框架,请完成以下步骤。
-
导航到 常规 > 框架、库和嵌入内容。
-
单击您的每个动态框架,然后选择 嵌入 & 签名。

在 Xcode 中为您的每个框架选择 嵌入 & 签名
不要包含任何静态框架,包括
FlutterPluginRegistrant.xcframework。 单击 构建阶段 选项卡。
-
展开 嵌入框架。您的动态框架应显示在该部分中。

Xcode 中展开的 嵌入框架 构建阶段
-
构建项目。
在 Xcode 中打开
MyApp.xcworkspace。验证您是否正在打开
MyApp.xcworkspace而不是打开MyApp.xcodeproj。.xcworkspace文件具有 CocoaPod 依赖项,而.xcodeproj没有。选择 产品 > 构建 或按 Cmd + B。
设置 LLDB Init 文件
#-
生成 Flutter LLDB 文件。
- 在您的 Flutter 应用程序中,如果您尚未这样做,请重新运行
flutter build ios-framework
flutter build ios-framework --output=/path/to/MyApp/Flutter/这将在
/path/to/MyApp/Flutter/目录中生成 LLDB 文件。 - 在您的 Flutter 应用程序中,如果您尚未这样做,请重新运行
-
设置 LLDB Init 文件。
转到 Product > Scheme > Edit Scheme。
在左侧边栏中选择 Run 部分。
将 LLDB 初始化文件 设置为以下内容
$(PROJECT_DIR)/Flutter/flutter_lldbinit如果您的方案已经具有 LLDB Init File,您可以将 Flutter 的 LLDB 文件添加到其中。Flutter LLDB Init 文件的路径必须相对于您的项目的 LLDB Init 文件的位置。
例如,如果您的 LLDB 文件位于
/path/to/MyApp/.lldbinit,您将添加以下内容command source --relative-to-command-file "Flutter/flutter_lldbinit"
设置本地网络隐私权限
#在 iOS 14 及更高版本上,在 iOS 应用的 Debug 版本中启用 Dart multicast DNS 服务。这增加了使用 flutter attach 进行 调试功能,例如热重载和 DevTools。
要仅在应用的 Debug 版本中设置本地网络隐私权限,请为每个构建配置创建一个单独的 Info.plist。SwiftUI 项目默认情况下没有 Info.plist 文件。如果您需要创建属性列表,可以通过 Xcode 或文本编辑器来完成。以下说明假定默认的 Debug 和 Release。根据您的应用的构建配置调整名称。
-
创建一个新的属性列表。
在 Xcode 中打开您的项目。
在 项目导航器 中,单击项目名称。
从 目标 列表中,单击您的应用。
单击 信息 选项卡。
展开 自定义 iOS 目标属性。
右键单击列表并选择 添加行。
从下拉菜单中选择 Bonjour 服务。这将在项目目录中创建一个名为
Info的新属性列表。这在 Finder 中显示为Info.plist。
-
将
Info.plist重命名为Info-Debug.plist单击项目列表左侧的 信息 文件。
在右侧的 身份和类型 面板中,将 名称 从
Info.plist更改为Info-Debug.plist。
-
创建 Release 属性列表。
在 项目导航器 中,单击
Info-Debug.plist。选择 文件 > 复制...。您也可以按 Cmd + Shift + S。
在对话框中,将 保存为: 字段设置为
Info-Release.plist,然后单击 保存。
-
将必要的属性添加到 Debug 属性列表中。
在 项目导航器 中,单击
Info-Debug.plist。将字符串值
_dartVmService._tcp添加到 Bonjour 服务 数组。(可选) 要设置您想要的自定义权限对话框文本,请添加键 隐私 - 本地网络使用说明。

添加了 Bonjour 服务 和 隐私 - 本地网络使用说明 键的
Info-Debug属性列表
-
设置目标以针对不同的构建模式使用不同的属性列表。
在 项目导航器 中,单击您的项目。
单击 构建设置 选项卡。
单击 全部 和 组合 子选项卡。
在搜索框中键入
plist。这将限制设置到包含属性列表的设置。向下滚动列表,直到看到 打包。
单击 信息.plist 文件 设置。
将 信息.plist 文件 值从
path/to/Info.plist更改为path/to/Info-$(CONFIGURATION).plist。
更新 信息.plist 构建设置以使用特定于构建模式的属性列表
这在 Debug 中解析为路径 Info-Debug.plist,在 Release 中解析为 Info-Release.plist。

更新的 信息.plist 文件 构建设置显示配置变化
-
从 构建阶段 中删除 Release 属性列表。
在 项目导航器 中,单击您的项目。
单击 构建阶段 选项卡。
展开 复制捆绑资源。
如果此列表中包含
Info-Release.plist,请单击它,然后单击其下方的 - (减号) 以将其从资源列表中删除。
显示 Info-Release.plist 设置的 复制捆绑包 构建阶段。删除此设置。
-
您的 Debug 应用加载的第一个屏幕会提示本地网络权限。
单击 确定。
(可选) 要在应用加载之前授予权限,请启用 设置 > 隐私 > 本地网络 > 您的应用。
缓解 Apple Silicon Mac 上的已知问题
#在 运行 Apple Silicon 的 Mac 上,宿主应用为 arm64 模拟器构建。虽然 Flutter 支持 arm64 模拟器,但某些插件可能不支持。如果您使用其中一个插件,您可能会看到类似于 Undefined symbols for architecture arm64 的编译错误。如果发生这种情况,请从宿主应用的模拟器架构中排除 arm64。
在 项目导航器 中,单击您的项目。
单击 构建设置 选项卡。
单击 全部 和 组合 子选项卡。
在 架构 下,单击 排除的架构。
展开以查看可用的构建配置。
单击 Debug。
单击 + (加号)。
选择 iOS 模拟器。
双击 任何 iOS 模拟器 SDK 的值列。
单击 + (加号)。
-
在 Debug > 任何 iOS 模拟器 SDK 对话框中键入
arm64。
将
arm64添加为应用的排除架构 按 Esc 关闭此对话框。
对 Release 构建模式重复这些步骤。
对任何 iOS 单元测试目标重复操作。
下一步
#现在您可以 将 Flutter 屏幕 添加到您现有的 iOS 应用中。