🙆‍♀️

Xcode Cloudのワークフローで環境変数をソースコードに書き込むシェルスクリプトを設定する方法

2022/09/01に公開
2

目的

API KEYなどのGitHubで管理したくない秘密情報を直接ソースコードに載せずに、Xcode Cloudが実行される実行環境上のソースコードにのみ環境変数(秘密情報)を書き込む

できるようになる事

Xcode Cloudのワークフローが実行されたらソースコードに環境変数が書き込まれ、目的通りのアプリがビルドされてリリースされるが、Github、ローカルのソースコードは何も変わらない。という理想の環境になります。

環境変数をセット

Xcode Cloudのフローワーク編集画面を開きEnviroment Variableに使用したい文字列を追加していく

Secretにチェックを入れると見た目上見えなくなる。見えなくなるだけなので取得時には問題ない

書き込み予定のファイルを用意

置き換えたい文字列を特定のファイルに用意
ここではSourcesグループ(フォルダー)の下にEnv.swiftを用意

struct Env {
  static let client_key = "CLIENT_KEY"
  static let client_secret_key = "CLIENT_SECRET_KEY"
}

シェルスクリプトファイルを用意

プロジェクト直下に
/ci_scripts/ci_post_clone.shを用意

ci_pre_xcodebuild.shでもいいはず

Xcode Cloud Writing Custom Build Scripts

シェルスクリプトファイルに実行権限付与

chmod +x ci_post_clone.sh

シェルスクリプトの内容を設定

シェルの内容はsedで直接ファイルの文字列を環境変数に置き換えるというものです。

#!/bin/zsh

#  ci_post_clone.sh

env_file_path="../Sources/Env.swift"

typeset -A envValues

envValues[CLIENT_KEY]=$CLIENT_KEY
envValues[CLIENT_SECRET_KEY]=$CLIENT_SECRET_KEY

for key in ${(k)envValues}
  sed -i -e "s/${key}/${envValues[$key]}/g" "${env_file_path}"

Discussion

ko1nksmko1nksm

eval など使わずにコレで十分だと思います。

sed -i -e "s/CLIENT_KEY/${CLIENT_KEY}/g" "${env_file_path}"
zundazunda

ありがとうございます。辞書を使うなどの改善点もあったため、あとでその方法に置き換えたいと思います!