Swiftプロジェクトへの導入方法

今回は、SwiftプロジェクトにiOS Growthbeat.frameworkを導入する方法をご紹介します。 

提供しているソースコードは、Objective-Cベースで提供しておりますので、Swiftのバージョンによる不具合は2017年1月現在確認されておりません。
なお、Swift製のライブラリ管理ツールであるCarthage(カーセッジ)には対応しておりません。

まずは、下記ドキュメントを参考にCocoaPodsもしくは手動でSDKを配置してください。
http://support.growthbeat.com/sdk/ios/guide/#sdk導入

次に、Objective-Cのソースを、Swiftで使用するためのヘッダーを作成します。
${Project_name}-Bridging-Header.hというファイルを作成します。
File -> New -> File -> Headerを選択して、上記ファイル名で作成します。

このファイルにGrowthbeatのインポート文を追記します。

#import <Growthbeat/Growthbeat.h>

次に、作成したBridging-HeaderをSwiftのコンパイル時に、読み込まれるように設定します。
Build Settings -> Swift Compiler – Code Generation -> Objective-C Bridging Header
ここに作成した、${Project_name}-Bridging-Header.hを追記します。

$(SRCROOT)/$(PROJECT)/Hoge-Bridging-Header.h

アプリ起動時に GrowthPush の初期化クラスを AppDelegate.swift 内の、func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {} 部分に実装します。

"YOUR_APPLICATION_ID"、"YOUR_CREDENTIAL_ID"には、 Growthbeatで使用するID、キーまとめ をご参照ください。

GrowthPush.sharedInstance().initializeWithApplicationId("YOUR_APPLICATION_ID", credentialId: "YOUR_CREDENTIAL_ID", environment: kGPEnvironment)

Growth Pushをご利用になる場合、GrowthPush.h上の定数がSwiftプロジェクト上ですと参照されませんので、追加での実装が必要となります。

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    #if DEBUG
    let kGPEnvironment:GPEnvironment = GPEnvironment.Development
    #else
    let kGPEnvironment:GPEnvironment = GPEnvironment.Production
    #endif
---略---

ビルドごとに定数を変更していますが、こちらもSwiftプロジェクトですと表示で分岐されないため設定します。
Build Settings -> Swift Compiler – Custom Flag Other Swift Flags

ここのDebugというキーの値に下記を追記します。

-D DEBUG

これで、debug, releaseビルド時に定数が分岐されます。

GrowthPushの初期化後に下記メソッドを呼び出して、デバイストークンの取得を行います。

GrowthPush.sharedInstance().requestDeviceToken()

func application( application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData ) {} にて下記のように実装して、デバイストークンを送信します。

func application( application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData ) {
    GrowthPush.sharedInstance().setDeviceToken(deviceToken)
}

以上の内容を実装したサンプルは下記のようになります。

import UIKit
@UIApplicationMain
class AppDelegte: UIResponder, UIApplicationDelegate {
  var window: UIWindow?
  #if DEBUG
    let kGPEnvironment:GPEnvironment = GPEnvironment.Development
  #else
    let kGPEnvironment:GPEnvironment = GPEnvironment.Production
  #endif

  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    //初期化
    GrowthPush.sharedInstance().initializeWithApplicationId("YOUR_APPLICATION_ID", credentialId: "YOUR_CREDENTIAL_ID", environment: kGPEnvironment)
    //デバイストークンの取得 アプリ起動時に、プッシュ通知の許可ダイアログを表示
    GrowthPush.sharedInstance().requestDeviceToken()
    return true
  }
  func application( application: UIApplication, didRegisterForRemoteNoticationsWithDeviceToken: NSData ) {
    //デバイストークンの送信
    GrowthPush.sharedInstance().setDeviceToken(deviceToken)
  }
}

Growthbeat SDK を swift にて使用するための最低限の実装は以上となります。

登録されたデバイスは管理画面のデバイスページにて確認することができます。プッシュ通知ステータスが「アクティブ(Active)」で登録されていれば正常な動作となります。

その他のドキュメントに関しましては iOS APIリファレンス をご参照ください。

Xcode8での開発は  【Xcode8】CapabilitiesのPushNotificationsの設定について もご参照ください。