iOSアプリ開発における定数定義の方法【環境毎設定編】
本番環境・テスト環境で、アプリが接続するサーバURLが異なる事は少なくない。
この様に定数でありながら、条件により有効になる値を変更する必要がある場合の、定数定義の方法を紹介する。
(基本的な定数定義の方法は、「iOSアプリ開発における定数定義の方法【基本編】」を参照のこと)
<準備>
今回紹介する方法には、「<プロジェクト名>-Prefix.pch」ファイルを使用する。
このファイルはXcode5以前はプロジェクト作成時に自動的に生成されたが、Xcode6からは手動で生成する必要がある。
生成方法は「Xcode6でPCHファイルを追加する方法」を参照のこと。
<手順概要>
1.定数を変更する条件を「<プロジェクト名>-Prefix.pch」に定義する
2.「.h」ファイルに「extern」キーワードを用いて定数名を定義する
3.「.m」ファイルに定数に格納する値を定義する(マクロによる分岐)
<手順詳細>
1.定数を変更する条件を「<プロジェクト名>-Prefix.pch」に定義する
テスト環境を表す値として「VAL_ENV_TEST」、本番環境を表す値として「VAL_ENV_REAL」を定義する
また、実際に環境を設定する値として「DEF_ENVIRONMENT」を定義する。
この「DEF_ENVIRONMENT」の右側に設定する値によって、環境を切り替えることになる。
(下記は「本番環境」に設定した例である)
//環境種別 #define VAL_ENV_TEST 0 //テスト環境 #define VAL_ENV_REAL 1 //本番環境 // 環境設定 #define DEF_ENVIRONMENT VAL_ENV_REAL //↑この場所に設定する値によって環境を切り替える
2.「.h」ファイルに「extern」キーワードを用いて定数名を定義する
この手順は、「iOSアプリ開発における定数定義の方法【基本編】」で紹介した方法と変わらない。
今回は「SAMPLE_CONST_SERVER」という定数を定義する
#import <Foundation/Foundation.h> @interface AppConsts : NSObject /** サンプル定数(条件によって変更される定数) */ extern NSString * const SAMPLE_CONST_SERVER; @end
3.「.m」ファイルに定数に格納する値を定義する(マクロによる分岐)
手順1で定義した値を用いて、定数定義をマクロにより分岐して行う。
#import "AppConsts.h" @implementation AppConsts #if DEF_ENVIRONMENT == VAL_ENV_REAL //本番環境時の定数設定 NSString * const SAMPLE_CONST_SERVER = @"https://real.server/"; #elif DEF_ENVIRONMENT == VAL_ENV_TEST //テスト環境時の定数設定 NSString * const SAMPLE_CONST_SERVER = @"http://test.server/"; #endif @end
<定数の使用方法>
定義した定数を使用するには、使用したいクラスで定数定義クラス「AppConsts.h」をimportし、定数を使用したい場所に定数名を記述する。
//使用するクラスに「AppConsts.h」をimportしておくこと NSLog(@"%@", SAMPLE_CONST_SERVER);
<実行結果>
「<プロジェクト名>-Prefix.pch」の「DEF_ENVIRONMENT」を「VAL_ENV_TEST」に設定した場合
2014-11-12 21:41:24.535 ConstsSample[11753:84567] http://test.server/
「<プロジェクト名>-Prefix.pch」の「DEF_ENVIRONMENT」を「VAL_ENV_REAL」に設定した場合
2014-11-12 21:42:34.247 ConstsSample[11832:85331] https://real.server/
<考察>
今回の様に環境によって変更する必要がある定数が1件の場合は、紹介した方法はあまり効力を発揮しないが、件数が増えれば変更作業を楽にすることができる。
また、環境変更をソースコードの変更では無く、設定ファイルの変更のみで実施できることは、品質管理の面で有利に働くと思われる。
Enjoy Programing!!
<関連記事>
iOSアプリ開発における定数定義の方法【基本編】
iOSアプリ開発における定数定義の方法【環境毎設定編】(本記事)
iOSアプリ開発における定数定義の方法【マクロ使用編】
iOSアプリ開発における定数定義の方法【最適解編】
<お勧め書籍>