CarthageでGoogleAnalyticsを導入する


#背景
QiitaにCarthage＋GoogleAnalyticsの記事がなかったので、手順をまとめました:relaxed:

#環境
- Xcode 8.3.2
- Swift 3.1

#手順
##Carthageのインストール
Carthageのインストール手順は他の記事を参考にしてください:relaxed:
参考：[Carthageについて](https://qiita.com/s-harada/items/47295d653ef0cf34d540)

##Cartfileの編集とcarthage update
Cartfileの編集

```vi Cartfile```

Cartfile内に以下の記述を追加

```github "akashivskyy/GoogleAnalytics-Framework"```

carthageをupdate

```carthage update --platform iOS```

##Frameworkの追加
- General > Linked Frameworks and Libraries で ＋ を選択
- Add Otherを選択
- Carthage > Build > iOS > GoogleAnalytics.frameworkを選択
- 以下のように追加されていればOK
![スクリーンショット 2018-01-29 22.52.08.png](https://qiita-image-store.s3.amazonaws.com/0/223313/13690a18-1397-d5e6-db78-e381a1e91054.png)

##Run Scriptの追加
既にCarthageがはいっていればこの操作は必要ありません

- BuildPhasesを開き、＋を選択
- New Run Script Phaseを選択
- Run Script Shellに以下を追加
    - ```/usr/local/bin/carthage copy-frameworks```

## Run ScriptのInput Filesに設定
以下を設定
``` $(SRCROOT)/Carthage/Build/iOS/GoogleAnalytics.framework ```
以下のようになっていればOK
![スクリーンショット 2018-01-29 23.05.29.png](https://qiita-image-store.s3.amazonaws.com/0/223313/0535d85e-53b3-143a-7025-806ebc6b799c.png)

## 設定ファイルを取得しプロジェクトにファイルを追加する

- 以下のリンク先の「設定ファイルを取得」ボタンから設定ファイルを作成する
- https://developers.google.com/analytics/devguides/collection/ios/v3/?ver=swift#get-config
- BundleIdや地域などを入力し、GoogleService-Info.plistをダウンロード
- プロジェクトのルートにファイルを追加　
![スクリーンショット 2018-01-29 23.34.19.png](https://qiita-image-store.s3.amazonaws.com/0/223313/8ee41c74-8645-2925-aaf8-7f329459f6c2.png)

## スクリーントラッキングやイベントトラッキングを設定
#### GoogleAnalyticsの初期化設定
```swift:AppDelegate.swift
import GoogleAnalytics
```
```swift:AppDelegate.swift
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
 
        // GoogleAnalyticsの設定
        if let gai = GAI.sharedInstance() {
            gai.trackUncaughtExceptions = true
            
            if let path = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist") {
                if let propertyList = NSDictionary(contentsOfFile: path) as? [String: AnyObject] {
                    let trackingID = propertyList["TRACKING_ID"] as! String
                    gai.tracker(withTrackingId: trackingID)
                }
            }
        }
 
        return true
    }
```

#### GATrackingManager.swiftを追加
以下のようなファイルを作成します。

```swift:GATrackingManager.swift
import GoogleAnalytics
 
class GATrackingManager {
    
    //スクリーントラッキング
    class func sendScreenTracking(screenName: String) {
        if let tracker = GAI.sharedInstance().defaultTracker {
            tracker.set(kGAIScreenName, value: screenName)
            tracker.send(GAIDictionaryBuilder.createScreenView().build() as [NSObject: AnyObject])
            tracker.set(kGAIScreenName, value: nil)
        }
    }
    
    //イベントトラッキング
    class func sendEventTracking(category: String, action: String, label: String) {
        if let tracker = GAI.sharedInstance().defaultTracker {
            tracker.send(GAIDictionaryBuilder.createEvent(withCategory: category, action: action, label: label, value: nil).build() as [NSObject: AnyObject])
        }
    }
    
}
```
#### スクリーントラッキング
```swift:任意のViewController
import UIKit
 
class ViewController:UIViewController { 
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        //GAスクリーントラッキング
        GATrackingManager.sendScreenTracking(screenName: "画面名")
    }
}
```
#### イベントトラッキング
```swift
    @objc func btnTapped(sender:UIButton){ 
            //GAイベントトラッキング
            GATrackingManager.sendEventTracking(category: "カテゴリ名", action: "アクション名", label: "ラベル名")
 
    }
```

##GoogleAnalyticsで確認
GoogleAnalyticsの画面から設定することはありません。楽ちんですね:hugging:
トラッキングを仕込んだら、イベントが飛んでいるか、確認しましょう。