1. susieyy

    Posted

    susieyy
Changes in title
+cocoapods-keysで設定値をプロジェクトから切り離す
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,114 @@
+
+## はじめに
+
+APIの`ACCESS_KEY`や`SECRET_KEY`などの環境変数や、アプリ固有の設定値(KEY and VALUE)をソースコードやInfo.plistにハードコーディングせず、プロジェクトから切り離して管理できないかと常考えていました。
+
+## インストール
+
+cocoapods-keysはcocoapodsのプラグインとして配布されています。
+https://github.com/orta/cocoapods-keys
+
+インストールはcocoapodsと同じくgemで行います。
+
+```Shell
+$ gem install cocoapods-keys
+```
+
+## 設定方法
+
+プロジェクトルートディレクトリにおいて、以下のコマンドを行うと、KEYとVALUEを設定できます。
+
+```Shell
+$ pod keys set KEY VALUE
+```
+
+設定作業の具体例です。
+
+```Shell
+$ 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`します。
+
+```Shell
+$ pod install or pod update
+```
+
+上記コマンドにより、動的に各設定値にアクセスするためにメソッドを持ったクラスが生成されます。
+
+```ObjC
+#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](https://qiita-image-store.s3.amazonaws.com/0/4943/f45ff75c-744d-233b-21f5-285b004f4b10.png "キーチェーンアクセス.png")
+
+## PodfileにKEYの一覧を記載 via CocoaPods 0.36
+
+CocoaPodsnのv0.36以上であれば、PodfileにKEYの一覧を記載できます。
+`pod keys set`コマンドを実施しなくても、`pod install`を実施すると対話的に設定したKEYのVALUEを聞いてくれます。
+
+```Podfile
+plugin 'cocoapods-keys', {
+ :project => "Eidolon",
+ :keys => [
+ "ArtsyAPIClientSecret",
+ "ArtsyAPIClientKey",
+ "HockeyProductionSecret",
+ "HockeyBetaSecret",
+ "MixpanelProductionAPIClientKey",
+ ...
+ ]}
+```
+
+```Shell
+$ 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のアプリがあります。
+
++ https://github.com/artsy/eidolon