You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在iOS项目中正确使用GitHub Secrets作为环境变量?

如何在iOS项目中正确使用GitHub Secrets作为环境变量?

我来帮你梳理下怎么解决这个问题,其实核心就是让GitHub Secrets能在CI构建时传递给Xcode的环境变量,同时本地开发也能顺畅运行:

一、GitHub Actions工作流的配置(替换原来的Secrets.plist生成步骤)

你之前用PlistBuddy生成plist的方式可以完全去掉了,直接在构建Xcode项目的时候,把GitHub Secrets作为环境变量传递给xcodebuild命令就行——因为Xcode在构建过程中会识别这些命令行传入的环境变量,和你在Scheme里配置的变量名对应上,代码里的ProcessInfo就能直接读取到。

举个具体的Actions步骤例子:

- name: Build iOS App
  run: |
    xcodebuild -scheme YourSchemeName \
               -destination 'platform=iOS Simulator,name=iPhone 15' \
               build \
               MY_DEV_TOKEN=${{ secrets.MY_DEV_TOKEN }} \
               MY_PROD_TOKEN=${{ secrets.MY_PROD_TOKEN }}

如果用fastlane管理构建,也可以在lane里直接注入环境变量:

lane :build_dev do
  build_app(
    scheme: "YourSchemeName",
    destination: "platform=iOS Simulator,name=iPhone 15",
    environment: {
      "MY_DEV_TOKEN" => ENV["MY_DEV_TOKEN"],
      "MY_PROD_TOKEN" => ENV["MY_PROD_TOKEN"]
    }
  )
end

然后在Actions里调用fastlane时,先把Secrets注入到环境中:

- name: Run Fastlane Build
  env:
    MY_DEV_TOKEN: ${{ secrets.MY_DEV_TOKEN }}
    MY_PROD_TOKEN: ${{ secrets.MY_PROD_TOKEN }}
  run: fastlane build_dev

二、本地开发的配置(不需要依赖GitHub Secrets)

本地开发时,你不需要连接GitHub Secrets,直接在Xcode的Scheme里配置测试用的令牌值就好:

  1. 打开Xcode,顶部菜单栏选择你的项目Scheme,点击Edit Scheme
  2. 切换到Run(或你需要的Build/Test阶段),选择Arguments标签
  3. Environment Variables区域,点击+号,添加MY_DEV_TOKENMY_PROD_TOKEN,填上你本地测试用的令牌
  4. 记得不要把Scheme的用户配置提交到Git——Xcode的用户配置存在xcuserdata文件夹里,确保你的.gitignore已经包含这个路径,避免把测试令牌泄露出去。

三、代码优化:避免强制解包崩溃

你代码里用!强制解包环境变量的写法有风险,如果环境变量没设置(比如CI配置漏了或者本地Scheme没填),APP会直接崩溃。建议改成可选绑定的方式:

private var developmentToken: String? {
    ProcessInfo.processInfo.environment["MY_DEV_TOKEN"]
}

private var productionToken: String? {
    ProcessInfo.processInfo.environment["MY_PROD_TOKEN"]
}

// 使用时做安全校验
func fetchData() {
    guard let token = developmentToken else {
        fatalError("请检查MY_DEV_TOKEN环境变量配置!")
        // 开发环境下也可以用默认测试令牌:
        // token = "local_test_token"
    }
    // 用token发起请求...
}

这样不管是CI还是本地,只要变量没配置都会给出明确提示,不会莫名其妙崩溃。

备注:内容来源于stack exchange,提问作者xTwisteDx

火山引擎 最新活动