本コンテンツは、投稿日時点での最新のiOS(Swift)アプリにおけるNew Relic Mobileエージェントのセットアップ手順を記載しています。最新の手順や詳細については、基本的にすべてドキュメントページに記載されているため、そちらをご参照ください。

 アプリケーショントークン取得

まず最初に、アプリに組み込むためのトークンを以下の手順で取得してください。

  1. New Relicにログインし、画面左の「+ Add Data」をクリック。
  2. Add Dataの画面上部の検索ボックスにて、iosとタイプしていただくと、「iOS」のタイルが表示されるので、それをクリック
  3. 続いて表示された画面で、アカウントを選択していただき、Continueをクリック
  4. 「Give your application a name」の項目にアプリ名を入力し、CreateをクリックするとNew Relic上でアプリが作成されます。
  5. 引き続きUI上で表示されるガイドに従って導入していただくこともできますが、本ブログの手順に従う場合は、一旦Add Dataの画面を抜けます。
  6. 左側メニューで「Mobile」の項目がある場合は、それを選択してください。ない場合は、左側メニューの「All Capabilities」をクリックしていただき、表示されたタイルのリストから「Mobile」を選択してください。
  7. すると先程作成したアプリケーションがリストに表示されています。
  8. 作成したアプリをクリックし、その中の「Application」をクリックし、表示された画面のトークンをコピーしてください

Agentの導入

本ページでは、Swift Package Managerを使った導入方法のみを記載します。CocoaPodsを利用してSwiftへ組み込む方法及び、SDKを直接組み込む方法に関しては、ドキュメントページをご参照ください。

  1. Xcodeで対象のプロジェクトを開いてください。
  2. 続いて画面上部のメニューから File > Swift Packages > Add Package Dependency... を開いてください。
  3. リポジトリの設定画面が表示されるので、以下のURLを設定してNextをクリックしてください。
https://github.com/newrelic/newrelic-ios-agent-spm 
  1. 利用するバージョンのルールの選択画面が表示されるので、導入したいバージョンのルールを設定してください。
  1. 最後に設定する対象のTargetを選択し完了してください。
  1. SwiftUIで作成したケースなど、AppDelegate.swiftがない場合は、ファイルを追加して以下のようなコードを追加してください。(すでにある場合は、スキップしてください)
import SwiftUI
import UIKit

class AppDelegate: NSObject, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        return true
    }
}
  1. <アプリ名>App.swiftという名前のファイルのファイルを開き、以下のTODOの行のようにAppDelegateを追加してください。
@main
struct HelloSwiftUIApp: App {
    //TODO Adding AppDelegate
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
  1. プロジェクト内のAppDelegate.swiftというファイルを開き、以下のようにNew Relicのヘッダーをimportしてください。
import NewRelic
  1. 同じファイル内のapplication:didFinishLaunchingWithOptionsの最初の行に以下の1行を追加してください(APP_TOKENは、前述のアプリケーショントークンの取得で取得したトークンに置き換えてください。)
NewRelic.start(withApplicationToken:"APP_TOKEN") 
  1. これで、モバイルモニタリングが開始できるようになりました。試しにクラッシュが取得できることが確認できるよう、任意の箇所(例えば特定のボタンをクリックしたときに動作するコード)に、 NewRelic.crashNow()を追加し、アプリをビルドして実行、クラッシュを発生させ、アプリを再起動してみてください。数分以内に、one.newrelic.comのMobileの画面で、クラッシュを確認することができます。

なお、アプリがデバッガと接続した状態で起動した場合、クラッシュの取得ができません。その場合、端末のログに「New Relic Crash Reporting is DISABLED because it has detected the debugger is enabled.」という表示されます。デバッガを切断した状態でアプリを再起動するか、XcodeのEdit Scheme...からDebug executableのチェックを外して実行して、クラッシュを発生させてみてください。

ビルドスクリプトの設定

iOSのクラッシュデータは、そのままでは関数名が表示されずクラッシュが発生した箇所や原因の特定が困難になります。そのためシンボル情報をアップロードするためにビルドスクリプトの設定を行ってください。なお、bitcodeが有効な場合は本スクリプトではアップロードされません。こちらを参照し、dSYMを取得して手動でのアップロードを行ってください。

  1. 対象となるTargetのBuild Phasesを表示し、+ボタンよりNew Run Script Phaseを選択し、Run Scriptを追加してください
  1. iOS Agent 7.4.0以降をインストールされる場合、Run Scriptの中のShellの中に以下のコードを追加してください。APP_TOKENは、前述のアプリケーショントークンの取得で取得したトークンに置き換えてください。)
ARTIFACT_DIR="${BUILD_DIR%Build/*}SourcePackages/artifacts"

SCRIPT=`/usr/bin/find "${SRCROOT}" "${ARTIFACT_DIR}" -type f -name run-symbol-tool | head -n 1`
/bin/sh "${SCRIPT}" "APP_TOKEN"

以上で基本的な設定は完了です。その他細かい設定の変更などは、以下の参考情報やドキュメントページをご参照ください。

アプリ起動時間の取得設定

7.4.0以降のiOS Agentを導入していただくだけで、追加の計装を行う必要なく、「コールドタイム」、「ホットタイム」と呼ばれるアプリの起動時間を報告することができます。

 

参考情報

  1. Swift interaction tracesの有効化
  2. Agentの設定や機能フラグの変更方法
  3. トラブルシューティング
  4. MobileAgentで収集されるデータの説明