🐨
Swiftで環境変数を設定する方法
FlutterとかReact Nativeとかその他プログラミング言語みたいに.envではなかったのでメモがてら。
方法
1. xcconfigファイルを作成
Templeate File作成から「Configuration Setting File」を選択
ファイル名は適当でいいので、デフォルトの「Config」にする。
拡張子がxcconfig
のファイルが作成されました。
Xcodeだと歯車アイコンになります。
中に設定する値を書きます。
Config.xcconfig
API_ENDPOINT=https:/$()/jsonplaceholder.typicode.com/
2. プロジェクトで読み込めるようにする
「Project」→「Info」→「Configurations」を開く
読み込ませたいTargetsのBased on Configuration File
をクリック
先ほど作成した「Config.xcconfig」が出てくるので設定
こうなればOK
3. Info.plistに追加
「Targets」→「Info」→「Custom iOS Target Properties」に追加
※API_ENDPOINTにしたいんですが、既存のKeyが予測に出て変換されちゃうから頭にENVをつける
4. アプリ側で表示
アプリ側で読み込みます。
lazy
を使うかinit関数
のどちらかを使用します。
読み込んだ環境変数をもとに更に別の変数やクラスを初期化するケースがあるので僕はinit関数を使ってます。(lazyだとできない)
EnvSettingScreenView.swift
//
// SwiftUIView.swift
// ai_chat_app
//
// Created by 池内隆人 on 2025/02/11.
//
import SwiftUI
struct EnvSettingScreenView: View {
let apiEndpoint: String?
init() {
self.apiEndpoint = Bundle.main.object(forInfoDictionaryKey: "ENV_API_ENDPOINT") as? String
}
var body: some View {
Text("Hello, World!")
Text(apiEndpoint ?? "")
}
}
#Preview {
EnvSettingScreenView()
}
検証
表示できた
ちなみにこういう方法もある
「Product」→「Scheme」→「Edit Scheme」を開く
「Run」内の「Environment Variables」にKey Valueを記載。
そしてProcessInfo
を使って読み込む。
EnvSettingScreenView.swift
//
// SwiftUIView.swift
// ai_chat_app
//
// Created by 池内隆人 on 2025/02/11.
//
import SwiftUI
struct EnvSettingScreenView: View {
let apiEndpoint: String?
init() {
self.apiEndpoint = ProcessInfo.processInfo.environment["ENV_API_ENDPOINT"]
}
var body: some View {
Text("Hello, World!")
Text(apiEndpoint ?? "")
}
}
#Preview {
EnvSettingScreenView()
}
上記の方法でできますが、Xcodeからの直接ビルドのみしか対応してないっぽいので使えないですね。
完全に個人で開発 + Gitで履歴も残さないのであれば上記の方法でも良いかと思います。
Discussion