個人的なメモ

Tomohiro Suzuki @hiro128_777 のブログです。Xamarin に関する事を中心に書いています。 Microsoft MVP for Development Technologies 2017- 本ブログと所属組織の公式見解は関係ございません。

Visual Studio 2019 (Windows) で Surface Duo エミュレーターを使用してみる

はじめに

こんにちは、@hiro128_777です。

いよいよ、Surface Duo が発売になりますね。自分も買って試してみたいですが、残念ながらまだ、日本での発売は発表されていません。

でも、とりあえず早く触ってみたいという方は「Surface Duo エミュレーター」なら今すぐ試せます。

というわけで、Visual Studio 2019 で Surface Duo エミュレーターを使用してみました。

Microsoft Docs に手順がありますが、画像が無くわかりにくいので、画像付きでご説明します。


SDK のインストール

以下のように、API 29 の SDK をインストールします。 

f:id:hiro128:20200920211006p:plain


f:id:hiro128:20200920211022p:plain


f:id:hiro128:20200920211039p:plain


Surface Duo エミュレーターのセットアップ

以下のページを開いて、記載の手順通り「Surface Duo SDK プレビューリリース」から、ダウンロードページにアクセスして、インストーラーをダウンロードしてください。

docs.microsoft.com


インストーラーを起動して Surface Duo エミュレーターをインストールします。

f:id:hiro128:20200922161026p:plain


Surface Duo エミュレーター の起動スクリプトの確認

Android SDK のインストールパスをカスタマイズしている場合、以下の手順で、Surface Duo エミュレーターの起動スクリプトの設定を確認します。 (Android SDK のインストールパスがデフォルトの場合、変更の必要はありません。)

docs.microsoft.com


Surface Duo エミュレーターを起動します。

以下のページの手順の通り、スタートメニューから Surface Duo Emulator for Visual Studio を起動します。

docs.microsoft.com

f:id:hiro128:20200920211425p:plain


起動すると以下のようになります。

f:id:hiro128:20200922160530p:plain


早速アプリをビルドして実行してみましょう

以下にビルドしてすぐデプロイできるサンプルアプリを準備しました。

github.com


Visual Studio 2019 で XFSurfaceDuoSample2020/finish/XFSurfaceDuoSample2020.sln を開き、ビルドして、(実行中のデバイスの一覧で) (Android 10.0 - API 29) を選択し、デバッグ実行します。

f:id:hiro128:20200920211443p:plain



以下の動画の通り、デプロイされアプリが動きます。
なお、Dual Screen で表示させるためには以下の動画の手順でアプリをスパンしてください。

youtu.be


今回は、以上です。

.NET MAUI について今わかっている事を整理しました

MAUI とは

.NET Multi-platform App UI
の略称です。

 

MAUI ってどんなもの?

  • マルチプラットフォームのネイティブ UI ライブラリ
  • モバイルとデスクトップの複数のデバイスにデプロイ可能
  • 単一のプロジェクト、単一のコードベースを使用する
  • Xamarin.Forms の進化版
  • .NET MAUI および新しいモバイル SDK は、.NET 6 と一緒にリリースされる予定です。なお、2020年末にプレビューの予定です。

※ つまり、残念ながら .NET 5 での .NET Core と Mono の統合は延期され、.NET 6 での統合になったということになります…

MAUI のゴール

  • アプリのパフォーマンスを向上させる
  • 簡単にコントロールを拡張できるようにする
  • 簡単にコントリビュートできるようにする
  • Model-View-Update(MVU)と Blazor のアプリパターンを提供する

 

マイルストーン

 

対応プラットフォーム

   Xamarin.Forms        .NET MAUI    
Android API 19 以降 API 21 以降
iOS iOS 9 から iOS 15 まで iOS 10 以降
Linux Community Community
macOS Community Microsoft
Tizen Samsung Samsung
Windows UWP Microsoft WPF Community Microsoft

特長

   Xamarin.Forms        .NET MAUI    
Renderers BindableObject に密結合 疎結合
コア依存なし
スリムレンダラー
App Models MVVM
RxUI
MVVM
RxUI
MVU
Blazor
Single Project ×
Multi-targeting ×
Multi-window ×

 

対応 .NET、プロジェクト形式など

   Xamarin.Forms        .NET MAUI    
対応 .NET Xamarin.iOS
Xamarin.Android
Mono
.NET Framework
その他
.NET 6 以降
取得方法 NuGet & Visual Studio Installer dotnet CLI
プロジェクト形式 SDK 形式 SDK 形式
dotnet CLI 対応 ×

 

開発環境

   Xamarin.Forms        .NET MAUI    
Visual Studio 2019
Visual Studio 2019 for Mac
Visual Studio Code ×

 

MVUの採用

MAUI では、新しいアプリパターンである、MVU が採用される予定です。.NET Blog に、コードのサンプルも提示されていましたが、現在、議論中のため、具体的なコードは提示いたしません。
 

MVUの特長

同じく、.NET Blog によると、MVU には以下の特長があるとのことです。

  • データと状態の管理のフローが一方向になる
  • 必要な変更のみを適用することで UI を迅速に更新できる
  • ホットリロードに最適である

 
 

Xamarin.Forms はどうなるの…

  • Xamarin.Forms の次のメジャーバージョンは2020年9月頃になる予定
  • .NET 6 での .NET MAUI のリリースを通じて引き続き更新されます。
  • その後、Xamarin.Forms は 12 か月間は従来同様メンテナンスされます。(つまり 12か月後以降にはメンテナンスが終了し、製品の終焉を迎えることになりりそうです…)

 

 

本日は以上です。

Visual Studio for Mac で Surface Duo エミュレーターを使用してみる

はじめに

こんにちは、@hiro128_777です。

いよいよ、Surface Duo が発売になりますね。自分も買って試してみたいですが、残念ながらまだ、日本での発売は発表されていません。

でも、とりあえず早く触ってみたいという方は「Surface Duo エミュレーター」なら今すぐ試せます。

というわけで、Visual Studio for MacSurface Duo エミュレーターを使用してみました。

Microsoft Docs に手順がありますが、画像が無くわかりにくいので、画像付きでご説明します。


SDK のインストール

以下のように、API 29 の SDK をインストールします。 

f:id:hiro128:20200906141054p:plain

f:id:hiro128:20200906141116p:plain


Surface Duo エミュレーター のセットアップ

以下のページを開いて、記載の手順通り「Surface Duo SDK プレビューリリース」から、ダウンロードページにアクセスして、dmg イメージをダウンロードしてください。

docs.microsoft.com


上記のページの手順通り、dmg をマウントして、からターミナルで解凍したフォルダに移動します。

f:id:hiro128:20200906141155p:plain

f:id:hiro128:20200906141210p:plain


Surface Duo エミュレーター の起動スクリプトの確認

Android SDK のインストールパスをカスタマイズしている場合、以下の手順で、Surface Duo エミュレーターの起動スクリプトの設定を確認します。 (Android SDK のインストールパスがデフォルトの場合、変更の必要はありません。)

docs.microsoft.com


Surface Duo エミュレーターを起動します。

以下のページの手順の通り、起動スクリプトを実行して、Surface Duo エミュレーターを起動します。

docs.microsoft.com


Surface Duo エミュレーターディレクトリーで

./run_vs.sh

Surface Duo エミュレーターが起動します。

f:id:hiro128:20200906150835p:plain

f:id:hiro128:20200906150903p:plain


早速アプリをビルドして実行してみましょう

以下にビルドしてすぐデプロイできるサンプルアプリを準備しました。

github.com


Visual Studio for MacXFSurfaceDuoSample2020/finish/XFSurfaceDuoSample2020.sln を開き、ビルドして、(実行中のデバイスの一覧で) (Android 10.0 - API 29) を選択し、デバッグ実行します。

f:id:hiro128:20200906150931p:plain



以下の動画の通り、デプロイされアプリが動きます。
なお、Dual Screen で表示させるためには以下の動画の手順でアプリをスパンしてください。

youtu.be


今回は、以上です。

Microsoft Docs 「Objective-C 開発者向けの C# 入門書」

はじめに

こんにちは、@hiro128_777です。
Microsoft Docs の Xamarin.iOS のカテゴリでぜひとも読んでいただきたい記事をご紹介します。

docs.microsoft.com


この記事は、「Objective-C 開発者向けの C# 入門書」というタイトルですが、Xamarin.iOSObjective-C の関係性を理解するのにとても役立ちます。こちらを理解しておくことで、Xamarin.iOS でのハマりどころを理解することができるので、是非、一読していただきたいです。

その中でも、特に重要な部分をピックアップしました。


Objective-C との相互運用

docs.microsoft.com


Xamarin.iOS は単なる、Objective-C の wrapper ではありません。お互いに相互運用できるようになっています。相互運用についての解説です。

プロトコルインターフェイス

docs.microsoft.com


Objective-CプロトコルC#インターフェイスとの違いを説明しています。 どちらも目的は同じですが、微妙な違いがあります。違いについての解説です。この知識は、Objective-CC# に移植する時に特に重要です。


セレクターと名前付きパラメーター

docs.microsoft.com


セレクターのエコシステムをどのように C# の世界で利用するかについて説明しています。Xamarin.iOS ではイベントの代わりにセレクターを使用することも多いので、とても重要な内容です。

本日は以上です。

Microsoft Docs 「Xamarin.iOS API の設計」

はじめに

こんにちは、@hiro128_777です。
Microsoft Docs の Xamarin.iOS のとても良い記事が Human translation されたのでご紹介します。
(この記事、ぜひ Human translation して欲しかったので issue 上げてましたが、それが採用されました。)

ちょっとまだ翻訳がイマイチな部分もありますが、この記事だけで、20くらい PR 上げておいたので、程なく改善されるはずです。

docs.microsoft.com


この記事では、Xamarin.iOSObjective-C の関連によって関して注意しなければならない点がほぼ網羅されています。
Xamarin.iOS でのハマりどころはかなりの部分で、この領域に集約されているので、是非、一読していただきたいです。

その中でも、特に重要な部分をピックアップしました。


NSObject と Dispose の関係とメモリ管理

docs.microsoft.com

docs.microsoft.com


Xamarin.iOS において、ネイティブのインスタンスとマネージドのインスタンスが相互運用される場合、必ずリソースの破棄、つまり Dispose() の問題がついて回りますが、適切に破棄するために理解すべき事項の説明です。


デリゲート

docs.microsoft.com


Xamarin.iOSObjective-C では、デリゲートという言葉は違う文脈で用いられます。
デリゲートを使用する目的は一緒ですが、実現方法が違います。
Objective-C では設計のデザインパターンであり、Xamarin.iOS では言語に組み込まれているメソッドを参照する型です。


イベント

docs.microsoft.com


Xamarin.iOS ではひとつのインスタンスで、Objective-C の selector ベースのイベントと、C#イベントハンドラーベースのイベントをを同時に利用すると、イベントが発火しなくなリますので、ご注意ください。


今回は以上です。

Xamarin.iOS, Xamarin.Android は クロスプラットフォーム開発ツールから C# 版の iOS SDK, Android SDK になりました。

はじめに

こんにちは、@hiro128_777です。
2年ちょっと前に、Xamarin 今そこにある危機という記事を書きましたが、それから2年とちょっとが経過し、Xamarin を取り巻く環境はどう変わったのか、果たして Xamarin は危機を脱したのか、という観点で見ていきたいと思います。

hiro128.hatenablog.jp


いつの間にか変わっていった Xamarin.iOS, Xamarin.Android の位置づけ


Xamarin はご存知の通り、まず、Xamarin.iOS, Xamarin.Android がリリースされ、その後、Xamarin.Forms がリリースされました。
その経緯もあり、ネイティブ iOS SDK や ネイティブ Android API の Wrapper である Xamarin.iOS, Xamarin.Android と、それらを抽象化した UI Toolkit である Xamarin.Forms という構造であるものの、ブランディングとしては別のプロダクトとしてアップデートされていきました。


また、Xamarin.iOS, Xamarin.Android は両者ともそれぞれ、iOS Runtime、Android Runtime と双方向の相互運用が可能です。さらに、iOSAndroidAPI のほとんどが使用できます。(最近サポートされていない機能も増えていますが…)その結果、Xamarin.iOS, Xamarin.Android は、それ単体で iOS, Andtroid のネイティブアプリを開発できる Toolkit であるのと同時に、リリース当初から C# 版の iOS SDK, Android SDK としても利用できるポテンシャルがありました。その結果として、Uno.Platformや、Mobile Blazor Bindings のような Xamarin.iOS, Xamarin.Android の上で稼働するフレームワークが登場してくるというなかなか面白い展開になっています。


これは iOSAndroidAPI を可能な限り全て C# のエコシステムから触れるようにするという Xamarin.iOS, Xamarin.Android のコンセプトが非常優れていたからこその結果だと思っています。正直、昨今 Xamarin.iOS, Xamarin.Android それ自体にスポットが当たることは少なくなってきましたが、Xamarin.Forms や Uno.Platform、Mobile Blazor Bindings の支える重要な API として Xamarin.iOS, Xamarin.Android は今後も生き残っていくことになりました。


というわけで、Xamarin はひとまず危機を脱したと考えています。Visual Studio for Mac も順調にバージョンアップしており、C# で当たり前に iOS API, Android API を触れるのは、私としては非常に嬉しい結果になったと言えます。


今年は Surface Duo も発売され、.NET 5 として Xamarin は統合され、「dotnet new XamarinForms」というコマンドも通るようになるらしいので、Xamarin の今後がとても楽しみです!

Mac Catalyst もサポートして欲しいですが…)

Xamarin.Forms, Uno Platform と Mobile Blazor Bindings の比較

はじめに


こんにちは、@hiro128_777です。

C# / .NET 系のクロスプラットフォームフレームワークもいつも間にか、Xamarin.Forms, Uno.Platform と Mobile Blazor Bindings(まだ Experimental ですが) と3種類も登場しています。「さあ、これから C#クロスプラットフォームやるぞ」という方は、いったいどれから始めればいいのか迷ってしまうと思いますので、それぞれ、どんな違いがあるのかを簡単に整理してみました。



Xamarin.Forms, Uno Platform と Mobile Blazor Bindings のアーキテクチャの比較


Xamarin.Forms

f:id:hiro128:20200224235858p:plain



Uno Platform

f:id:hiro128:20200224235914p:plain



Mobile Blazor Bindings (実験段階)

f:id:hiro128:20200224235926p:plain


Xamarin.Forms, Uno Platform と Mobile Blazor Bindings それぞれの特長

Xamarin.Forms Uno Platform Mobile Blazor Bindings (実験段階)
UI コントロール 各プラットフォーム独自UIを尊重 UWP UI の再現を重視 各プラットフォーム独自UIを尊重
DSL XAML (Xamarin.Fomrs独自) XAML (UWP Based) Razor
iOS
Android
UWP ×
Web × ×
カスタマイズ難易度 × ?(まだ不明)




まとめ


Mobile Blazor Bindings はまだ Experimental ですが、Xamarin.Forms と Uno Platform は問題なくアプリ開発ができます。

Xamarin.Forms の方が設計的に、iOS, Android の最終的なアプリのカスタマイズが考慮されており、iOS, Android らしさについて細かい調整ができます。

Uno Platform は、カスタマイズはあまり考慮されていませんが、各プラットフォームでの見た目の差異が少ないので、UI にこだわりがないツール的なアプリが本当に簡単に作成できます。

Mobile Blazor Bindings は、今の所、Razor で Xamarin.Forms のUI が書けるという感じです。

実際にサンプルアプリをビルドしてみるとその違いがよくわかりますので、ぜひ試してみてください。