先日、Visual Studio For Macがリリースされたので、使ってみました。
ちなみに、アプリ開発は、趣味でのUnity開発以外やったことないのですが、ネイティブアプリのロジック部分ををCSHARPによる統一コードで作れるので、簡単なアプリケーションを実装するまでやってみた。
##インストール
以下のアドレスよりインストールできます。
https://www.visualstudio.com/ja/vs/visual-studio-mac/
基本的に画面の指示通りにインストールできました。
マルチプラットフォーム→ブランクフォームアプリを選択
指示に従って、プロジェクトの作成を完了します。
##ビューをXAMLで書く
ビューを変更するときは、xamlファイルを変更します。
今回は、helloworldsPage.xamlを編集します
<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:helloworlds" x:Class="helloworlds.helloworldsPage">
<StackLayout HorizontalOptions="Center" VerticalOptions = "Center">
<Label Text="text" x:Name="label"></Label>
<Slider x:Name="slider"></Slider>
</StackLayout>
</ContentPage>
ここで、x:Nameがコード上での名前になります。
実際には、このxamlからコードが作られ、そのコード上で宣言されています。
##コード部分を書く
上記で、テキストの部分にスライダーの値を表示するようにします。
Sliderの項目に、valueChanged="handle_ValueChanged"
を追加すると、自動的にコードが生成されます。
そこを、このように編集します
using Xamarin.Forms;
namespace helloworlds
{
public partial class helloworldsPage : ContentPage
{
void Handle_ValueChanged(object sender, Xamarin.Forms.ValueChangedEventArgs e)
{
label.Text = string.Format("Hello {0:F2]", e.NewValue);
}
public helloworldsPage()
{
InitializeComponent();
label.Text = string.Format("Hello {0:F2}", slider.Value);
}
}
}
##コンパイルと実行
ツールバーの以下の部分で、対象とするデバイスを選んで起動できます。
helloworlds.Droidを、iOSに切り替えると、iOSのデバッグもできます。
再生ボタンを押すとコンパイルが始まり、シミュレーターが起動します。
iOS,Android双方で同じアプリケーションが動くことを確認できるでしょう!
##おまけ クロスプラットフォームアーキテクチャ
どうやってCSharpで、両方のネイティブ環境で動くプログラムを作っているのか気になったので調べてみた。
AndroidとiOSでは違うアプローチで変更していた。
###Android
CSharpコード
↓
IL(中間コード)+Mono Runtime
↓ JIT(Just In Time)コンパイル
ネイティブコード
###iOS
一方で、iOSではJITが許可されていないので
CSharpコード
↓
IL(中間コード)
↓AOT(Ahead of time)
ネイティブコード
となっているようだ。間違っているかもしれない