Fabric・Crashlytics は大変便利ですが、Fabric Mac app を使ってしまうと勝手にInfo.plistなどにapi keyなどの情報が書き込まれてしまいます。
このままだとパブリックなレポジトリにはコミットできませんし、開発用と本番用で使い分けたい時にも好ましくありません。
ですので、自分は
- api key, build secretをjsonファイル書いておく
- そのjson自体は.gitignoreに追加してレポジトリにはコミットしない
- Build phaseのスクリプト、アプリ起動時にjsonファイルからapi key, build secretを読み込むようにする。
今回はFabric・CrashlyticsはCocoaPods を経由で利用していることとします。
...
pod 'Fabric'
pod 'Crashlytics'
{
"api_key": "api_key",
"build_secret": "build_secret"
}
みたいなファイルを用意しておいて、xcodeプロジェクトにも追加しておきます。ただ、先述した通りgitレポジトリにはコミットしないようにしておきます。
その上で
起動時にfabric.jsonを読み込んで、Crashlytics.startWithAPIKey() にapi keyをセットします。
import UIKit
import SwiftyJSON
public class FabricConfig {
private static let defaultApiKey = "api_key"
public let apiKey: String
public let buildSecret: String
public init(filePath: String) {
let data = NSData(contentsOfFile: filePath)
let jsonObject: AnyObject? = try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
let json = JSON(jsonObject!)
apiKey = json["api_key"].stringValue
buildSecret = json["build_secret"].stringValue
}
let fabricConfig = FabricConfig(filePath: mainBundle.pathForResource("fabric", ofType: "json")!)
Crashlytics.startWithAPIKey(fabricConfig.apiKey)
次に、Build Phase -> Run scriptで./Pods/Fabric/run
を実行してビルド情報をFabric・Crashlyticsのサーバに送信にします。
jsonから読み込んだapi key, build secretを./Pods/Fabric/run
の引数に渡せばいいのですが、jsonをパースするのがだるいのでrubyで書きました。
if [ -e config/fabric.json ]; then
ruby scripts/fabric.rb
else
echo "Running config/fabric.json is not found, do nothing."
fi
require 'json'
config = ""
open("config/fabric.json") do |io|
config = JSON.load(io)
end
if config["api_key"] == "api_key" || config["build_secret"] == "build_secret"
puts "Skip fabric script because the fabric.json is not set correctly."
exit
end
run_command = "./Pods/Fabric/run"
success = system("#{run_command} #{config["api_key"]} #{config["build_secret"]}")
if success
puts "Succeeded in running fabric script"
else
puts "Failed to run fabric script"
end
これで、Fabric Mac appを使わなくてもCrashlyticsが利用できるようになりました。
また同様に、他の外部WebサービスのためのAPI Keyも同様にjsonから読み込むようにして、レポジトリにコミットしないようにしています。
開発用と本番用のapi keyをスクリプトからサクッと切り替えられるようにすることもできるのでいい感じです。
パブリックなレポジトリにコードを置いている方、
開発用と本番用でapi keyを分けたい方などは参考にしてみてください。
https://github.com/kumabook/MusicFav/
https://github.com/kumabook/MusicFav/blob/master/scripts/make.swift
https://github.com/kumabook/MusicFav/tree/master/config