はじめに
New RelicのMobile Agentは、正式にはUnityをサポートしてません。ただし、iOSのSDKはあるので、それらを組み込んでみた方法の記録と結果です。
確認したバージョン
以下のバージョンで確認してます。バージョンが異なると、設定項目や方法が異なる可能性があります。
- Unity
- 2020.3.26f1
- Xcode
- 13.2.1
導入方法
XCFramework agentの導入
- ここから、最新版のXCFramework agentをダウンロードする
- ダウンロードしたファイルを解凍すると、NewRelic.xcframeworkというアーカイブが現れ、これをそのまま、Unityの
Assets/Plugins/iOS/
のフォルダにコピーする - コピーした先の「NewRelic.xcframework」の中の以下のフォルダを残してそれ以外は削除
(衝突によりビルドエラーになるので)
1. ios-arm64_armv7
1. ios-arm64_i386_x86_64-simulator - Unity Editor上で、ios-arm64_armv7の中にある、NewRelic.frameworkを選択して、CPU をARM64に設定して、Add to Embedded Binにチェックを入れる
- ios-arm64_i386_x86_64-simulatorの中のNewRelic.frameworkも同様の設定を行う。ただし、CPUはX86。
UnityAppControllerのオーバーライド
すでに、オーバーライドしたクラスを作成済みの場合は、本ステップはスキップ。未作成の場合、以下のようにして作成する。
- Assets/Plugins/iOSのフォルダにAppController.mmを作成
- 以下のコードを貼り付ける
#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の初期化
- 前の項目で追加した、AppController.mmを開く
- ファイルの先頭の方に以下のimport文を追加
#import <NewRelic/NewRelic.h>
- didFinishLaunchingWithOptionsのメソッドに以下のようなNewRelicの初期化を追加(superでベースクラスのメソッドを呼び出す前に追加)
[NewRelic startWithApplicationToken:@"<appToken>"];
ビルドスクリプトの追加(スキップ)
NewRelicの導入手順だとビルドスクリプトがあるが、今回は以下の理由により導入はスキップ。
- 手動でXcodeのプロジェクト側にスクリプトをコピーする以外の方法が見当たらない
- スクリプトを導入しなくても、ある程度動作する
もし、よい方法があれば、コメント等で教えて貰えれば助かります!
動作確認
簡単な動作確認では、クラッシュやアプリの起動、Unityからのhttpリクエストなどのデータは取得されNewRelicに送られるようです