個人的なメモ

Tomohiro Suzuki @hiro128_777 のブログです。Microsoft MVP for Developer Technologies 2017- 本ブログと所属組織の公式見解は関係ございません。

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 が書けるという感じです。

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

Visual Studio for Mac が Install additional required components に対応していました

Visual Studio for Mac は裏で、Xcode を利用していますが、Xcode をインストールまたはアップデートして、一度も起動してないと、iOS, Mac アプリのビルド時にエラーを吐いてビルドできない問題がありました。


これは、Visual Studio for Mac が悪いのではなく、Xcode がインストールまたはアップデート時に、Xcode command-line tools をインストールしてくれず、Xcode の初回起動時にダイアログが出て、インストールを確認する仕様になっているためです。


これは、初学者は自分で気づくことがかなり難しく Xamarin.iOS を使うときの大きなハマりどころでした。


ですが、いつの間にか、Install additional required components が実行されていない場合、Visual Studio for Mac が教えてくれて、そのままインストールも可能なようになっていました。


インストールしていないと、下記のように教えてくれます。

f:id:hiro128:20200119213950p:plain


あとは、Install Xcode command-line tools ボタンを押すと下記のように、Xcode の初回起動時のインストールが始まります。

f:id:hiro128:20200119214052p:plain


これは、とても良い改善です!


マイクロソフトは、Visual Studio for Mac に本気で取り組んでくれています。ぜひ、まだ使っていない方は使ってみてください。

visualstudio.microsoft.com