KMP 自动化之路 (4):iOS 自动化构建与签名 —— 攻克最硬的骨头

前言

对于 Android开来说,iOS 的打包签名机制简直像外星科技。Provisioning Profile、Certificate、P12 文件... 每一个词都让人头大。

但在 KMP 工程化中,这关必须得过。因为如果 CI 不能编出带签名的 .ipa 文件,你的 iOS 端就永远无法实现"持续交付"。今天我们来拆解如何在 GitHub Actions 中自动化搞定这一切。


一、 核心痛点:为什么 iOS 这么难?

  1. 硬件限制:只能在 macOS 编译。
  2. 证书校验:Apple 强制要求真机运行必须有签名。
  3. Xcode 命令行 :必须熟练使用 xcodebuild 而非仅仅是 gradlew。

二、 现代方案:fastlane 入场

不要尝试直接写复杂的 xcodebuild 命令,那太容易出错。fastlane 是 iOS 自动化的行业标准。

我们在 app/iosApp 目录下配置 fastlane:

ruby 复制代码
# Fastfile
platform :ios do
  desc "Build and Sign for TestFlight"
  lane :release do
    setup_ci # 自动同步证书
    build_app(scheme: "iosApp") # 触发编译
    upload_to_testflight # 上传
  end
end

三、 GitHub Actions 中的证书同步:Match

如何把你的开发证书传给 GitHub 的虚拟机? fastlane match:它会将证书加密后存放在一个私有的 Git 仓库中。CI 运行时只需一条命令:

yaml 复制代码
      - name: Sync Certificates
        run: bundle exec fastlane match readonly
        env:
          MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}

四、 联动 Kotlin:从 Gradle 到 Xcode

记住 KMP 的构建链路: Gradle (:app:shared:assemble) -> 生成 Framework -> Xcode (Linking) -> 生成 App

在 CI 脚本中,顺序至关重要:

  1. 首先运行 ./gradlew :app:shared:embedAndSignAppleFrameworkForXcode。
  2. 确保 Framework 在正确的位置。
  3. 再调用 fastlane。

五、 架构建议

  1. 使用 GitHub Secrets:绝对不要把证书(.p12)或 Profile 提交到代码库。利用 GitHub 的加密 Secrets 存储 fastlane 的 APP_STORE_CONNECT_API_KEY。
  2. 版本号同步 :编写一个简单的脚本,让 Android 的 versionCode 和 iOS 的 buildNumber 在 CI 流程中保持同步,由 CI 生成统一的时间戳版本号。

结语

搞定了 iOS 的自动化签名,你就扫清了 KMP 全栈交付的最大障碍。你现在已经拥有了一个可以真正商用的"全平台构建工厂"。

下一篇,我们将探讨:CD 与自动分发:如何一键让全端应用上线?

相关推荐
国科安芯30 分钟前
83 倍:ASC0108S 在推挽和开漏之间,差的不是速度,是回程
单片机·嵌入式硬件·架构·电平转换·抗辐射
zhaoshuzhaoshu1 小时前
Android 系统启动与调试中的日志抓取方式全解析
android
雨声不在2 小时前
android 动画掉帧
android
在多学一点3 小时前
MYSQL第二次作业
android·数据库·mysql
骑着蜗牛撵大象3273 小时前
MySQL 8.0 迁移后 SQL 变慢:执行计划里 3 类被忽略的成本差异
android·数据库·sql·mysql·优化器·执行计划
QXWZ_IA3 小时前
横跨三网“只进不出”架构如何划分安全边界
安全·架构
我叫张土豆4 小时前
Android 14+ 模拟器抓包实录:把 Burp CA 装成系统 CA,让 targetSdk≥34 的 App 乖乖解密
android
ZENERGY-众壹5 小时前
告警风暴怎么压?100MW 电站监控平台告警引擎架构复盘
数据库·架构·iot·电站监控
leo在掘金7 小时前
25.5k Star 的 DeepInfer 怎么扛住3万亿参数
后端·架构
Linye7 小时前
为什么让 AI 修个小 Bug 却把底层全重写了?聊聊 Coding Agent 的最小修改边界
人工智能·架构