LoginSignup
1
1

More than 3 years have passed since last update.

Sourceryでアプリシークレットを管理する方法

Last updated at Posted at 2019-11-22
1 / 9

はじめに

個人開発をする中でTwitterやFirebaseなど様々な情報を扱うか模索していて行き着いた一例を紹介します。

やりたいこととしては「各種APIを叩くためのシークレット情報などをアプリに直接ソースコードに持ちたくはないが、参照できること」です。

方法としては、Sourceryを用いてSecret.swiftを自動生成することにしました。
cocoapods-keysを利用する方法もありますが、Cocoapodsを利用していないため代替手段を模索することにしました。

以下に、手順を示していきます。


手順

  1. Sourceryの導入
  2. テンプレートの作成
  3. 設定ファイル作成
  4. 自動化スクリプトの追加
  5. .gitignoreに追記

1. Sourceryの導入

SourceryはSwift用のコードジェネレータライブラリです。
よくあるEquatableの実装など、何度も書くような実装を自動化してくれます。

Xcode -> File -> Swift Packages -> Add Package Dependency からhttps://github.com/krzysztofzablocki/SourceryのURLを入力して任意のバージョンを入れます。


2. テンプレートの作成

生成するSwiftファイルのテンプレートを作ります。
今回はTwitterAPIを利用したアプリを制作していたのでその変数をstaticで定義し、値の入力にはargument

Templates/Secret.stencil
enum Secret {
    static let twitterConsumerKey = "{{argument.twitterConsumerKey}}"
    static let twitterConsumerKeySecret = "{{ argument.twitterConsumerKeySecret }}"
}

3. 設定ファイル作成

.sourcery.secret.ymlという名前でsourcryファイルを作ります。
templates で(2)で追加したファイルを読み込み、
outputで成果物をGeneratedディレクトリに生成します。

.sourcery.secret.yml
sources:
  - SampleApp
templates:
  - Templates/Secret.stencil
output:
  path: Generated/ 
  link:
    project: SampleApp.xcodeproj
    target: SampleApp
    group: SampleApp
args:
  twitterConsumerKey: "実際のKey"
  twitterConsumerKeySecret: "実際のSecret"

4. 自動化スクリプトの追加

以下のshell scriptをBuild Phasesに追加します。

mkdir -p Sourcery
sourcery --config .sourcery.secret.yml

追加する前にターミナルで正しく実行されるか確認してみると良いかと思います。

Compile Sourcesの前に追記すると良いでしょう。
Screen Shot 2019-11-22 at 18.43.39.png

あとは出来上がったSecret.generated.swiftをプロジェクトに追加すると、Secret.twitterConsumerKeyなどを参照できるようになるかと思います。


5. .gitignoreに追記

シークレットの情報が入ったファイル群は .gitignoreに入力して保存されないようにします。

.gitignore
.sourcery.secret.yml
Sourcery 

おわりに

雑にまとめてみましたが、質問などあればTwitter(@mtfum)にお願いします!

ymlファイルのoutputでlinkなどを書いていますがきちんと機能しているのかあまりよくわかっていません。。
また、変数の変更時にテンプレート(Templates/Secret.stencil)と設定ファイル(.sourcery.secret.yml)を変更しなければならないのがまだ冗長的で課題なのでより簡潔になる方法がわかれば追記しようと思います。

ご存知の方がいらっしゃれば教えてください!

参考

Managing secrets within an iOS app

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1