🙆♀️
Xcode Cloudのワークフローで環境変数をソースコードに書き込むシェルスクリプトを設定する方法
目的
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
eval
など使わずにコレで十分だと思います。ありがとうございます。辞書を使うなどの改善点もあったため、あとでその方法に置き換えたいと思います!