松山事務所の横山です。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