关于 flutter-spm
面向 Flutter 开发者和插件作者的 Swift Package Manager 使用指南,适用于 Flutter 3.44+ 的 iOS 和 macOS 依赖管理。内容涵盖项目配置、依赖声明、CI 缓存与故障排查。
主要功能
- 01Flutter 3.44+ 的 SPM 配置
- 02通过 Xcode 管理原生包
- 03声明插件依赖
- 04CI 缓存指引
- 05依赖解析故障排查
适用场景
- 01向 iOS Runner 添加 Swift 包
- 02在 Flutter 插件中声明 SPM 依赖
- 03在 CI 构建中缓存 SPM 文件
- 04解决包解析失败或版本冲突
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dhruvanbhalara/ skills --skill flutter-spm安装后在 Claude Code 中输入/flutter-spm确认已加载。
详细介绍
Flutter 中的 Swift Package Manager(SPM)
在 Flutter 3.44 中引入
Swift Package Manager 是 Flutter 中 iOS 和 macOS 应用的默认依赖管理器,取代了 CocoaPods。这种现代集成方式可提升编译速度,并简化原生软件包的依赖关系树。
目录
项目配置
在 Flutter 3.44 及更高版本中,新生成的 iOS 和 macOS 平台默认配置为使用 SPM。
主要变更
- 没有
Podfile或Podfile.lock:iOS 目录不再需要 CocoaPods。 - Xcode 工作区集成:通过 Xcode 的 Package Dependencies 直接管理原生依赖项。
- Flutter 插件:包含原生 Swift 代码的插件会在其
pubspec.yaml或Package.swift文件中声明 SPM 配置,Flutter 会自动将其集成到 runner 目标中。
管理依赖项
添加 Swift 软件包
要将原生软件包直接添加到 iOS Runner:
- 在 Xcode 中打开
ios/Runner.xcworkspace。 - 选择 File > Add Package Dependencies...
- 输入软件包 URL(例如,
https://github.com/Alamofire/Alamofire),并选择目标版本。 - 将软件包关联到
Runner目标。
插件作者须知
要为 Flutter 插件定义 SPM 依赖项,请在 pubspec.yaml 中使用 swift_packages 字段:
flutter:
plugin:
platforms:
ios:
pluginClass: MyPlugin
swift_packages:
- name: Alamofire
url: https://github.com/Alamofire/Alamofire.git
version: 5.9.0
CI/CD 缓存策略
SPM 依赖项存储在项目工作区之外。为缩短 CI 构建时间(例如,在 GitHub Actions 中),请缓存以下目录:
- SPM 缓存目录:
~/Library/Caches/org.swift.swiftpm - Xcode DerivedData:
~/Library/Developer/Xcode/DerivedData
GitHub Actions 缓存示例
- name: Cache Swift Package Manager Dependencies
uses: actions/cache@v4
with:
path: |
~/Library/Caches/org.swift.swiftpm
~/Library/Developer/Xcode/DerivedData
key: ${{ runner.os }}-spm-${{ hashFiles('**/pubspec.yaml', 'ios/Runner.xcodeproj/project.pbxproj') }}
restore-keys: |
${{ runner.os }}-spm-
故障排除与冲突解决
软件包解析失败
如果 CLI 构建期间 SPM 依赖项解析失败:
# 1. Clean the project
flutter clean
# 2. Resolve package dependencies manually via Xcode CLI
xcodebuild -resolvePackageDependencies -workspace ios/Runner.xcworkspace -scheme Runner
版本冲突
如果多个插件请求同一个 Swift Package 的不兼容版本:
- 在 Xcode 中打开项目。
- 前往 Runner > Package Dependencies。
- 手动覆盖软件包依赖规则,以强制使用统一且兼容的版本。
评论
支持 Markdown