認証情報管理問題
iOS開発においてAPIKeyやSNS連携用のidなどの認証情報の管理をどうするかというのは悩ましいです。
こういった隠蔽したい情報を管理するにあたって避けたいことはいくつかあります。
避けたいこと
gitの管理対象のファイルに記載する
プライベートリポジトリでも、意図せずパブリック化される事故はあるので避ける。
NG例
- swiftコードに認証情報をベタ書き
- Build SchemeのEnvironment Variablesで宣言
- Build SettingsのUser Definedで宣言
- Build PhasesでScript実行し宣言、Script内にベタ書き.
リソースファイルに記載する
昔から有名ですが、ipaファイルをunzipすると誰にでもリソースファイルは見えてしまいます。
info.plistでBuild Schemeごとに値を変えるというのは好ましくないです。
※ここでいうリソースファイルはBuild PhasesのCopy Bundle Resourcesで指定されているファイル群です。
plist、assetsなどのswiftファイル以外前半です。
NG例
- リソースファイルに定義しCopy Bundle Resourcesでipaに含める
今のところ、良さそうな方法
Git管理しない.swiftで定義する
git管理外(.gitignoreで指定)の.swiftファイルで定義する方法です。
.gitignoreにしておけば、変更を加えても、うっかりコミットされることはないです。
一方で.swiftファイルなので、何年か後に変更することがあっても容易。
info.plistや他のファイル形式と違って、定数なのに取得時にOptionalになるなどもない。
守るべき点としては、プロジェクトファイルでは認証情報.swiftをビルドに含めるということになっていれば良いです。
- projectからのリファレンスはある
- Compile Sourcesで定義されている
- でも.swift自体はgit管理しない.
手順はこの方法だとやりやすいかと思います。
- .gitignoreに認証情報.swift追記しコミット.
- 認証情報.swiftを通常のソースファイル追加手順で追加.
- Finder上でファイルを削除.
- 差分のあるproject.pbxprojをコミット
Bitriseでソースファイルの追加方法
Bitriseに認証情報.swiftをuploadしておいて、workflow実行時にアクセスしてプロジェクトに追加して利用します。
Generic file Storageに認証情報.swiftをuploadする
Workflow EditorのCode Signingタブ最下部ににGeneric file storageというものがあります。
あらかじめFileStorageIDを指定してファイルをuploadすると、storageのURLが発行されWorkflow内でアクセスできる仕組みになっています。
発行されるもの自体は$BITRISEIO_YOUR_FILE_STORAGE_ID_URL
という形式の環境変数になります。
File Downloaderでプロジェクト内に配置する
File DownloderというstepがあるのでそちらでDL先を指定します。
git clone時の Clone destination (local) directory path がデフォルトの$BITRISE_SOURCE_DIRであれば、カレントディレクトリがプロジェクトのルートになるので適切に配置してください。
以上で完成