跳到主要内容

iOS 应用程序包装

介绍

Flet CLI 提供了flet build ipa命令,该命令允许将 Flet 应用程序打包成 iOS 归档包和 IPA 以供分发。

备注

该命令只能在 macOS 上运行。

先决条件

二进制 Python 包

二进制 Python 包(与仅用 Python 编写的“纯”Python 包相对)是部分用 C、Rust 或其他生成原生代码的语言编写的包。例如numpycryptographypydantic

Flet 提供了一个替代索引 https://pypi.flet.dev,用于托管适用于 iOS 和 Android 平台的 Python 二进制轮子(由 pip 下载的.whl文件)。

以下是目前适用于 iOS 的包:

名称版本
aiohttp3.9.5
argon2-cffi-bindings21.2.0
bcrypt4.2.0
bitarray2.9.2
blis1.0.0
Brotli1.1.0
cffi1.17.1
contourpy1.3.0
cryptography43.0.1
google-crc321.6.0
grpcio1.67.1
kiwisolver1.4.7
lru-dict1.3.0
lxml5.3.0
MarkupSafe2.1.5
matplotlib3.9.2
numpy2.1.1
numpy1.26.4
opencv-python4.10.0.84
pandas2.2.2
pillow10.4.0
protobuf5.28.3
pydantic-core2.23.3
time-machine2.16.0
websockets13.0.1
yarl1.11.1
正在进行中的工作

可以通过在Mobile Forge项目中创建一个配方来构建新的包。目前,Flet 团队正在为你编写这些配方,但当这个过程经过完善并完全自动化后,你将能够发送 PR 并立即测试编译后的包。

如果你在 https://pypi.flet.dev 上还没有看到一个包,你可以在Flet 讨论 - 包中请求它。请不要请求纯 Python 包。转到包在 https://pypi.org 的“下载文件”部分,并确保它包含特定于平台的二进制轮子。

flet build ipa

构建一个 iOS 归档包和 IPA 以供分发(仅适用于 macOS 主机)。要成功生成“可运行”的 IPA,你应该为以下参数提供正确的值:

  • --org - 以反向域名表示法表示的组织名称,例如com.mycompany(默认为com.flet)。该值与--project组合使用,并用作 iOS 和 Android 的包 ID。
  • --project - 以 C 风格标识符格式(带有下划线的小写字母数字)表示的项目名称,用于构建包 ID 和作为包可执行文件的名称。默认情况下,它是 Flet 应用程序目录的名称。
  • --team - 用于定位配置文件的团队 ID。如果没有提供团队 ID,则将生成未签名的 iOS 归档包。

你也可以在pyproject.toml中配置这些设置:

[project]
name = "my-app"
[tool.flet]
org = "com.mycompany"
[tool.flet.ios]
team = "team_id"

权限

设置写入Info.plist文件的 iOS 权限:

flet build --info-plist permission_1=True|False|description permission_2=True|False|description...

例如:

flet build --info-plist NSLocationWhenInUseUsageDescription="这个应用程序在使用时使用位置服务。"

pyproject.toml中配置 iOS 权限:

[tool.flet.ios.info]
# --info-plist
NSCameraUsageDescription = "这个应用程序使用相机来..."

深度链接

你可以使用以下flet build选项配置 iOS 包的深度链接设置:

  • --deep-linking-scheme - 为 iOS 和 Android 构建配置的深度链接 URL 方案,例如“https”或“myapp”。
  • --deep-linking-host - 深度链接 URL 主机。

同样可以在pyproject.toml中配置:

[tool.flet.ios.deep_linking]
scheme = "https"
host = "mydomain.com"

有关更多信息和完整的设置指南,请参阅 Flutter 文档中的深度链接部分。