LoginSignup
39
38

More than 5 years have passed since last update.

Objective-C, Swiftでローカルファイル(.env)で定義した環境変数を参照する

Last updated at Posted at 2015-07-02

=====✄=====追記 2015/07/28=====✄=====

この方法でも二回目以降のビルドからしか反映されなかったり、Archiveするときに反映されなかったりするので、 @kishikawakatsumi さんの紹介してくださったcocoapods-keysを使う方法が確実です。pod install時にソースを生成するので。

======✄======追記終わり======✄======

Railsとかやってるとリポジトリに含まないファイルである.envに、ソースコードにまぜちゃいけない色々な情報を埋め込んでおいて、
コードから環境変数として参照とかはよくやるのですが、iPhoneアプリ開発でやったことがなかったので調べてみました。

結果的にはドンピシャなやつがなかったので、自分で色々組み合わせました。

最初ずっと英語で調べていたのですが、諦めて日本語で探したら参考になる記事がわんさかでてきたので、日本のiOSエンジニアの方々のレベルは海外なんかに負けてないと思いました。

手順

  1. Preprocess Info.plist fileYESを設定する
  2. <プロジェクト名>-Info.plistに環境変数名と同じkeyを追加する
  3. .envに必要な変数を定義する
  4. [[[NSBundle mainBundle] infoDictionary] objectForKey:@"環境変数名"];で参照する (Swiftは NSBundle.mainBundle().objectForInfoDictionaryKey("環境変数名") as String)
  5. .env_sampleをつくって.env.gitignoreする
  6. Run Scriptに以下のソースを追加する
RunScript
if [ ${CONFIGURATION} = "Debug" ]; then

    plistBuddy="/usr/libexec/PlistBuddy"
    infoPlistFileSource="${SRCROOT}/${INFOPLIST_FILE}"
    infoPlistFileDestination="${TEMP_DIR}/Preprocessed-Info.plist"

    # 今回は関係ないけどビルドバージョンを自動で更新する
    currentVersion=$($plistBuddy -c "Print CFBundleVersion" "${infoPlistFileSource}")
    versionPrefix="dev-"
    lastCommitDate=$(git log -1 --format='%ci')
    versionSuffix=" ($lastCommitDate)"
    versionString=${versionPrefix}${currentVersion}${versionSuffix}

    $plistBuddy -c "Set :CFBundleVersion ${versionString}" "${infoPlistFileDestination}"

    # .env内の環境変数を参照できるようにする
    . ./.env

    $plistBuddy -c "Set :HOGE ${HOGE}" "${infoPlistFileDestination}"
    $plistBuddy -c "Set :FUGA ${FUGA}" "${infoPlistFileDestination}"
    $plistBuddy -c "Set :PIYO ${PIYO}" "${infoPlistFileDestination}"

fi

環境変数の定義はこんな感じです。

.env
HOGE='ほげ'
FUGA='ふが'
PIYO='ぴよぴよ'

plistも例えばこんな感じです。

スクリーンショット 2015-07-02 11.24.29.png

で、結局なんですが何回かビルドしたり、クリーンしたりしないと、ちゃんと環境変数を参照できないことを覗いては概ねうまくいきました!
何回かビルドすると最終的に意図通りに参照できるように収束するので問題ないかと。

もっといい方法がありましたら、教えてください!

参考URL

39
38
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
38