読者です 読者をやめる 読者になる 読者になる

もっふもふの電子回路

備忘録的なあれ

Visual Studio 2017 + Xamarinでクロスプラットフォーム開発(1)

背景

クロスプラットフォームアプリを作りたくて環境構築にひたすら手間取った話。

環境:
・windows10 Pro
Visual Studio 2017
・Xamarin 4.4
mac Sierra 10.12.4
Xcode 8.3.2
・Xamarin Studio 6.3(build 863) <-成功
Visual Studio for Mac <-失敗

Windowsメインで、macエミュレーターを起動させました。

ゴール

前回の環境でWindowsのVisual Studio2017にてテストアプリビルドによるAndroidエミュレータ起動まで確認できました。
今回はiOSエミュ起動がゴールです。

発生した問題

Visual StudioのXamarinクロスプラットフォーム アプリテンプレートのバグ

mac OSおよびXcodeを最新にし、Visual Studio for Macをインストール
Visual Studio for Macにてテストアプリがビルド&iOSエミュが立ち上がることを確認し、今度はWindows側でテストアプリにてビルドできるか確認。
しかしビルド時にいくつかの画像ファイルが読み込めないトラブルが発生した。
プロジェクトディレクトリ内のアプリ名.iOS/Resources 内にあるテンプレートからコピーされるはずの画像類、例えば「Default-568h@2x.png」など。
エラーメッセージから該当パスを確認するとブランク(真っ黒)になった画像ファイルが見つかった。

理由は不明だが、テンプレートからコピーする際にバイナリが壊れる模様。何度か試しても同様の結果になった。ちなみにテンプレートの大本の画像は無事だった。

仕方なくテンプレートをXamarin関係の別のものを使うことにし、人気順で一番上にきた「Prism Template Pack」を使用。
Prism Template Pack - Visual Studio Marketplace

インストール後に新規追加されたテンプレートを試すと上記問題は解消した。
f:id:gadgetcat:20170422192454p:plain


Xamarinのテンプレートは試験運用中ということで覚悟はしていたがこんな問題が起こるとは想定外だった。
ちなみにAutofacとかDrylocとかなにそれ怖い知らない。これも覚えた方がいいのかなぁ

iOS.exe conflicts with another assembly

続いてビルドしたところ、アプリ名+iOS.exeが競合しているというエラーが出現。
エラーメッセージで調べてもごく最近起こっている問題のようで、明確な解決策を見つけることができなかった。
もちろんMac側のビルドキャッシュを削除したり、該当ディレクトリに異常はないかはチェックした。

途方にくれていたがふとVisual Studio for Macはプレビュー版だったことを思い出し、いったんアンインストール
Xamarin Studioを入れた。
インストール後すぐにXamarin Studioの更新通知が。Xamarinで使うSDKを更新するぜ!という内容だったが、これが効いたのか無事Visual Studio 2017側からビルド成功、エミュレータが立ち上がることを確認した。


上記問題等により1日潰れてしまったが、エミュレータが立ち上がった時は震えた。
(そもそもMacで開発すればいいのでは?と思われるかもしれないが、自分は生粋のwindowerであるため却下)

次はIsolatedStorageあたりを使ってアプリ領域内にストレージを確保する処理を作りたい。
ちなみに自分はWPFアプリは開発経験があるが、iOSAndroidアプリはさっぱりなので大変苦労すると思う。

以上