個人的なメモ

Tomohiro Suzuki @hiro128_777 のブログです。Microsoft MVP for Developer 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
の略称です。

  • Android、iOS、macOS、および Windows 用の .NET を使用してネイティブクロスプラットフォームアプリを構築するためのマルチプラットフォームアプリ UI。
  • Xamarin.Formsの進化であり、ネイティブクロスプラットフォームアプリを構築するための .NET ソリューションとして位置付けられています。

 
 
 
.NET MAUI の最新の更新情報については以下の記事を参照ください。
hiro128.hatenablog.jp
hiro128.hatenablog.jp
 
 

MAUI ってどんなもの?

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

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

MAUI のゴール

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

 

マイルストーン

  • 2020年 Q4 から 2021年 Q3 までプレビュー
    • レンダラーアーキテクチャのバージョンアップ
    • ソースコードのソリューションとプロジェクトの簡素化
    • GitHub で承認された提案を実装する
  • MVU (Model-View-Update)を実装する
  • RC 2021年9月
  • GA 2021年11月

 

対応プラットフォーム

   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か月後以降にはメンテナンスが終了し、製品の終焉を迎えることになりりそうです…)

 
 
.NET MAUI の最新の更新情報については以下の記事を参照ください。
hiro128.hatenablog.jp
 
 
本日は以上です。

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#イベントハンドラーベースのイベントをを同時に利用すると、イベントが発火しなくなリますので、ご注意ください。


今回は以上です。