1
Help us understand the problem. What are the problem?

posted at

updated at

UnityにNew Relic Agent(iOS)を導入してみる。

はじめに

New RelicのMobile Agentは、正式にはUnityをサポートしてません。ただし、iOSのSDKはあるので、それらを組み込んでみた方法の記録と結果です。

確認したバージョン

以下のバージョンで確認してます。バージョンが異なると、設定項目や方法が異なる可能性があります。

  • Unity
    • 2020.3.26f1
  • Xcode
    • 13.2.1

導入方法

XCFramework agentの導入

  1. ここから、最新版のXCFramework agentをダウンロードする
  2. ダウンロードしたファイルを解凍すると、NewRelic.xcframeworkというアーカイブが現れ、これをそのまま、Unityの Assets/Plugins/iOS/のフォルダにコピーする
  3. コピーした先の「NewRelic.xcframework」の中の以下のフォルダを残してそれ以外は削除
    (衝突によりビルドエラーになるので)
      1. ios-arm64_armv7
      1. ios-arm64_i386_x86_64-simulator
  4.  Unity Editor上で、ios-arm64_armv7の中にある、NewRelic.frameworkを選択して、CPUARM64に設定して、Add to Embedded Binにチェックを入れる Arch選択
  5.  ios-arm64_i386_x86_64-simulatorの中のNewRelic.frameworkも同様の設定を行う。ただし、CPUはX86

UnityAppControllerのオーバーライド

すでに、オーバーライドしたクラスを作成済みの場合は、本ステップはスキップ。未作成の場合、以下のようにして作成する。

  1. Assets/Plugins/iOSのフォルダにAppController.mmを作成
  2. 以下のコードを貼り付ける
#import "UnityAppController.h"

@interface AppController : UnityAppController
@end

@implementation AppController
+(void)load
{
    extern const char* AppControllerClassName;
    AppControllerClassName = "AppController";
}

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
	//TODO add any code you want.
	return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
@end

補足:AppControllerClassNameにこの作成したクラス名を設定して、上書きすることで、本クラスがUnityAppControllerの代わりに読み込まれるようになる。また、didFinishLaunchingWithOptionsのメソッドの中で、親クラスのメソッドを呼び返す。

XCFramework agentの初期化

  1. 前の項目で追加した、AppController.mmを開く
  2. ファイルの先頭の方に以下のimport文を追加
    #import <NewRelic/NewRelic.h>
    
  3. didFinishLaunchingWithOptionsのメソッドに以下のようなNewRelicの初期化を追加(superでベースクラスのメソッドを呼び出す前に追加)
    [NewRelic startWithApplicationToken:@"<appToken>"];
    

ビルドスクリプトの追加(スキップ)

NewRelicの導入手順だとビルドスクリプトがあるが、今回は以下の理由により導入はスキップ。

  • 手動でXcodeのプロジェクト側にスクリプトをコピーする以外の方法が見当たらない
  • スクリプトを導入しなくても、ある程度動作する
    もし、よい方法があれば、コメント等で教えて貰えれば助かります!

動作確認

簡単な動作確認では、クラッシュやアプリの起動、Unityからのhttpリクエストなどのデータは取得されNewRelicに送られるようです

参照

Unityで、UnityAppControllerを上書きする方法
Unity
NewRelic

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
1
Help us understand the problem. What are the problem?