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」なら「i386 + x86_64」または「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,
に変更するのに気づきませんでした。

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

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

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

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

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

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


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

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

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