まるで俺が考えた最強の〇〇みたいな感じになってますが、以下のQiitaの記事のパクリです・・・。
この記事読めばだいたい何がしたいのかわかるので、あまり細かいことは書かないです!
Google Map SDKを使ったプロジェクトをGithubに上げたいなーって思ったことが、この記事の原点になってます。
そのまま何も気にせず上げてしまうと、API KeyがPublicで全体に公開されてしまうんですよね。怖い怖い。
ちなみに、GMSServices.provideAPIKey
ってGithubで検索するとAPI Keyがベタでいっぱい書いてあります。怖い怖い。
cocoapods-keysでAPI KeyとかGithubに上げたくない値をプロジェクトから切り離す
そこで出てくるのがcocoapods-keysです。Githubは以下になります。
インストール方法とかは上のQiitaの記事見るかGithubのREADMEを見れば書いてあります。
cocoapods-keysは何をしてくれるのか?
Qiitaの記事の内容を引用すると、以下のような問題を解決してくれそうなものです。
APIのACCESS_KEYやSECRET_KEYなどの環境変数や、アプリ固有の設定値(KEY and VALUE)をソースコードやInfo.plistにハードコーディングせず、プロジェクトから切り離して管理できないか
要は、API KeyとかってハードコーディングしてGithubとかに上げてしまうとセキュリティ的に問題ですよね。
それらの値をプロジェクトから切り離して管理するために使うのが、cocoapods-keysってわけです。
設定した値はkeychainに保存されるみたいで、セキュアに管理されるようですね。あんまりココらへん詳しくないのであれですが・・・。
実際にGoogle Map SDKのAPI Keyをプロジェクトから分割するために使ってみたサンプルプロジェクトをGithubに上げてます。
API Keyの設定を以下のような感じにできます。
GMSServices.provideAPIKey(GooglemapsampleKeys().googleApiKey())
Keys/GooglemapsampleKeys.hというのが実際には生成されており、そこからAPI Keyを参照するような仕組みになってます。
ここまでの具体的に流れについては、上で紹介したQiitaの記事がとてもわかりやすくまとまっているので、Githubと合わせて参照してもらえると助かります。
使ってみて疑問に思ったこと
まずこの複数人で使う場合の話。要は仕事のプロジェクトで採用する場合とかですね。
色々考えてみたけど、keychainの扱いやiOSのプロジェクトに詳しくないので、ちゃんとした答えが出なかった。
とりあえず疑問に思ったことは、誰かに聞いてみよう。
cocoapods-keys使ってAPI Keyの分割に成功した!
これはすげーいい!複数人で使う場合はどうかわからないけど・・・。
— shinobu okano (@operandoOS) 2015, 7月 27
cocoapods-keysいいんだけど、これ複数環境で使うの難しいかもしれんなー。Pods配下はgithubに上げたくないし、そうすると多分ムリっぽい気がする。keychainに入れたら無理だよね??そこ詳しくないから誰かに聞こー
— shinobu okano (@operandoOS) 2015, 7月 27
cocoapods-keys複数環境で使うなら、使う環境ごとにまた値設定すればいいのかな??って解決方法もある気がしてきた。
でもそれだと間違った値設定した時に、環境依存の問題あるかー。
うーん、ココらへん詳しくないから弱ったなー。
iOSエンジニアにきこー。
— shinobu okano (@operandoOS) 2015, 7月 27
まとめ
とりあえずセキュアな値をプロジェクトから分割できる方法があったのは大きな発見だった。
これが複数人で行うプロジェクトでも使えそうなら、結構いいものな気がする。素人感覚で言ってるけど。
こーゆー「セキュアな値Githubに上げたくないなープロジェクトから分割できる方法ないかなー」って考えてみて、調べてみることが大切ですよね。
大きな発見ができた気がして非常に楽しかった!