Xamarin アプリケーションをモニタするには、アプリケーションをインストゥルメント化し、Xamarin エージェントがモバイルメトリックを収集できるようにする必要があります。 

モバイル RUM をセットアップしアクセスしたら、次の手順を実行します。

  1. サポートされるプラットフォームの確認
  2. Xamarin エージェントの制限事項を理解する
  3. Xamarin アプリケーションのインストゥルメント化
  4. (オプション)ネットワークリクエストの自動インストゥルメンテーションの有効化
  5. (オプション)Xamarin インストゥルメンテーションのカスタマイズ
  6. (オプション)オンプレミス EUM サーバーへのポイント

Xamarin エージェントのサポート

サポートされるプラットフォーム

  • iOS および Android プラットフォーム

他のすべてのプラットフォームはエラーなしで構築および実行されますが、モニタリングは行われません。

サポート対象のライブラリ

  • .Net Standard 2.0(Xamarin エージェント 20.10.0 以降を使用)

推奨事項

Xamarin 50.2 以下では、ポータブルクラスライブラリ(PCL)を参照するアプリケーションのインストゥルメンテーションのみがサポートされていました。Xamarin 50.3 以上では、Xamarin エージェントは .NET Standard ライブラリと .NET Standard ライブラリを参照するアプリケーションのインストゥルメンテーションのみをサポートしています。引き続き PCL のサポートが必要な場合は、Xamarin 50.2 以下を使用することをお勧めします。


制限

Xamarin エージェントには、次の制限事項があります。

  • 自動インストゥルメンテーションはサポートされていないため、手動でイベントおよびメトリックを報告する必要があります。
  • シンボル化はサポートされていません。ただし、Xamarin エージェントは検出されていない例外とネイティブアプリケーションのクラッシュを報告します。

Xamarin アプリケーションのインストゥルメンテーション

次の手順に従って、Xamarin iOS、Android、および Forms アプリケーションを手動でインストゥルメント化します。 

Xamarin エージェントパッケージの追加

  1. Xamarin エージェントは NuGet ギャラリーから取得します。nuget.org から AppDynamics Xamarin エージェントのパッケージを追加するには、「パッケージの追加」に記載されている手順に従ってください。 
  2. AppDynamics.Agent.Forms の Xamarin.Forms パッケージを追加します。
  3. Xamarin.Android プロジェクトで、以下を OnCreate の下の MainActivity.cs  に追加します。
AppDynamics.Droid.Agent.Init(this, bundle);
CODE

Example

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity {
    protected override void OnCreate(Bundle bundle) {
        base.OnCreate(bundle);  //existing code
        global::Xamarin.Forms.Forms.Init(this, bundle);

        AppDynamics.Droid.Agent.Init(this, bundle); //initialize the agent on the Android Platform 
        
        LoadApplication(new App()); 
    }
}
C#

アプリケーションキーの取得

EUM アプリケーションキーを取得するには、Getting Started Wizard を完了します。このキーは、ソースコードを変更するときに必要になります。場合によっては、複数のモバイルアプリケーションが同じキーを共有できます。

Xamarin プラットフォームオプションがないため、Android または iOS のいずれかを選択する必要があります。Android の場合、Manual を選択する必要があります。

[Getting Started Wizard] を完了したが、EUM アプリケーションキーを持っていない場合は、「アプリケーションキーの取得」を参照してください。

必要な権限の追加(Android 展開のみ)

ファイル Properties/AndroidManifest.xml を開き、次の権限があることを確認します。

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
XML

これらの権限が存在しない場合は、Properties/AndroidManifest.xml ファイルに追加します。

AppDynamics エージェントアセンブリのリンク

Forms ソリューション

Xamarin Forms は、すべてのプラットフォームを実行するための統合開発環境です。サポート対象以外のプラットフォームで何かを実行しようとしても、エージェントのリンクによってアプリケーションをモニタすることはできませんが、エラーは発生しません。

iOS/Android アプリケーションに対して Xamarin エージェントを使用するには、App.xaml.cs ファイルの先頭に using ディレクティブを追加します。

using Xamarin.Forms;
using AppDynamics.Agent;

namespace <AppName>
{
    public partial class App : Application
    {
        ...
    }
}
C#

iOS ソリューション

iOS アプリケーションで Xamarin エージェントを使用するには、AppDelegate.cs ファイルの先頭に using ディレクティブを追加します。

using Foundation;
using UIKit;
using AppDynamics.Agent;
 
public class AppDelegate : UIApplicationDelegate
{
    ...
}
C#

Android ソリューション

Android アプリケーションで Xamarin エージェントを使用するには、MainActivity.cs ファイルの先頭に using ディレクティブを追加します。

using Android.App;
using Android.Widget;
using Android.OS;
using System;
using Android.Content;
using AppDynamics.Agent;

namespace <AppName>
{
    [Activity(Label = "Phoneword", MainLauncher = true, Icon = "@mipmap/icon")]
    public class MainActivity : Activity
    {
       ...
    }
    ...
}
C#

エージェントの初期化

Xamarin エージェントを初期化するには、次のコードを iOS および Android に使用します。ステップ 2 を完了した後に受信した EUM アプリケーションキー(文字列として入力)を使用します。 

var config = AppDynamics.Agent.AgentConfiguration.Create(<EUM_APP_KEY>);
AppDynamics.Agent.Instrumentation.InitWithConfiguration(config);
C#

オンプレミス EUM サーバを実行している場合は、EUM サーバへの URL を指定する必要があります。詳細については、「オンプレミス EUM サーバへのポイント(オプション) 」を参照してください。

Forms ソリューション

Forms ソリューションでは、Android と iOS の両方のアプリケーションをインストゥルメント化するために、Xamarin エージェントの App.xaml.cs ファイルのコンストラクタに初期化コードを配置する必要があります。 

public App()
{
    InitializeComponent();
    // This initialization code is used by both iOS and Android apps.
    var config = AppDynamics.Agent.AgentConfiguration.Create(<EUM_APP_KEY>);
    AppDynamics.Agent.Instrumentation.InitWithConfiguration(config);
    MainPage = new FormsExamplePage();
}
C#

ただし、Android 用の MainActivity.cs ファイルまたは iOS 用の AppDelegate.cs ファイルにインストゥルメント化するアプリケーションコードがある場合は、iOS ソリューションおよび Android ソリューションの場合と同様に、これらのファイルで Xamarin エージェントを初期化する必要があります。

iOS ソリューション

iOS アプリケーションの場合、次に示すように、AppDelegate.cs ファイルの初期化コードをクラス AppDelegate のメソッド FinishedLaunching に配置します。 

public class AppDelegate : UIApplicationDelegate
{
   // class-level declarations
   public override UIWindow Window
   {
      get;
      set;
   }
   public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
   {
       // The two lines below initialize the AppDynamics instrumentation.
       var config = AppDynamics.Agent.AgentConfiguration.Create(<EUM_APP_KEY>);
       AppDynamics.Agent.Instrumentation.InitWithConfiguration(config);
       ...
       return true;
    }
    ...
}
C#

また、Main.cs(メソッド Main. 内)に配置することも検討してください。

Android ソリューション

MainActivity.cs ファイルで、初期化コードをメソッド OnCreate: に配置します。

class MainActivity {
 
  protected override void OnCreate(Bundle savedInstanceState) {
    // The two lines below initialize the AppDynamics instrumentation.
    var config = AppDynamics.Agent.AgentConfiguration.Create(<EUM_APP_KEY>);
    AppDynamics.Agent.Instrumentation.InitWithConfiguration(config);
    ...
  }
}
C#

アプリケーションの構築

Visual Studio からアプリケーションを実行して構築します。Getting Started Wizard から、アプリケーションが接続され、インストゥルメンテーションが検証されていることがわかります。

Xamarin エージェントが 20.10.0 ~ 21.4.0 の iOS プロジェクトの場合は、debug ビルドや release ビルドなどの各ビルド構成用に MtouchExtraArgs 引数 --gcc_flags "-ObjC -lz" を追加する必要があります。iOS プロジェクトファイルを直接編集する場合は、ビルド構成に MtouchExtraArgs 要素が含まれている必要があります。

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\iPhoneSimulator\Debug</OutputPath>
    <DefineConstants>DEBUG;ENABLE_TEST_CLOUD;</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <CodesignKey>iPhone Developer</CodesignKey>
    <MtouchDebug>true</MtouchDebug>
    <MtouchFastDev>true</MtouchFastDev>
    <MtouchLink>SdkOnly</MtouchLink>
    <MtouchArch>x86_64</MtouchArch>
    <MtouchHttpClientHandler>HttpClientHandler</MtouchHttpClientHandler>
    <MtouchTlsProvider>Default</MtouchTlsProvider>
    <DeviceSpecificBuild>false</DeviceSpecificBuild>
    <MtouchExtraArgs>--gcc_flags "-ObjC -lz"</MtouchExtraArgs>
  </PropertyGroup>
C#

(オプション)ネットワークリクエストの自動インストゥルメンテーションの有効化

AppDynamics.Agent.AutoInstrument.Fody は、ネットワークリクエストを自動的にインストゥルメント化するために使用できる別の NuGet パッケージ(現在はベータ版)です。

HttpClient および Refit ネットワークリクエストの両方がサポートされています。  

AppDynamics.Agent.AutoInstrument.Fody パッケージのセットアップ

  1. AppDynamics.Agent パッケージを追加します

  2. AppDynamics.Agent.AutoInstrument.Fody パッケージを追加します。 

    AppDynamics.Agent.AutoInstrument.Fody ベータ版パッケージをインストールするには、[Include prereleases] オプションをオンにして、このバージョンが表示されるようにします。

     

  3. ソリューションを構築します。
     

    ソリューションを構築すると、次の 2 つのファイルが自動的に生成されます。

    • FodyWeavers.xml
    • FodyWeavers.xsd 

    これらのファイルはソース管理にチェックインする必要があります。 

    上記のファイルが自動的に生成されない場合は、次の内容を持つ FodyWeavers.xml という名前の新しいファイルを手動で作成する必要があります。

    <Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
      <AppDynamics.Agent.AutoInstrument/>
    </Weavers>
    C#

    プロジェクトですでに Fody が使用されている場合、これらのファイルはすでにそこにあり、AppDynamics.Agent.AutoInstrument ウィーバを含むように FodyWeavers.xml ファイルを更新するだけで済みます。 

    次に例を示します。

    <Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
      ... Existing weavers ...
      <AppDynamics.Agent.AutoInstrument/>
    </Weavers>
    C#
  4. (オプション)自動ネットワーク リクエスト インストゥルメンテーションをカスタマイズします

(オプション)インストゥルメンテーションのカスタマイズ

Xamarin SDK には追加のクラスがあり、アプリケーションデータの種類を拡張し、モバイル RUM を使用して収集および集約できます。詳細については、Xamarin インストゥルメンテーションのカスタマイズを参照してください。

(オプション)オンプレミス EUM サーバーへのポイント

オンプレミス EUM サーバを使用するには、「アプリケーションキーの取得」から EUM アプリケーションキーを使用してインストゥルメンテーションを初期化するときに、オンプレミス EUM サーバに URL を渡します。

var config = AppDynamics.Agent.AgentConfiguration.Create(<EUM_APP_KEY>);
config.CollectorURL = <COLLECTOR_URL:PORT>;
AppDynamics.Agent.Instrumentation.InitWithConfiguration(config);
CODE

Xamarin エージェントのアップグレード

エージェントに新しい機能が追加されるため、アプリケーションで Xamarin エージェントパッケージをアップグレードする必要があります。

  1. Visual Studio から AppDynamics エージェントパッケージを含む Xamarin アプリケーションを開きます。
  2. Packages フォルダから AppDynamics エージェントを選択します。
  3. 右クリックして Update をクリックします。
    AppDynamics Packages