Firebase AnalyticsはGoogleが提供するモバイル向けサービスFirebaseのコアの機能です。Firebaseの他の機能はFirebase Analyticsに依存しています。Firebase Analyticsを使えば、アプリ内でのユーザー行動を分析して把握することができます。
公式ではCocoapodsでのインストールが推奨されていますが、Carthageを利用してライブラリ管理していて、できればCocoapodsを利用したくない場合の導入方法を紹介します。
Firebaseにプロジェクトを登録
まず、Firebaseを利用するにあたって、Firebaseコンソール上でアカウントを作成して、プロジェクトを作成する必要があります。
Firebaseコンソール
-
新規プロジェクト作成
-
アプリの情報を追加して設定ファイルを作成します。
ここではiOS Bundle idを登録すればOK。
-
アプリ用のplistが作成されるのでダウンロードします。
-
Xcodeで該当のプロジェクトを開き、上記のplistをコピーする。
FirebaseSDKのダウンロード & プロジェクトに導入
FirebaseSDKをダウンロードしてプロジェクトにコピー
-
こちらのページ下部にある"Integrate without CocoaPods"の"framework SDK zip"のリンクをクリックしてください。
-
zipファイルを解凍した後のFirebaseのフォルダを丸ごとプロジェクトルートにコピーします
-
利用しないframeworkのフォルダを削除する。今回はFirebase Analyticsのみを利用するため、Analyticsフォルダ以外を選択して右クリックでDeleteを選びます。(Move to Trashでプロジェクトからファイルごと削除しました。)
linker flagの追加
- XcodeのBuild Settingsの"Other Linker Flags"に-ObjCを追加する。(ObjCフラグを追加する理由ですが、以下に詳しく書かれています。興味ある方は読んでみてください。)
-
以下は自分の理解です。Objecitve-Cの経験がほどんどないので誤っているかもしれません。
Objective-Cはコンパイル時にクラスをリンクするためのundefined symbolというものを作成します。しかし、メソッドのundefined symbolは作成されません。クラスに定義されているメソッドはリンクはされていないけれど、実行時にクラスから生成したオブジェクトにメソッドを呼び出すメッセージを送って、存在すれば実行されるし、なければ実行時エラーになります。
カテゴリで定義されているメソッドについても、undefined symbolは作られません。カテゴリのメソッドはクラスの外側で定義されているので、実行時にメソッドを呼び出すメッセージを送っても、存在せず実行時エラーになります。LinkerにObjCフラグを渡すことで、Objective-Cで実装している全てのクラスとカテゴリをロードするようになるため、カテゴリ内のメソッドのリンク先が見つからないという問題が解決するようです。ただし、このオプションを使うと実行ファイルが大きくなるのでdefaultでは有効にしてないようです。
module.modulemapへのサーチパスを通す
- Objective-Cで実装されたframeworkをSwiftから利用する場合、Bridging Headerを用意するか、moudulemapを利用する方法があります。Firebaseではmodule.modulemapが用意されているため、modulemapファイルを利用します。Swiftのコンパイル時にmodulemapを参照できるように、パスを通す必要があります。
- Build Settingsの"Swift Compiler Search Paths" > "Import Paths"に$(SRCROOT)/Firebaseを追加する
- Objective-Cで書かれたframeworkのSwift対応
動作確認
buildが通れば、あとはCocoapodsでインストールしたときと同じ手順になります。
以下のリンクに動作確認用のコードを組み込む方法が記載されています。
Get Started with Firebase Analytics for iOS
- AppDelegateにFirebaseのconfigurationコードを追加
import UIKit
import Firebase
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
FIRApp.configure()
return true
}
- 任意のViewControllerにイベント記録用のコードを追加
override func viewDidLoad() {
super.viewDidLoad()
FIRAnalytics.logEventWithName(kFIREventSelectContent, parameters: [
kFIRParameterContentType:"cont",
kFIRParameterItemID:"1"
])
}
Debug環境でXcoddのコンソールに結果を表示するためには、起動オプションを指定してあげる必要があります。
XcodeのメニューでProduct > Schema > Edit Schemaを選択します。
RunのArgumentsタブを選んで、-FIRAnalyticsDebugEnabled
オプションを指定します。
これでDebug環境でもイベント記録内容を確認することができます。