error MT0117: Can’t launch a 32-bit app on a simulator that only supports 64-bit apps

「VisualStudio for Mac」上で「Xamarin」の「iOS10」以前のサンプルプロジェクトでは以下のようなエラーが出ることがあります。

「error MT0117: Can’t launch a 32-bit app on a simulator that only supports 64-bit apps」というエラーは直訳すると「64ビットアプリだけをサポートするシミュレータ上で32ビットアプリを起動することができません」という意味です。

つまり64ビットでビルドしてからデバッグしましょう、ということです。

そこで「ソリューション」ビューの「.iOS」を右クリックして「オプション」メニューを開きます。
「ビルド」→「iOSビルド」をクリックします。
「サポートされるアーキテクチャ」が「i386」なら「x86_64」に変更して下さい。

これで「Simulator」の64bitに対応します。

Xamarin.iOSのMetalで3Dプログラミング

「Visual Studio for Mac」で「Xamarin.iOS」の「Metal」をいじっています。

でも「FBX SDK」は「C++」なので、「Cocoa」の「Objective-C」で、FBXファイルを「CSharp」ファイルにモデルデータとアニメーションを配列として書き出すところまでプログラムができました。

困ったところは、「シェーダー」でコードからボーンの番号を「int」型で送ったらうまくいかず「float」型でボーン番号を送ったらうまくいきました。

また「SetVertexBuffer」の「offset」を変更することでアニメーションさせているのですが、オフセットのサイズに「sizeof(float)」の値も乗算してやる必要がありました。

また「DirectX」や「OpenGL」ではデフォルトでZバッファが効いていましたが、「Metal」は常にZバッファを上書きする
DepthCompareFunction = MTLCompareFunction.Always,
だったのを、既存のZバッファより手前に描かれるときにだけ描画する
DepthCompareFunction = MTLCompareFunction.Less,
に変更するのに気づきませんでした。

iOS・Androidアプリ「3D Quiz – 別視点から間違い探し」

以前までFlash製だった「3Dクイズ.com」をHTML5に作り直しました。全49問あります。
http://3d-quiz.com

また「3Dクイズ」のiOSスマホアプリ版「3D Quiz – 別視点から間違い探し」をApp Storeで公開しました。
https://itunes.apple.com/jp/app/3d-quiz-%E5%88%A5%E8%A6%96%E7%82%B9%E3%81%8B%E3%82%89%E9%96%93%E9%81%95%E3%81%84%E6%8E%A2%E3%81%97/id1235138240

さらにAndroid版「3D Quiz – 別視点から間違い探し」をGoogle Playで公開しました。
https://play.google.com/store/apps/details?id=com.roxiga.quiz3d

コンテストに応募する場合は5~10問ぐらい作ればよかったのですが、ストア向けにボリュームたっぷりに100問作りました。
友人に「一発ネタばかりでなく、お腹一杯になるようなアプリは作らないの?」と聞かれたので、一発ネタをたっぷりのボリュームで問題をたくさん作りました。

UrhoSharpのプロジェクト設定方法

「Xamarin」の「UrhoSharp」の設定方法を4つ紹介します。

①プロジェクトフォルダで「右クリックメニュー」の「オプション」メニューで、「ビルド」→「全般」→「ターゲットフレームワーク」→「.NET Portable」→「Change」ボタンを押し、「.NET Framework」「Windows 8 or later」「Windows Store apps(Windows 8)」「Xamarin全部」にチェックを入れ、それ以外のチェックは外します。
これで「UrhoSharpパッケージ」が追加できるようになります。

②3つのフォルダのそれぞれを「右クリックメニュー」で「追加」→「NuGetパッケージの追加」で、右上の検索窓に「UrhoSharp」を入力し、選択して「Add Package」ボタンを押します。

③Droidフォルダを「右クリックメニュー」の「オプション」メニューで、「実行」→「構成」→「Default」→「Intent」タブ→「明示的インテント」→「Activity」でActivityを指定すると、「Back」ボタンでActivityを終了できるようになります。

④iOSフォルダを「右クリックメニュー」の「オプション」メニューで、「ビルド」→「iOS Build」→「パッケージ」→「PNG画像の最適化」のチェックを外します。
これで「RGB(A)」→「BGR」で色が入れ替わらなくなります。

CocosSharpの戻るボタンと終了処理の問題

「CocosSharp」には重大な欠陥があります。
それはAndroidのバックボタンが使えないことと、終了処理ができないことです。
英語圏で調べると、Back Buttonは上書きできなくはないようですが、終了処理は駄目らしいです。

そこで解決策として「Xamarin.Forms」版の「CocosSharp」を使えば問題が無くなります。
ただラッパーの上にさらにラッパーしてるかもしれないので、CPUやGPUの負荷が大きいかもしれません。

でも「Xamarin.Forms」で「UI」が楽に実装できるので、ゲームに用途を限定しなければ、逆に役に立つ実装方法かもしれません。

「Xamarin.iOS」で「Loop – 簡易ループシーケンサー」開発

超シンプルな作曲ツールのiOSアプリ「Loop 簡易ループシーケンサ」をApp Storeで公開しました。


http://xamarin.vixar.jp/ios/loop.html

以前までは、iOSとAndroidとWindowsでクロスプラットフォームする「Xamarin.Forms」を使ってアプリを作っていましたが、今回はiOS固有の機能を100%使える「Xamarin.iOS」を使って作成しました。
もちろんプログラミング言語は「C#」です。

今度は「Xamarin.iOS」と「Xamarin.Forms」のiOS固有の機能を使った入門書を執筆しようと、簡単なサンプルを開発しました。

Segmented Control FormsPluginとAndroidのバージョン

「NuGet」で取得できる「Segmented Control for Xamarin Forms 1.1.0」ですが、「Android API 15+」で使用できるとありますが、どうやらデバイスによっては動作しないようです。

segmentedcontrol
https://github.com/alexrainman/SegmentedControl

僕が試したのは「Android4.2(API 17)」の「Galaxy Nexus」ですが、エラーが出て動作しませんでした。
でも「Android 6.0(API 23)」のエミュレーターでは動作したので、「これは端末のバージョンに問題があるのでは?」と考え、親の「Android 4.4(API 19)」と「Android 5.0(API 21)」で試すとどちらも実行できました。
ただしAndroid 4.4では若干絵がずれていますが。
やはりAndroidも新しい機種を使わないと時代に乗り遅れるなあ、と思った次第です。

Xamarinでサウンドファイルが再生できない場合

XamarinStudioやVisualStudioでサウンドファイルが鳴らない場合の設定方法があります。
プロジェクトビューのサウンドファイルを右クリックメニューの「ビルドアクション」で「Content」を選ぶだけです。
そうすれば「CCSimpleAudioEngine.SharedEngine.PlayEffect」でサウンドが再生できるようになります。
これはiOSの場合だけで、Androidでは無理にこうしなくても鳴らすことができるようです。

Webサイト「Xamarin研究所」公開

Xamarin.Formsなどを解説する「Xamarin研究所」を開設しました。


http://xamarin.vixar.jp/

XamarinはiOS・Android・Windowsでスマホ向けなどにC#言語でクロスプラットフォームできる最新技術です。

XamarinではCocosSharpなどでゲームも作れますが、ツールを作るならゲームのように画像やサウンドの素材アセットがなくてもUIだけでアプリを完成させられるのがオールインワンでいいですね。

まだWebデザインは暫定的にこのようにシンプルなままです。

iPhone実機でデバッグ中にデバイスが動かなくなった場合

iPhoneをMacにUSBで繋いで、Xamarin Studioで開発中に、Debugで実機で動作テストしている最中にUSBケーブルを抜いてしまうと、iPhoneデバイスが真っ暗になって動作しなくなる可能性があるようです。
多分Xcodeでも?
その場合、もう一度iPhoneをUSBコードで繋いで、デバッグビルドしてみてください。
僕の場合はそれでiPhoneが正常に動きました。