はじめに
APIのACCESS_KEY
やSECRET_KEY
などの環境変数や、アプリ固有の設定値(KEY and VALUE)をソースコードやInfo.plistにハードコーディングせず、プロジェクトから切り離して管理できないかと常考えていました。
実行環境
- Xcode 6.1.1 (6A2008a)
- cocoapods 0.35.0
- cocoapods-keys 1.0.0
インストール
cocoapods-keysはcocoapodsのプラグインとして配布されています。
https://github.com/orta/cocoapods-keys
インストールはcocoapodsと同じくgemで行います。
$ gem install cocoapods-keys
設定方法
プロジェクトルートディレクトリにおいて、以下のコマンドを行うと、KEYとVALUEを設定できます。
$ pod keys set KEY VALUE
設定作業の具体例です。
$ cd MyApplication
$ pod keys set "NetworkAPIToken" "AH2ZMiraGQbyUd9GkNTNfWEdxlwXcmHciEOH"
Saved NetworkAPIToken to MyApplication.
$ pod keys set "AnalyticsToken" "6TYKGVCn7sBSBFpwfSUCclzDoSBtEXw7"
Saved AnalyticsToken to MyApplication.
$ pod keys
Keys for MyApplication
├ NetworkAPIToken - AH2ZMiraGQbyUd9GkNTNfWEdxlwXcmHciEOH
└ AnalyticsToken - 6TYKGVCn7sBSBFpwfSUCclzDoSBtEXw7
GIFs - /Users/orta/dev/mac/GIFs
└ redditAPIToken & mixpanelAPIToken
参照方法
設定値を更新したら、pod install
します。
$ pod install or pod update
上記コマンドにより、動的に各設定値にアクセスするためにメソッドを持ったクラスが生成され以下のように参照できます。
#import "ORAppDelegate.h"
#import <CocoaPods-Keys/MyApplicationKeys.h>
#import <ARAnalytics/ARAnalytics.h>
@implementation ORAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
MyApplicationKeys *keys = [[MyApplicationKeys alloc] init];
[ARAnalytics setupWithAnalytics:@{
ARGoogleAnalyticsID : keys.analyticsToken;
}];
}
@end
設定値はどこに保存されるの?
設定値はキーチェーンに保存されます。.envファイルのようにファイルにPlanTextで保存しないのでセキュアです。
PodfileにKEYの一覧を記載 via CocoaPods 0.36
CocoaPodsnのv0.36以上であれば、PodfileにKEYの一覧を記載できます。
pod keys set
コマンドを実施しなくても、pod install
を実施すると対話的に設定したKEYのVALUEを聞いてくれます。
plugin 'cocoapods-keys', {
:project => "Eidolon",
:keys => [
"ArtsyAPIClientSecret",
"ArtsyAPIClientKey",
"HockeyProductionSecret",
"HockeyBetaSecret",
"MixpanelProductionAPIClientKey",
...
]}
$ pod install
Analyzing dependencies
Downloading dependencies
Using ARAnalytics (2.8.0)
...
Generating Pods project
Integrating client project
CocoaPods-Keys has detected a keys mismatch for your setup.
What is the key for ArtsyAPIClientSecret
> HOGE HOGE HOGE
REF
実際に使用されているOSSのアプリがあります。