Xamarin.iOSエミュレータ利用時のエラー

松山事務所の横山です。Xamarin調査の中でiOSエミュレータでハマった内容をメモ。

環境/手順

  • Win
    • Windows8.1
    • Visual Studio 2017
  • Mac
    • macOS Sierra
    • Visual Studio for Mac

Visua Studio 2017から”クロスプラットフォーム アプリ(Xamarin.forms)”を新規作成。
Xamarin Mac AgentでMacとの接続を確認後、スタートアップを”iOS”に変更し
仮想デバイスを”iPhone 6s iOS 10.3″で「デバックの開始」を実行。

リソースファイルの破損

するとビルド時に以下のエラーが発生。

System.IO.FileNotFoundException:
/Users/[ユーザー名]/Library/Caches/Xamarin/mtbs/builds/[プロジェクト名].iOS
/b9dc2b080afa52249bd1d043d9169e36/obj/iPhoneSimulator/Debug
/optimized/Default-568h@2x.png does not exist

スプラッシュ用の画像が無いと怒られてしまいます。
調べてみると、iOSプロジェクトのResourcesフォルダ内のpngファイルが破損してました・・・。
テンプレートからコピーする際に破損している様で、何回試しても同じ結果になります。

色々と思考錯誤の結果、以下の2パターンでエラーを回避。

1.ビルドオプションの変更

iOSプロジェクトのプロパティを開き[iOSのビルド]-[全般]タブ-[パッケージ化のオプション]

「iOS用にPNGイメージファイルを最適化する」のチェックボックスをオフ。

※無事にエミュレータは起動しますが、スプラッシュ画像、アイコン画像は表示されません。

2.テンプレートファイルからの上書き

テンプレートのpngファイル自体は破損していないので、テンプレートのファイルをResourcesフォルダ内に上書きコピー。
テンプレートファイルの場所は環境によっても違うと思いますが、
以下のインストールフォルダ内のzipファイルにありました。

\Common7\IDE\Extensions\uzgxgw1j.hd1\T\P\CSharp\Cross-Platform

※ソリューション作成時の「テンプレートの選択」で使用するテンプレートは変わると思いますが、
Forms.Shared.zip内のResourcesで問題ないと思います。
※既にiOS用の画像を用意している場合は、その画像を設定すれば問題ないと思います。

Xamarin.iOSのバージョン違い

なんとかリソースファイルの問題を解決したと思ったら、次に以下のエラーが発生

The root assembly
/Users//Library/Caches/Xamarin/mtbs/builds/.iOS
/9488f510137a57270df688cd7963385e/bin/iPhoneSimulator
/Debug/.iOS.exe conflicts with another assembly

WindowsとMacでXamarin.iOSのバージョンが違うのが原因のよう・・・。

Win:10.8.0.174
Mac:10.10.0.21

Mac側で以下の古いXamarin.iOSをインストールするとエミュレータが起動しました。

https://dl.xamarin.com/MonoTouch/Mac/xamarin.ios-10.8.0.175.pkg

TOP
TOP