アレアレ

お役立ち情報、お悩み解決情報を発信!

visual studio for mac

iOSアプリをVisual Studio for MacでAndroidに移植してハマった3つのポイント

iOSアプリをVisual Studio for MacでAndroidに移植してハマった3つのポイント

今回は、これからiOSアプリのAndroid版を開発しようと検討している人にお伝えしたいお役立ち情報です。

2016年11月中旬に、Microsoftから、Visual Studio for MacというMac OS向けのIDEが公開されました。そこで、私は、そのVisual Studio for Macを使って、iOS向けのアプリをAndroidに移植してみることにしました。

その結果わかったことをご紹介したい、というのが、この記事の趣旨です。

で、その概要を先にお伝えしておきますと。

「いくつかハマるポイントがあったものの、それを踏まえてもC#で開発できる便利さが上回っている」

と感じました。ただし、これは、私が元々、Windows版でのVisual StudioでC#での開発に慣れているからでもあります。

また、開発結果としては、Visual Studio for Macでapkを生成し、Google Playにアプリを登録、公開するところまで確認できました。

開発環境

さて、この記事を書いている現在ですが、Visual Studio for Macは実はプレビュー版の状況です。

プレビュー版の開発ツールで、実際に公開するアプリを作るのはちょっと気が引けたのですが、「本気で開発してみないとその実のほどはわからない」と考え、Google Playに公開するところまで試してみることにしました。

その開発環境をご紹介しておくと次の通りです。

  • OS: macOS Sierra (バージョン 10.12.1)
  • Visual Studio for Mac: Preview 1 (7.0 build 347)
  • Android Studio: 2.2.2 (Java SE Runtime Environment build 1.8.0_77-b03)
  • Xcode: Version 8.1 (8B62)

ここで、Android StudioやXcodeの開発環境のバージョンを記載したのには理由があります。

というのも、Visual Studio for Macで、iOSやAndroidアプリを開発するためには、これらのインストールが必要になるからです。

また、Androidアプリの開発にあたり、そのUIは、Xamarin.Formではなく、Android Appプロジェクトのテンプレートを利用して行いました。

ハマったポイント1: Visual Studio for Macからシミュレーターが起動しなくなる

Visual Studio for MacでのAndroidアプリ開発にあたり、ハマったポイントとして、「Visual Studio for Macからシミュレーターが起動しなくなる」ということがあります。

Visual Studio for Macで、Androidアプリのプロジェクトをデバッグ実行しても、開発していくうちにAndroidのシミュレーターが一向に立ち上がらない状況となったんですね。

これは、Visual Studio for Macがプレビュー版だからこその問題かもしれませんが、かなり不便を感じることになりました。

その解決策ですが、Android StudioのAVD Managerから一旦、シミュレーターを起動し、それからVisual Studio for Macでデバッグ実行する、という方法で解決しました。

ただ、それでも、たまにVisual Studio for MacからAndroidのシミュレーターにうまくアプリをインストールできないことがあり、不便でした。そのため、結局、私はシミュレーターでのデバッグが面倒になり、Androidの実機でデバッグするようになりました。

Visual Studio for Macの正式版でこの問題が解決していることを強く期待します。

ハマったポイント2: C#、Xamarin、Androidでの情報が少ない

次にハマったポイントとしては、C#、Xamarin、Androidでの情報が少ないことがありました。

基本的なコードは、AndroidのJava向けのサンプルを見て何とかなるのですが、C#とJavaの作法の違いから、プログラミングに戸惑うところもありました。

例えば、Androidでユーザー設定機能を簡単に実装できる仕掛けであるPreferenceFragmentクラスのonPreferenceChangeメソッドの実装です。

このメソッドですが、Javaでは次のように、boolean型の戻りを返すインターフェースとなっています。

public boolean onPreferenceChange(Preference preference, Object newValue)

一方、C#では、同じメソッドが次のように戻り値なしのインターフェースとなっています。

public void OnPreferenceChange(object sender, Preference.PreferenceChangeEventArgs e)

で、このメソッドは、設定画面において、入力された値に変化があった時に呼び出されるものです。その際、入力値を検証するためにこのメソッドが利用できます。

このメソッドの実装にあたり、Javaの方はわかりやすいです。メソッドの戻り値に、問題があれば、戻り値をfalseに、問題なければtrueを返せば良いからです。

一方、C#の場合は、その実装の仕方がよくわからないんですね。メソッドに戻り値がないからです。で、その実装方法ですが、実は、引数のeのHandledプロパティで制御できます。

public void OnPreferenceChange(object sender, Preference.PreferenceChangeEventArgs e){
    e.Handled = true; // or false
}

この実装方法は、C#での開発に慣れていないとわからないものです。ですが、詳しい解説がどこにもないんですね。

このような感じで、大体は同じでも、C#とJavaの作法の違いで戸惑うことがありました。

ハマったポイント3: アンダースコア「_」が入力できずに不便

次にハマったポイントとして、アンダースコア「_」が入力できずに不便ということがありました。これはおそらく、プレビュー版だからの問題と予想されますが、地味に不便でした。

というのも、Android側のUI開発において、ID名にアンダースコアを利用することがよくあるからです。それが入力できず、不便でした。

その対応方法として、別のテキストエディタに入力していた「_」を1文字コピーし、Visual Studio for Macのエディタに貼り付けて入力しました。これは、とても不便でした。

ただVisual Studio for Macでも、アンダースコアが入力できる画面がありました。それは、画面のGUIでのデザイン編集時の属性入力エリアでした。逆にいうと、それ以外の画面では、アンダースコアが入力できず困りました。

ちなみに、本件、MacのJIS配列のキーボードを使っている人固有の問題である可能性はあります。US配列の場合は問題ないかもしれません。

ハマるところもあったが、C#を使えるメリットがそれを上回る

他にも、細々とハマるところはありましたが、基本解決できました。

結果として、Visual Studio for Macからapkを生成し、Google Playで後悔するところまで無事できました。

今回、ご紹介したようなハマるポイントはありました。

ですが、私のようにJavaよりもC#に慣れた開発者にとっては、そのようなデメリットを踏まえても、Visual Studio for Macを利用して、C#でAndroidアプリを開発できるメリットの方が上回っていると感じました。

追記:

この記事を書いた開発フェーズで感じた、「C#での開発による生産性向上」と言うメリットですが、アプリをGoogle Playに公開して1年運用した現在は、考えが変わっています。次の記事の通りです。

Visual Studio for Mac製のAndroidアプリを一年運用して感じているホンネ

Return Top