なぜ本番やテスト環境が必要なのか?
iOSアプリの環境は下記の二つの環境があります:
- Development
- Distribution
ただ、まずこれを無視にしても良いです。開発プロジェクトにはiOSチームだけでなく、バックエンドを始め、他の相互な開発側もあります。それと、システムを開発するにはお客さんの要望によってそれより多く環境を別れる場合もあります。一般的には3つの環境があります。
- 開発: コーディング用の環境
- ステージング : テスト用の環境
- 本番 : 納品・リリースされたシステム
システムの環境と同様にしてiOS Projcetにも該当な構成を分けます。こうした各構成はシステムの環境に応じて環境のendpoint, key, settings …と合わせるにはビルドの構成を設定することが必要になります
一般的に iOS Project.には下記の3つの構成があります。
- Debug
- Staging
- Release
他には、目的によって、product や appstore …の環境もあります。
1. Build Configurationの作成
iOS プロジェクトを新規作成する際に、Xcodeから自動でDebug と Release の二つの設定が生成されます。ただ、要望によってその以外の設定追加しても良いです。
生成された設定から Stagingの設定する値を追加します。
名称を Stagingへ簡単に変更します。
2. Xcode Configuration (.xcconfig)ファイルを使用します
基本的に、Xcode構成ファイル(.Xcconfig)には、プロジェクトで使用されるキーと値のペアが含まれています。3つの環境に応じて3つの新しいファイル(. xcconfig) を作成します。間違えないようにファイル名は設定名と同じ名前にします。
続いて、Configurationsにて.xcconfigファイルの値を設定します。
こちらにて、任意で必要の情報を編集・追加します。
注意:それぞれのファイルの同じkey に対して違うvalueを設定することが必要です。
例:
- Debug.xcconfig
FX_APP_NAME = Project (dev)
FX_APP_VERSION = 0.3
FX_APP_BUNDLE_ID = com.fx.TheLastProject.Debug
- Staging.xcconfig
FX_APP_NAME = Project (Staging)
FX_APP_VERSION = 0.2
FX_APP_BUNDLE_ID = com.fx.TheLastProject.Staging
- Release.xcconfig
FX_APP_NAME = The Last Project
FX_APP_VERSION = 0.1
FX_APP_BUNDLE_ID = com.fx.TheLastProject.Release
こちらは簡単でInfo.plistの編集したい行に$( キー名 )を追加します。
キー名のFXは僕が自分で設定する接頭ですので、任意に設定してください。
問題なければ上記のように表示されます。次に行きましょう!
3. 設定のキー/値をソースコードで使いましょう
Xcode Configurationだけでなく、ソースコードで設定する値を変更することもできます。まず、endpoint. key, token …などのキーを定義してみます。
- Debug.xcconfig
FX_APP_NAME = Project (dev)
FX_APP_VERSION = 0.1.0
FX_APP_BUNDLE_ID = com.fx.thelastproject
BACKEND_URL = http:\/\/api.intensifystudio.com/development
CONSUMER_KEY = ck_a57e4fa2e14c12ae3f400371cf2951ec3dea5_dev
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f13f63bb22b_dev
- Staging.xcconfig
FX_APP_NAME = Project (Staging)
FX_APP_VERSION = 0.2.0
FX_APP_BUNDLE_ID = com.fx.thelastproject
BACKEND_URL = http:\/\/api.intensifystudio.com/staging
CONSUMER_KEY = ck_a57e4fa2e14c12f400371cf2951ec3dea5_staging
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f13f63bb22b_staging
- Release.xcconfig
FX_APP_NAME = The Last Project
FX_APP_VERSION = 1.0.0
FX_APP_BUNDLE_ID = com.fx.thelastproject
BACKEND_URL = http:\/\/api.intensifystudio.com/
CONSUMER_KEY = ck_a57e4fa2e14c12f400371cf2951ec3dea5
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f1f63bb22b
Info.plist ファイルを開き、新しい行を追加します。
Info.plistファイルのキーから値を取得するFunctionを書いてみます。
func infoForKey(_ key: String) -> String? {
return (Bundle.main.infoDictionary?[key] as? String)?
.replacingOccurrences(of: "\\", with: "")
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let temp = infoForKey("Backend Url")
endpointLabel.text = temp
consumerKeyLabel.text = infoForKey("Consumer Key")
consumerSecretLabel.text = infoForKey("Consumer Secret")
}
4. プロジェクトを実行・ビルドする為に,設定を変更します
手順は下記になります
Scheme build > Edit Scheme > Run > Info > Build Configuration
各設定値に応じてSchemeを追加しても良いです。
アプリアイコンを変更
.xcconfigファイルにキーを新規追加します。
- Debug.xcconfig
FX_APP_ICON = AppIconDebug
- Staging.xcconfig
FX_APP_ICON = AppIconStaging
- Release.xcconfig
FX_APP_ICON = AppIconRelease
Build Settingsにて$(FX_APP_ICON)の値でアプリアイコンを変更します。
OKでしたらこのようなイメージになります。
Assets.xcassetsファイルにアプリアイコンセットを追加します
.xcconfigファイルにある value に応じて適切なネームを設定することも大事です。
まとめ
iOSプロジェクトの各環境の設定を自分でインストールおよび管理仕方を説明しました。それと、プロジェクトのセキュリティーも確保されます。
- key, token, endpoint …が別々のファイルで保存されます。
- ソースコードにて、ハードコーディングせずに定義されたキーのみで作業します。
- 各環境でif…elseを使用しないで間違いを避けます
- 本番環境用のキーやアカウントを管理できます。
- プロジェクトのキーが公開されないにはgitで管理できます。
- 事前に定義された設定を選択することでビルド時間およびテスト時間が節約できます。