Xamarinでよくハマる事と対処方法
本記事は、Xamarin Advent Calendar 2018 の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ドライブ直下などに移動させましょう。
いつもなら直ぐ終わるビルドが10分以上待っても終わらない
まずはビルドログが表示されているか、確認しましょう。
上記のようにビルドログが表示されていない場合は、ビルド開始時に失敗している可能性が高いです。
この場合は、ビルド
メニューのキャンセル
を選択してビルドを中止します。
数秒~十数秒ほど待つとビルドが中止されるので、再度ビルドを行えばOKです。
Androidで配置エラーが発生する
よく見るこいつです。
APKファイルをAndroid端末にインストール失敗すると発生するようです。
原因としては下記が考えられます。
- 転送すべきAPKファイルがそもそもない
- APKファイルはあるけどインストールに失敗する
転送すべきAPKファイルがそもそもない
ビルドが失敗し、APKファイルが作成されていない可能性があります。
Hogehoge.Android\bin\Debug
フォルダの中にfugafuga.apk
ファイルがあるかを確認してみましょう。
もし存在しないのであれば、リビルドしてAPKファイルを作成しましょう。
APKファイルが作成されない場合は、ビルドに失敗している可能性があります。ソースコード等を見直しましょう。(構成マネージャーも見たほうが良いかもしれません)
APKファイルはあるけどインストールに失敗する
インストールできないAPKファイルが作成されていると考えられます。
コマンドで直接インストールしてみましょう。
$ cd Hogehoge.Android\bin\Debug
$ adb install -r fugafuga.apk
おそらく失敗すると思います。表示されるエラーメッセージで検索して原因を調査しましょう。
ありがちなのは下記だと思います。
- 作成したアプリの
versionCode
が小さい - インストール済みAPKと署名が異なる
- たとえば、デバッグ用とリリース用で署名が異なる
- サポートしていないアーキテクチャ
- たとえば、
armeabi-v7a
のみでビルドしたAPKだが、Androidエミュレータ(x86_64)にインストールしようとしている- 昔これで2時間ぐらいハマりました……
- たとえば、
謎のビルドエラーが発生する
この現象は、いくつかパターンがあります。
例えば、下記のようなビルドエラーが発生します。
- MSB4018: "LinkAssemblies" タスクが予期せずに失敗しました。
ほかにも
- AggregateException: 1つ以上のエラーが発生しました。
とかです。よく分かりませんね。私も分かりません。
こういう場合は、
- リビルド(クリーンしてからビルド)
- Visual Studioを再起動
でだいたい直ります。
それでも直らない場合は、
- objフォルダやbinフォルダを削除
- git管理下なら、
git clean -dfx
が手っ取り早いかもしれません
- git管理下なら、
- PCを再起動
してみましょう。
それでも直らない場合は、頑張ってください……。
iOS端末(実機)を正しく認識しない(有線)
今のところVisual Studioで見たことはないですが、XcodeとiOS端末を有線接続した際に見たことがあるので、紹介しておきます。
Xcode上ではiOS端末を認識しています(端末名は表示される)が、デプロイに失敗します。(いつまで経ってもデプロイできない)
この場合は、iOS端末を再起動すると直ることが多いです。
それでも直らない場合は、アクティビティモニタからiTunes Helper
を強制終了させ、MacとiOS端末を再接続すると直りました。(私の場合)
まとめ
上記内容以外にも不可解な現象に遭遇するかもしれませんが、クリーンビルドや再起動で直る事が多いです。
- リビルド(クリーンしてからビルド)
- Visual Studioを再起動
- objフォルダやbinフォルダを削除
- PCを再起動
- 端末を再起動