Objective-C
Xcode
iOS
CocoaPods
Swift

cocoapods-keysで設定値をプロジェクトから切り離す

More than 3 years have passed since last update.


はじめに

APIのACCESS_KEYSECRET_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で保存しないのでセキュアです。

キーチェーンアクセス.png


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のアプリがあります。