なかしょの技術日誌

業務では非MS系のものばかりですが、ここではMS系の技術やサービスを中心に書いていきたいと思います。

Tizenの.NET対応についての始まりとこれから

はじめに

本エントリーは、 Xamarin(その2) Advent Calendar 2016 の13日目です。

Tizen の.NET対応の発表について

記憶に新しい Connect(); 2016 では様々な発表がありました。

connectevent.microsoft.com

皆さんは何が一番のサプライズでしたでしょうか。
もちろん
Xamarin.Forms.Platform.Tizen
の発表ですよね。
そこで、本記事ではTizenの.NET対応についての始まりとこれからを探っていきたいと思います。

MonoTizen

Xamarin.Forms.Platform.Tizenが初めての.NET対応ではありません。 Tizenの.NET対応としてMonoTizenが世に出ています。

MonoTizenの誕生

2014年5月20日 Kitsilano Software がMonoTizenを発表しました。

MonoTizenkitsilanosoftware.wordpress.com

この会社は「C#と.NET開発の生産性をGNU / Linuxバイルにもたらす」というコーポレートスローガンをを持っています。
Tizenの.NET対応を推進するのにふさわしそうなスローガンですよね。
MonoTizenのロゴは以下になります。可愛いですよね。

f:id:nakasho_dev:20161212000120p:plain

そして、2014年6月4日からGitHubにて開発がスタートしました。
Tizen向けアプリの開発者たちは完成を待ちわびたことでしょう。

github.com

MonoTizenの開発延期

f:id:nakasho_dev:20161212010607p:plain なんということでしょう。
2014年8月13日にMonoTizenの開発が延期になりました。
誕生したばかりで、停止?とお思いでしょうが停止にあたって、 Kitsilano Software は明確な意思表示をしています。

kitsilanosoftware.github.io

MonoTizenの開発は当面延期されます。 私たちは将来復帰したいと考えていますが、Tizenプロジェクトがポジティブな方向に変わらない限り復帰できません。 ロードマップを持たず、パートナーとの有意義なコミュニケーションがないプラットフォーム上ではソフトウェアビジネスはできません。(意訳)

Tizenを推進するはずのサムスンの対応を見限っての発言かもしれません。
その時の気持ちはどのような気持ちだったのか想像に難くありません。

f:id:nakasho_dev:20161212005417p:plain

某D社のTizen版xxモードやTizen版専用アプリの開発や端末検証を担当していた某下請け会社も「有意義なコミュニケーションがない」には同意するのではないでしょうか。

そして開発は延期になりましたが、2014年10月20日に Kitsilano Software はTizen AssociationにJoinしました。
Tizen AssociationはTizenの産業的役割を主導するために組織された非営利コンソーシアムです。
MonoTizenの開発復帰に向けて、ビジネスの在り方を議論したかったのかもしれません。

Kitsilano Software joins the Tizen Associationkitsilanosoftware.wordpress.com

Tizen.NET

時は移り行き、2016年。Xamarin.Forms.Platform.Tizenが誕生します。

サムスンの.NET FoundationへのJoin

2016年6月27日 サムスンが.NET FoundationのTechnical Steering GroupにJoinします。

.NET Foundation - Samsung joins the .NET Foundation Technical Steering Group

この時、Tizenの.NET対応について想像された方もいらっしゃると思います。

Connect();2016でTizenが公式に.NETに対応したと発表

Congratulations Samsung
Xamarin.Forms.Platform.Tizenの発表に全世界が歓喜したことでしょう。
しかし、この発表に最も驚いた人は Dimitar Dobrev さんではないでしょうか。
この方はみなさんもご存知の通り、MonoTizenのリード開発者の一人です。
.NETへの対応が発表されたTizenProjectの以下のBlogに彼はコメントしています。

www.tizen.org

BY Dimitar Dobrev, 17 NOV 2016 9:09 AM

Hello,

My name is Dimitar Dobrev. I developed the C# language bindings for MonoTizen by Kitsilano Software. That effort unfortunately got suspended for financial reasons but I believe my expertise can help you with your current work.

MonoTizen stepped on CppSharp (hosted at GitHub) of which I am one of the lead developers. It is an open source project which generates C# wrappers for C++ libraries. The process is fully automatic and only requires passing the headers and libraries as file paths. I believe Tizen can use it to automatically generate the C# layer instead of it being slowly and expensively coded by hand.

I think I can be of great help to you and Tizen .NET. I would really like to start a discussion about this possibility.

Best regards,

Dimitar Dobrev

MonoTizenの立役者だった一人であるのに何も知らされていなかった感がありありですが、彼の熱意が伝わってきますね。
ぜひとも彼には Tizenの.NET対応のリードを頑張っていただきたいです。

Tizenの.NET対応状況

Tizenのページを見ても発表以降更新はないです。以前の記事をみてください。
NuGetでのライブラリのバージョンは上がっているのだからWebページも更新してよ、とは思います。

nakasho-dev.hatenablog.jp

nakasho-dev.hatenablog.jp

でも、Tizenに興味津々で公式からの発表が待ちきれない人も大勢いますよね。
そんな人たちはソースを見ましょう!Tizenはオープンソースです。

Tizenの.NET関連のソース

TizenのソースはGitで管理されています。以下のサイトで確認できます。

source.tizen.org

.NET 対応に関するリポジトリは以下を確認しました。 ※他にもあるかもしれません。

csapi

TizenのネイティブをC#で呼び出すラッパーAPIを管理しています。
リポジトリを確認すると、対応していないはずのTelephonyなどが存在し、今後の拡張に期待が持てます。
また、プラットフォーム固有のAPIにはUI関連がないと思ったのですが、ElmSharpにより実現しているようです。そもそもプラットフォーム固有のAPIがなくて、どのようにXamarin.Formsを実現するんだ、って話になりますよね...
ElmSharpとはTizen NativeのUI FrameworkであるEFLをベースに開発したもののようです。
Xamarin.Forms.Platform.TizenのUIはこのElmSharpを使用して実現しています。

dotnet

ビルドツール等を管理しているようです。

xamarin-forms

皆さんの本命、Xamarin.Forms.Platform.Tizenについて管理しています。
ソースツリーを見ると何やら、まだNuGetからダウンロードしたものには存在しないクラスがあります。

f:id:nakasho_dev:20161212024542p:plain

おや?

f:id:nakasho_dev:20161212024558p:plain

なんと! Xamarin.Forms.Maps.Tizenが!

f:id:nakasho_dev:20161212024840p:plain

さっそくXamarin.Forms.Maps.Tizen.MapControl.csのソースを見てみます。

using TLabel = Xamarin.Forms.Platform.Tizen.Native.Label;

namespace Xamarin.Forms.Maps.Tizen
{
    public class MapControl : TLabel
    {
        public MapControl(ElmSharp.EvasObject parent) : base(parent)
        {
            Text = "Can not supported Maps";
            TextColor = ElmSharp.Color.Red;
        }
    }
}

"Can not supported Maps"...

f:id:nakasho_dev:20161212025421p:plain

期待した私が愚かだったのでしょうか。
しかし、リポジトリに登録しているからは実装しようという意気込みは感じます。
そしてオープンソースなので、自分でcsapiを増やして現在のネイティブにないものも対応することは可能だと思われます。

おわりに

いかがでしたでしょうか。
Tizenの.NET対応についての始まりとこれからを紹介しました。
過去に停滞していたTizenプロジェクトですが、Connect();2016から再始動した感じはありありと伝わってきました。
しかし、Tizenプロジェクトの本気度を確認するのはこれからです。
皆さんも早くTizenの開発をしたくなったのではないでしょうか。
Tizen 3.0の正式リリースが待ちきれません。