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でエミュレーターを起動させました。
発生した問題
①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
インストール後に新規追加されたテンプレートを試すと上記問題は解消した。
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アプリは開発経験があるが、iOS、Androidアプリはさっぱりなので大変苦労すると思う。
以上
XamarinとAndroid Studioの共存
背景
環境:
・Windows 10
・Visual Studio Community 2017
Xamarinでアプリを作ろうとしてインストールしたけどベースにしたいアプリがAndroid Studioで組まれたものだったので、とりあえずXamarin入れた後にAndroid Studio入れて、SDKはXamarinで入れたものを使おうとしたらパスにスペースが入ってたらあかんで!って言われてどうにかSDKを共存させようとした話。
SDKサイズ大きいのでね、節約したいですよね。
Xamarin側のSDKパスを変更
ツール->オプション->Xamarin->Androidの設定
よりパスをAndroid Studioで入れたものに変更
デフォルトだと C:\Users\xxxx\AppData\Local\Android\sdk
SDK ManagerのGUIが上がらない
上記パスに変更したらGUIが立ち上がらなくなった。
いろいろ調べても解決しなかったので途方に暮れていたらSDKのディレクトリ内のSDK Readme.txtに書いてあった。
解決
To start the SDK Manager, please execute the program "SDK Manager.exe". From the command-line you can also directly trigger an update by executing: tools\android.bat update sdk --no-ui
…つまりあれか、Android Studioで入れたやつは勝手に"--no-ui"オプションをつけて立ち上げているのでは?と思い試しにXamarinで入れたSDKディレクトリ内のandroid.batをAndroid Studioで入れたSDK内に上書きした。
(.batの差分とったけどそれっぽい違いがあった。Android Studioから起動するSDK Managerは専用のGUIっぽいしね。)
…
…
立ち上がったやんけ!
SDKはAndroid Studioですでに入れたものがちゃんと出ている。
あーでも、Android StudioでSDK Manager上げたらおかしくなるんじゃないの?と思って立ち上げてみたけどぱっと見問題なし。
とりあえずこれで無駄にディスク容量食わずに開発できそうです。
ただNDKはXamarinとAndroid Studioで要求バージョン違うので、とりあえず別個に入れてます。(あとで統一するかも)
注意点として
・XamarinでインストールしたSDK Managerは直接削除せずに「プログラムと機能」から削除すべき
・Visual StudioのインストーラーにてXamarinが入った状態で「変更」をクリックすると勝手にSDKが復活するので押さないこと(なんだこのクソ仕様)
(追記)
・Android SDKディレクトリ内のadb.exeがVisual Studioを終了しても落ちない。VS落とした後に再度Androidをビルドしようとするとうまくいかなくなるかもしれないので都度落とした方がいいかも
以上