Xamarinでよくハマる事と対処方法

# Xamarinでよくハマる事と対処方法

本記事は、[Xamarin Advent Calendar 2018](https://qiita.com/advent-calendar/2018/xamarin) の3日目となります。

明日は @hypermild さんです。よろしくお願いします！

## はじめに

Xamarinで（個人的に）よくハマる事と対処法をまとめてみました。

## 環境

* Windows
  * Windows 10 Pro
  * Visual Studio 2017 Community (Ver15.9.3)
* macOS
  * MacBook Air (Early 2014)
  * macOS High Sierra (Ver10.13.6)
  * Visual Studio for Mac Community (Ver7.7)
* Android端末（実機）
  * Nexus 5X (Android Ver8.1.0)
* iOS端末（実機）
  * iPhone 7 (iOS Ver12.1)

## よくハマること

### Androidのビルドが失敗する

Windowsの場合は、フォルダパスが長すぎると失敗します。

そのため、プロジェクトフォルダをCドライブ直下などに移動させましょう。

* [Xamarin.Forms のプロジェクトでフォルダパスが長すぎてエラーになってしまうときの対処法](https://blog.okazuki.jp/entry/2017/09/08/175913)

### いつもなら直ぐ終わるビルドが10分以上待っても終わらない

まずはビルドログが表示されているか、確認しましょう。

![](https://qiita-image-store.s3.amazonaws.com/0/203323/eca434b3-9b85-ee3c-f923-24f9f7e4d000.png)

上記のようにビルドログが表示されていない場合は、ビルド開始時に失敗している可能性が高いです。

この場合は、`ビルド`メニューの`キャンセル`を選択してビルドを中止します。

![](https://qiita-image-store.s3.amazonaws.com/0/203323/905e6218-d5ec-5344-97c8-9c3bdefe3b5b.png)

数秒～十数秒ほど待つとビルドが中止されるので、再度ビルドを行えばOKです。

### Androidで配置エラーが発生する

よく見るこいつです。

![](https://qiita-image-store.s3.amazonaws.com/0/203323/806fd75f-8cdb-04d0-a64f-6b1928c369f1.png)

APKファイルをAndroid端末にインストール失敗すると発生するようです。

原因としては下記が考えられます。

* 転送すべきAPKファイルがそもそもない
* APKファイルはあるけどインストールに失敗する

#### 転送すべきAPKファイルがそもそもない

ビルドが失敗し、APKファイルが作成されていない可能性があります。

`Hogehoge.Android\bin\Debug`フォルダの中に`fugafuga.apk`ファイルがあるかを確認してみましょう。

![](https://qiita-image-store.s3.amazonaws.com/0/203323/dc08fab5-c672-3ccf-6427-bebea85a247d.png)

もし存在しないのであれば、リビルドしてAPKファイルを作成しましょう。

![](https://qiita-image-store.s3.amazonaws.com/0/203323/e521c909-f456-9fa7-7739-1976cd1bbba3.png)

APKファイルが作成されない場合は、ビルドに失敗している可能性があります。ソースコード等を見直しましょう。（構成マネージャーも見たほうが良いかもしれません）

#### APKファイルはあるけどインストールに失敗する

インストールできないAPKファイルが作成されていると考えられます。

コマンドで直接インストールしてみましょう。

```text
$ cd Hogehoge.Android\bin\Debug
$ adb install -r fugafuga.apk
```

おそらく失敗すると思います。表示されるエラーメッセージで検索して原因を調査しましょう。

ありがちなのは下記だと思います。

* 作成したアプリの`versionCode`が小さい
* インストール済みAPKと署名が異なる
  * たとえば、デバッグ用とリリース用で署名が異なる
* サポートしていないアーキテクチャ
  * たとえば、`armeabi-v7a`のみでビルドしたAPKだが、Androidエミュレータ(x86_64)にインストールしようとしている
    * 昔これで2時間ぐらいハマりました……

### 謎のビルドエラーが発生する

この現象は、いくつかパターンがあります。

例えば、下記のようなビルドエラーが発生します。

* MSB4018: "LinkAssemblies" タスクが予期せずに失敗しました。

![](https://qiita-image-store.s3.amazonaws.com/0/203323/93e71e49-800c-d549-9768-f9b9611baca8.png)

ほかにも

* AggregateException: 1つ以上のエラーが発生しました。

![](https://qiita-image-store.s3.amazonaws.com/0/203323/bdd07075-c7f3-fa1b-2b03-e4d0a66ca0cd.png)

とかです。よく分かりませんね。私も分かりません。

こういう場合は、

* リビルド（クリーンしてからビルド）
* Visual Studioを再起動

でだいたい直ります。

それでも直らない場合は、

* objフォルダやbinフォルダを削除
  * git管理下なら、`git clean -dfx`が手っ取り早いかもしれません
* PCを再起動

してみましょう。

それでも直らない場合は、頑張ってください……。

### iOS端末（実機）を正しく認識しない（有線）

今のところVisual Studioで見たことはないですが、XcodeとiOS端末を有線接続した際に見たことがあるので、紹介しておきます。

Xcode上ではiOS端末を認識しています（端末名は表示される）が、デプロイに失敗します。（いつまで経ってもデプロイできない）

この場合は、iOS端末を再起動すると直ることが多いです。

それでも直らない場合は、アクティビティモニタから`iTunes Helper`を強制終了させ、MacとiOS端末を再接続すると直りました。（私の場合）

![](https://qiita-image-store.s3.amazonaws.com/0/203323/4b6076e7-3f87-9125-c5f9-3e4a105bf8f2.png)

## まとめ

上記内容以外にも不可解な現象に遭遇するかもしれませんが、クリーンビルドや再起動で直る事が多いです。

* リビルド（クリーンしてからビルド）
* Visual Studioを再起動
* objフォルダやbinフォルダを削除
* PCを再起動
* 端末を再起動