XamarinでAndroidのServiceクラスが使えないとき

[Android] FusedLocationProviderApi を使って位置情報を取得

を参考にVisualStudio for Mac(Xamarin)でServiceとBroadcastReceiverを使おうとしたら呼ばれない。ブレークポイントすらも止まらない。AndroidManifest.xmlに記述が抜けてるのかと思ったがそれも違う。

なぜなんだと思ってXamarinの公式サンプル見たらわかった。

クラスの定義にカスタム属性つけるだけだった。。

Service
[Service]
public class MyService : Service
{
    /* ... */
}
BroadcastReceiver
[BroadcastReceiver(Enabled = true, Exported = false)]
public class MyReceiver : BroadcastReceiver
{
    /* ... */
}

これ書いとけばAndroidManifest.xmlには何も書かなくても動いた。

Xamarinはこういうくだらないけど知らないとハマるポイントが結構あってムカつく。Xamarinは生産性に寄与しない気がする。

Xamarinの良いところって結局C#で書けるということくらいだろうと思う。

正直C#よりもSwiftとKotlin使えるのであればそっち使えたほうが嬉しい。。