なかしょの技術日誌

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

Tizen .NETのプラットフォーム固有APIの制限事項

Xamarin.Tizenチョットデキルのなかしょです。

以前も紹介しましたが、Tizen .NET Architectureは以下のようになっています。

f:id:nakasho_dev:20161118015607p:plain

これだけ見ると、「Platform specific API」使えば、Xamarin.Forms使わずにTizen用アプリ作れるんじゃね、という印象があります。

でも、Tizen.NETでは「The C# APIs provide support for 60% of Tizen Mobile APIs.」と説明があり、Nativeで使用できる60%しか.NETのAPIを用意していないようです。では、対応しているものは何かというと以下が列挙されています。

  • Tizen.Applications
    • Provides the Tizen application framework, including, for example, application state change events, inter-application messaging, and notification services.
  • Tizen.Content
    • Provides content management services, such as file and media downloads, storing and indexing audio and video content, and associating content types with helper applications.
  • Tizen.Location
    • Manages geographical location services and geofencing.
  • Tizen.Multimedia
    • Interacts with media services, including audio playback, recording, and device policy.
  • Tizen.Network
    • Provides APIs to control connectivity devices, as well as providing various network information.
  • Tizen.Security
    • Provides access to secure storage for passwords, keys, certificates, and other sensitive data.
  • Tizen.System
    • Provides device-specific services, including status, system information and settings, feedback, and sensor control and access.

以上です。Nativeには他にどのようなAPIがあるというと前述のアーキテクチャ図から以下だと見て取れます。

  • Base
  • Messaging
  • Social
  • Telephony
  • UI
  • Web

なんということでしょう。

UIがTizen.NETにはないです。
ということはXamarin.FormsでTizenの画面が乱れたときに、Custom Rendrerなどで解決したくてもできません。
Xamarin.Forms標準のUIでできることしかUIが表現できないようです。

闇が深そうだと分かったところで今日はここまで。

TizenでXamarinForms(XAML)を実行してみた。

Xamarin.Tizenチョットデキルのなかしょです。

前回は「Visual Studio Tools for Tizen」で用意されたテンプレートからサンプルを起動してみました。
そのテンプレートではXAMLが利用されていなかったので、今回はXAMLを使ったプログラムを動かしてみましょう。

でも、ただXAMLで動かすよりかはクロスプラットフォームで動作することがわかるプログラムを動かしたいですよね。
そこで、今回はJXUG主催者の田淵さんが公開されているテンプレートから作成したXamarinForms(XAML)のプロジェクトにTizenの環境を加えることを試してみました。

ここからテンプレートを取得します。
テンプレートの適用方法も同ページに記述されているので参考にしてください。 github.com

テンプレート適用後、新規プロジェクトで「Xamarin.Forms App(JXUG)」を選択し、ソリューションを作成します。
ここでは「XFApp3」としています。

f:id:nakasho_dev:20161119024351p:plain

ここで、「ファイル→追加→既存のプロジェクト」で、前回の記事で作成したプログラムのPortableでないTizen側のプロジェクトを選択します。
この時はXamarinApplicationTizenというソリューションを作成し、PortableがXamarinApplicationTizen、Tizen側がXamarinApplicationTizen.Tizenというプロジェクトでした。

nakasho-dev.hatenablog.jp

取り込むと以下のように表示されます。Nugetパッケージの復元も忘れずに。
「参照」を開くと元のソリューションで参照していた「XamarinApplicationTizen」が見つからないので右クリックして削除します。

f:id:nakasho_dev:20161119025029p:plain

そこで、「参照→参照の追加」で「XFApp3」をチェックしOKを選択します。

f:id:nakasho_dev:20161119025457p:plain

そして、「XamarinApplicationTizen.Tizen.cs」を開き、namespaceを「XamarinApplicationTizen.Tizen」から「XFApp3.Tizen」に変更します。
この変更により、ポータブルであるXFApp3のAppクラスを参照するようになります。

f:id:nakasho_dev:20161119025856p:plain

あとは「XamarinApplicationTizen.Tizen」をスタートアッププロジェクトに設定し、「Launch Tizen Emulator」でエミュレータ起動、「Emulator (tizen-3.0_mobile_x86_64_hd)」でプログラムを起動します。

f:id:nakasho_dev:20161119030320p:plain

いかがでしたでしょうか。
これで、今回利用したテンプレートで対応しているAndroidiOS、UWP、Windows8.1、Windows Phone8.1に加え、Tizenにも対応するソリューションができました。

クロスプラットフォーム開発の幅が広がりますね。

Xamarin.FormsでTizenアプリの開発

Connect(); // 2016 初日にTizenがXamarin.Formsに対応したことが発表されました。 スマートフォン後発のTizenにとって、クロスプラットフォーム環境に参入することで、アプリ開発者を増やしTizenのシェアを上げたいのだと思います。
(それはUWPアプリを作ってほしいMSも同じだろうけど。)

そんなわけでTizenアプリのテンプレートからプロジェクトを作成し、Emulatorでの実行まで試してみました。
基本的にはこのページから読み進めていけばサンプルアプリが実行できます。

developer.tizen.org

Tizenの.NET Architectureは以下のようになっているようです。
Xamarin.Formsでのコードの共通化とプラットフォーム固有のAPIを使い分けてアプリが開発できることが見て取れます。 f:id:nakasho_dev:20161118015607p:plain

では、さっそく、インストールから進めていきます。

Visual Studio Tools for Tizen Previewのダウンロード

以下のサイトから「VisualStudioToolsforTizen-preview.exe」をダウンロードします。

developer.tizen.org

環境の準備

Visual Studio Tools for Tizenの動作には以下の環境が必要です。

事前にインストールすべきもの

  • Visual Studio 2015 Update 3
  • Xamarin for Visual Studio
    • TizenのページではXamarin v3.1.1と書いてありますが、最新のv4.2.61 で動作します。
  • .NET Core 1.0.0

事前に設定すべきもの

Tizen Emulatorの動作にHAXM(Hardware Accelerated Execution Manager)環境が必要です。
そのため、Hyper-V環境を有効にしている場合は無効にする必要があります。以下のサイトを参考に無効にしてください。

developer.tizen.org

無効に設定後、以下からHAXMのインストーラを取得してください。
AndroidSDK Managerで取得したインストーラでも構いません。

developer.tizen.org

私はTizenのサイトで古いHAXMのインストーラを取得してしまい、エミュレータが正常に動作しませんでした。最新のインストーラを取得するように注意ください。

Visual Studio Tools for Tizen のインストール

以下のサイトを参考に、先ほど取得した「Visual Studio Tools for Tizen」と「HAXM」のインストーラを実行してください。

developer.tizen.org

証明書とToolの設定

開発を始める前にに証明書やNugetの設定をする必要があります。
若干、イケてないなぁとは思いますがPreview版なのでしょうがないかな。

以下のURLを参考にしてください。 developer.tizen.org

証明書の設定

f:id:nakasho_dev:20161118022805p:plain 「ツール > オプション >Tizen > Certification」と進み、Author CertificateのPasswordに「author_test」を入力します。
たぶん、商用を配布する際などは独自の証明書を用意しないといけないと思われます。

ツールの設定

「ツール > オプション >Tizen > Tools」でTizenのツールのパスを設定します。
こちらはデフォルトでは変更する必要はないようです。
念のため設定しているフォルダのパスに「Tools」フォルダが存在し、その「Tools」フォルダ内に「sdb.exe」があることを確認ください。

NuGetパッケージマネージャの設定

「Nugetパッケージマネージャの設定 > パッケージマネージャ設定 > 全般」で「Visual Studioでのビルド中に見つからないパッケージを自動的に確認」のチェック項目を無効にします。 f:id:nakasho_dev:20161118023450p:plain

以上で環境構築は完了です。

プロジェクトの作成&ビルド

プロジェクトの新規作成をおこなうと、「Visual C#」のカテゴリにTizenの項目が表示され、3つのテンプレートが表示されます。

f:id:nakasho_dev:20161118023905p:plain

ここではBlank App (Tizen Xamarin.Forms Portable)を選択しました。
作成されたプロジェクトは以下のようにエラーでいっぱいですが、ソリューションを右クリックし「NuGetパッケージの復元」を実行することでエラーはなくなります。 f:id:nakasho_dev:20161118024241p:plain

そしてビルドを実行すると問題なく成功するはずです。

エミュレータの起動、プログラムの実行

「Launch Tizen Emulator」のボタンをクリックし、Emulatorを起動します。
この時、Hyper-Vの設定が有効でHAXMが実行できない環境のままだと以下のようなエラーが発生します。 f:id:nakasho_dev:20161118024835p:plain

正常に起動すると以下のようにタイトルが出た後、ホーム画面が表示されます。
f:id:nakasho_dev:20161118025308p:plain f:id:nakasho_dev:20161118025315p:plain

Emulator起動後に「Launch Tizen Emulator」だったボタンが「Emulator (tizen-3.0_mobile_x86_64_hd)」というボタンに変わるのでそれをクリックします。 Debuggerが起動し、Emulator上にプログラムが転送・実行され 「Welcome to Xamarin Forms !」が表示されます。
f:id:nakasho_dev:20161118025655p:plain

この時、前述の証明書の設定を怠ると「Tizen Package not found. Please build. Can not start debugger.」というメッセージがコンソールに出力されて、プログラムは実行されないようです。

いかがでしたでしょうか。
どんなプログラムもHello World的なプログラムが初めて動いたときはうれしいですよね。ぜひ、皆さんも試してみてください。

Visual StudioでGitHubを扱ってみた

今週末の11月19日(土)、ABC 2016 Autumn - Android Bazaar and Conference の JXUGブースにてXamarinのハンズオンをお手伝いすることとなりました。

ハンズオンの内容は以下を予定しているようです。

github.com

予習していたところ、資料に誤字が見つかったので、せっかくなので自分で修正してPull Requestを送ろうとしました。
が、恥ずかしながらGitHubを使ったことがなくだいぶ試行錯誤して、Pull Requestまで到達しました。

今回はその内容をまとめました。
GitHubへのアカウント作成やGitHub Extension for Visual Studioのインストールは省略しています。

対象リポジトリのフォーク

GitHubにログインした状態で対象のリポジトリに移動し、画面右上のForkをクリックします。

f:id:nakasho_dev:20161114233318p:plain

これだけで自分のアカウントにForkされます。

f:id:nakasho_dev:20161114234254p:plain

画面右側の「Clone or download」をクリックしてClone用のURLを表示しコピーします。

Visual Studio から GitHubへのログイン

メニューバーの「チーム」→「接続の管理」を選択するとチームエクスプローラーが開かれます。

f:id:nakasho_dev:20161114231203p:plain

ホストされるサービスのプロバイダーにGitHubが表示されるので「Connect...」をクリックします。

f:id:nakasho_dev:20161114232906p:plain

ログイン画面が表示されるのでメールアドレスとパスワードを入力しログインします。

リポジトリからのClone

「ローカルGitリポジトリ」メニューから「複製」を選択して、先ほどのClone用のURLを指定し複製します。

f:id:nakasho_dev:20161114235117p:plain

Cloneが終わるとローカルGitリポジトリが作成されます。

f:id:nakasho_dev:20161114235409p:plain

このリポジトリをダブルクリックするとリポジトリのホーム画面に遷移します。

f:id:nakasho_dev:20161115000200p:plain

ユーザ名と電子メールアドレスの設定

ホーム画面から「設定」を選択すると、初期設定がVisualStudioでログインしているMicrosoftアカウントのユーザ名とメールアドレスが登録されています。
リポジトリの設定でメールアドレスがGithubで登録しているものと異なるのであれば修正しないと、Push時に403になるようです。もしかしたら勘違いかも。
ユーザ名もMicrosoftアカウントで本名を入力していると、GitHubのリモートへの操作も本名で反映されてしまうので、必要に応じてハンドルネーム等に変えたほうが良いです。

f:id:nakasho_dev:20161115015149p:plain

ブランチの作成

ホーム画面でブランチを選択して、ブランチの画面を表示します。
そして「master」を右クリックして「新しいローカルブランチ」を選択します。

f:id:nakasho_dev:20161115000756p:plain

ブランチ名を「update-doc-AddCustomView」としてブランチを作成しチェックアウトします。

f:id:nakasho_dev:20161115001543p:plain

ブランチが作成されました。

f:id:nakasho_dev:20161115001953p:plain

ブランチのファイルの修正、および、コミット

今回の修正は「02.AddCustomView.md」で大文字と小文字の表記ゆれがあったので修正しました。
修正前「SubText」→修正後「subText」

f:id:nakasho_dev:20161115002637p:plain

ホーム画面に戻り、変更を選択するとコミット画面が表示されます。
ホーム画面に戻らなくてもチームエクスプローラ上部のローカルリポジトリ名がプルダウンリストになっていて、画面を変更できます。

f:id:nakasho_dev:20161115003524p:plain

今回は修正内容が一つしかありませんが、変更箇所が複数ありコミットのタイミングを分ける場合はステージという機能を使う必要があるようです。
変更対象のファイルを右クリックして「未変更のものと比較」を実行して差分を比較します。

f:id:nakasho_dev:20161115004135p:plain

確認が完了したらコミットメッセージを入力して「すべてをコミット」をクリックします。

f:id:nakasho_dev:20161115004626p:plain

masterへのマージ、リモートへのプッシュ

リポジトリのブランチ画面に遷移し、「master」で右クリックして「チェックアウト」を選択します。 これで編集対象が「master」になりました。

f:id:nakasho_dev:20161115010332p:plain

ブランチからマージするため、再度「master」を右クリックして「マージ元」を選択します。

f:id:nakasho_dev:20161115010915p:plain

マージするブランチに先ほど修正した「update-doc-AddCustomView」を選択してマージします。
マージ後、リポジトリの同期画面を開きます。

f:id:nakasho_dev:20161115012151p:plain

出力方向のコミットに今回マージした内容が表示されますのでプッシュを実行するとリモートのリポジトリに同期されます。

フォーク元へのPull Request

ようやくPull Requesetです。
フォークした自分のGitHubのページを見るとリポジトリが変更されていることを確認できました。

f:id:nakasho_dev:20161115012930p:plain

「This branch is 1 commit ahead of ytabuchi:master.」という文字列がある右側に「Pull request」と「Compare」が表示されるので「Compare」を選択すると、fork元のリポジトリで比較の画面が表示されます。

f:id:nakasho_dev:20161115013653p:plain

比較内容を確認し、ここで「Create pull request」をクリックすると、Pull Requestの申請画面に遷移します。 f:id:nakasho_dev:20161115014011p:plain

TitleとDescriptionを入力して「Create pull request」を押すと申請完了です。 フォーク元リポジトリの「Pull request」タブに申請した内容が表示されました。

f:id:nakasho_dev:20161115014354p:plain

所感

最初、フォークせずにCloneしてPullRequestまでたどり着けなかったりとか、自分の知識のなさを痛感しました。
また、PullRequest用のブランチからPullRequestするのがお作法のようですが、今回はmasterからしてしまいました。 この記事を書いている時点ではPullRequestはOpenの状態で、Rejectされないとは思いますが不安です。
でも、少しずつでも覚えていくことでコミュニティに貢献できたら良いな、と思いました。

Microsoft Teamsのチームサイト開設までの流れ

Microsoft Teamsが発表されました!

Slackのようなコミュニケーションツールだと期待されていて、Office365にべったりなユーザにはとても有用なのでは、との声があがっていますね。

 

jp.techcrunch.com

 

今日はJXUGの勉強会に行ってきたのですが、その懇親会でちょっと話題になりつつも誰も利用していなかったようなので、自分のOffice365で使用開始まで設定してみました。

管理画面に「Microsoft Teams」が追加されています。

 

f:id:nakasho_dev:20161105034325p:plain

 

初期設定内容のカテゴリは以下のような感じ。

f:id:nakasho_dev:20161105034408p:plain

 

それぞれのアコーディオンを開いてみると各設定のオン・オフを選択できます。

ボットはBotFrameworkと連携するのでしょうね。

設定を終えて「保存」をクリックするとチームサイトが作成されます。

f:id:nakasho_dev:20161105034410p:plain

 

設定後、https://teams.microsoft.com/ にアクセスすると、以下のような画面が表示されるのでチーム名と説明を記入してチームを作成します。

f:id:nakasho_dev:20161105034412p:plain

 

Office365のグループを選択することでチームメンバーを追加できるようです。

f:id:nakasho_dev:20161105034415p:plain

f:id:nakasho_dev:20161105034416p:plain

 

チームメンバ追加後、ガイダンスが始まります。

f:id:nakasho_dev:20161105034417p:plain

f:id:nakasho_dev:20161105034418p:plain

f:id:nakasho_dev:20161105034419p:plain

f:id:nakasho_dev:20161105034420p:plain

f:id:nakasho_dev:20161105034421p:plain

 

チームサイト開設までできました。

f:id:nakasho_dev:20161105034422p:plain

 

おまけで外部ユーザが登録できるか試したのですが、まだ対応していないようです。

f:id:nakasho_dev:20161105034425p:plain

 

外部ユーザについては以下のサイトでも「Guest access not available yet」と説明されていました。

practical365.com

でもyetなので、今後に期待です。

外部ユーザが使えないままだとSlackに「コミュニケーションは難しいですよ」と言われたままになっちゃいますよね。

www.publickey1.jp