Flutter 打包 IPA

以下是解决 Flutter 打包 IPA 时手动签名问题的详细步骤,涵盖配置、常见错误处理及优化建议:


1. 准备工作:生成证书与描述文件

1.1 创建开发者证书

  1. 访问 Apple Developer 网站,登录后进入 Certificates, Identifiers & Profiles
  2. 创建证书:
    • 类型:选择 iOS Distribution (App Store 或 Ad Hoc)
    • 按指引生成 .certSigningRequest 文件(需通过Mac钥匙串访问生成)。
  3. 下载证书(.cer 文件)并双击安装到钥匙串。

1.2 注册 Bundle Identifier

  1. Identifiers → App IDs 中注册唯一的 Bundle ID(需与 ios/Runner/Info.plist 中的 CFBundleIdentifier 一致)。

1.3 创建手动签名描述文件

  1. Profiles 中创建描述文件:
    • 类型:选择 App Store(提交商店)或 Ad Hoc(测试分发)。
    • 关联证书和 Bundle ID,选择需要授权的设备(Ad Hoc 需添加设备 UDID)。
  2. 下载描述文件(.mobileprovision),双击安装到 Xcode。

2. 配置 Flutter 项目

2.1 关闭 Xcode 自动签名

  1. 打开 Flutter 项目的 iOS 工程:
    open ios/Runner.xcworkspace
    
  2. 在 Xcode 中定位到 Runner → Signing & Capabilities
  3. 取消勾选 Automatically manage signing
  4. 手动选择:
    • Signing Certificate:选择已安装的 Distribution 证书(如 Apple Distribution: Your Name)。
    • Provisioning Profile:选择对应的描述文件。

2.2 同步 Flutter 配置

  1. 确保 pubspec.yaml 中的 version 与 Xcode 的 VersionBuild 一致。
  2. 清理旧构建缓存:
    flutter clean
    

3. 手动签名打包 IPA

3.1 使用 Flutter 命令打包

  1. 运行以下命令生成 IPA:
    flutter build ipa --release --no-codesign
    
    • --no-codesign:跳过 Flutter 默认的自动签名流程。

3.2 手动签名 IPA

  1. 通过 Xcode 完成签名:
    • 打开生成的 .xcarchive 文件(路径:build/ios/archive/Runner.xcarchive)。
    • Organizer 界面点击 Distribute App,选择手动签名。
    • 选择证书和描述文件,导出 IPA。

3.3 直接使用 Xcode 归档

  1. 直接在 Xcode 中执行 Product → Archive,按标准 iOS 应用流程手动签名导出 IPA。

4. 常见错误与解决

4.1 错误:Code Signing Identity not found

  • 原因:证书未正确安装或钥匙串权限问题。
  • 解决
    1. 确认证书已安装(钥匙串访问 → 登录 → 证书)。
    2. 右键证书 → 显示简介 → 信任设置为 Use System Defaults

4.2 错误:No profiles for 'com.example.app' were found

  • 原因:描述文件未安装或 Bundle ID 不匹配。
  • 解决
    1. 检查 Xcode 中 Bundle ID 是否与描述文件一致。
    2. 重新安装描述文件(双击 .mobileprovision)。

4.3 错误:Failed to create provisioning profile

  • 原因:开发者账号未关联有效付费计划。
  • 解决:升级至 Apple Developer Program(年费 $99)。

5. 高级优化建议

5.1 使用 Fastlane 自动化签名

  1. 安装 Fastlane:
    sudo gem install fastlane -NV
    
  2. 在 Flutter 项目的 ios 目录初始化:
    cd ios && fastlane init
    
  3. 配置 Fastfile 实现自动签名:
    lane :release do
      sync_code_signing(type: "appstore")
      build_app(
        scheme: "Runner",
        export_method: "app-store"
      )
    end
    

5.2 多环境签名配置

  • 在 Xcode 中创建多个 Build Configuration(如 Release-Staging),为不同环境分配独立的证书和描述文件。

5.3 安全存储证书

  • 将证书和描述文件加密后存储在 CI/CD 系统(如 GitHub Actions、Jenkins)中,避免泄露私钥。

总结

通过关闭 Xcode 自动签名、手动选择证书和描述文件,结合 flutter build ipa --no-codesign 跳过自动签名流程,即可解决 Flutter 手动签名问题。对于复杂场景,推荐使用 Fastlane 或 CI/CD 工具实现自动化,提升效率和安全性。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容