使用 Flutter 构建 macOS 应用
此页面讨论了使用 Flutter 构建 macOS 应用时特有的注意事项,包括 shell 集成以及通过 Apple Store 分发 macOS 应用。
集成 macOS 界面风格
#虽然您可以使用任何您选择的视觉样式或主题来构建 macOS 应用,但您可能希望调整您的应用以更完整地与 macOS 界面风格保持一致。Flutter 包含 Cupertino 组件集,它提供了一组适用于当前 iOS 设计语言的组件。许多这些组件,包括滑块、开关和分段控件,也适用于 macOS。
或者,您可能会发现 macos_ui 包非常适合您的需求。此包提供了实现 macOS 设计语言的组件和主题,包括 MacosWindow
框架和脚手架、工具栏、下拉和弹出按钮以及模态对话框。
构建 macOS 应用
#要分发您的 macOS 应用程序,您可以 通过 macOS App Store 分发,也可以分发 .app
本身,也许是从您自己的网站分发。从 macOS 10.14.5 开始,您需要在通过 macOS App Store 之外分发 macOS 应用程序之前对其进行公证。
以上两个流程的第一步都涉及在 Xcode 中处理您的应用程序。为了能够从 Xcode 内部编译您的应用程序,您首先需要使用 flutter build
命令为发布构建应用程序,然后打开 Flutter macOS Runner 应用程序。
flutter build macos
open macos/Runner.xcworkspace
进入 Xcode 后,请按照 Apple 的 关于 macOS 应用程序公证的文档 或 关于通过 App Store 分发应用程序的文档 进行操作。您还应该阅读下面的 macOS 特定支持 部分,以了解权限、应用沙盒和强化运行时如何影响您的可分发应用程序。
构建和发布 macOS 应用 提供了将 Flutter 应用发布到 App Store 的更详细的分步指南。
权限和应用沙盒
#默认情况下,macOS 构建配置为已签名,并使用应用沙盒。这意味着,如果您想为您的 macOS 应用授予特定的功能或服务,例如以下功能
- 访问互联网
- 从内置摄像头捕获电影和图像
- 访问文件
那么您必须在 Xcode 中设置特定的权限。以下部分将告诉您如何执行此操作。
设置权限
#沙盒设置的管理在 macos/Runner/*.entitlements
文件中完成。编辑这些文件时,不应删除原始的 Runner-DebugProfile.entitlements
异常(支持传入网络连接和 JIT),因为它们对于 debug
和 profile
模式正常运行是必需的。
如果您习惯于通过Xcode 功能 UI管理权限文件,请注意,功能编辑器仅更新两个文件中的一个,或者在某些情况下,它会创建一个全新的权限文件并切换项目以将其用于所有配置。这两种情况都会导致问题。我们建议您直接编辑文件。除非您有非常具体的理由,否则您应该始终对两个文件进行相同的更改。
如果您保持应用沙盒启用(如果您计划在 App Store 中分发您的应用程序,则需要启用),则在添加某些插件或其他原生功能时,需要管理应用程序的权限。例如,使用 file_chooser
插件需要添加 com.apple.security.files.user-selected.read-only
或 com.apple.security.files.user-selected.read-write
权限。另一个常见的权限是 com.apple.security.network.client
,如果您进行任何网络请求,则必须添加此权限。
例如,如果没有 com.apple.security.network.client
权限,网络请求将失败并显示类似以下的消息
flutter: SocketException: Connection failed
(OS Error: Operation not permitted, errno = 1),
address = example.com, port = 443
有关这些主题的更多信息,请参阅 Apple 开发者网站上的 应用沙盒 和 权限。
强化运行时
#如果您选择在 App Store 之外分发您的应用程序,则需要对您的应用程序进行公证以确保与 macOS 兼容。这需要启用强化运行时选项。启用后,您需要有效的签名证书才能进行构建。
默认情况下,权限文件允许调试构建使用 JIT,但与应用沙盒一样,您可能需要管理其他权限。如果同时启用了应用沙盒和强化运行时,则可能需要为同一资源添加多个权限。例如,麦克风访问需要 com.apple.security.device.audio-input
(适用于强化运行时)和 com.apple.security.device.microphone
(适用于应用沙盒)。
有关此主题的更多信息,请参阅 Apple 开发者网站上的 强化运行时。
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面上次更新于 2024-05-14。 查看源代码 或 报告问题.