主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Windows 10: ユニバーサルアプリを作ってみる

                
 Windows10のプレビューにVisualStudio2015のRC版を入れてある。これがどんな具合か調べたかったのでついでにユニバーサルアプリというのを作って試してみる。ユニバーサルアプリはおそらくWindows8でストアアプリと呼ばれていたもの。Windows10という名称でOSを多デバイス展開し、その上でならどのデバイスでも動けるようにしたのでユニバーサルという名称になった・・・という経緯のはず。
 ずっとWin7を使っていたのでストアアプリは作ったことがない。.NET FrameworkでならWPFアプリをいくつか。そのWPFアプリで作っていたビデオプレーヤーアプリをユニバーサルアプリとして再構築してみることにする。

 先に一つの結論を書いておく。ユニバーサルアプリは一つのアプリでさまざまな画面サイズに対応という特徴がある。VisualStudioにエミュレータがついてくるのでさまざまな画面サイズでデバッグを試せるというのが機能の一つだが、これは仮想マシン上でWin10を動かしている場合にはできないようだ。ぼくのWin10は仮想マシン上なのでこのエミュレータによるデバッグができなかった。



 ユニバーサルアプリを作るにあたってやることは、いつものVisualStudioアプリでやることと変わらない。新しいプロジェクトとしてテンプレートにユニバーサルアプリがあるのでそれを選んでプロジェクトを初期化。そしたら作成されたプロジェクト内にUIファイルやコードファイルができているのでそれを書き足してデバッグを行っていくのが基本。

 UIは基本的にXAMLで書く。StackPanelなどWPFと同じ要素が使えるけど、WrapPanelなどなかったりでWPFそのまんまでというわけにはいかなかったりする。

 WPFアプリを書いていたときとの違いはなんといっても非同期処理。msdnの記事を参考にぼくもWPFアプリのUIをいじるのに非同期処理を入れたことがあったが、UIスレッドとは別のスレッドを呼んで新しいUI要素で使うデータを加工して、変更を加えたい要素オブジェクトのInvokeメソッドを呼んでそこにデリゲートを渡して云々と慣れればなんてことはないが、かつては書き方としてはけっこう手間があった。ユニバーサルアプリではC#の進化によってasyncやawaitというキーワードを使って書くことができ、Invokeメソッドなどを呼ばなくてもUI変更もできていた。けっこう楽。このあたりWPFアプリ作成で使えるようになってるのか知らないので今後調べておきたい。とりあえずユニバーサルアプリではC#の進化によって非同期処理の導入がわりと簡単にできるようになっているということで。

 ファイルの入出力方法の変更も大きな違いだろう。WPFアプリではそれまでの基本的なWindowsアプリと同じで、権限さえひっかからなければ、とくにファイル入出力の宣言などを前もってする必要もなくやり放題?だった。なのでビデオプレーヤーを作ったときは、マイビデオディレクトリへのパスを割り出して、DirectoryInfoクラスを使ってそのパス下のファイル情報を収集してビデオファイルを集めてというふうにやった。ユニバーサルアプリではアクセスできるファイルが基本的に制限がかかっていて、使いたいファイルやディレクトリはあらかじめ宣言しておかなければならない、package.appxmanifestファイルで。ビデオファイルがほしい場合は
Capabilitiesノードに<uap:Capability Name="videosLibrary"/>を加える。<Capability Name="videosLibrary"/>のように書けるとどっかの公式ドキュメントページに例があっても、ページをよく見るとWin10インサイダープレビューでは前者のように書けとされている。これがわからずけっこう手間取った。
https://msdn.microsoft.com/en-us/library/windows/apps/dn934783.aspx


作ったのが下記のビデオプレーヤーアプリ。

Win10でデフォルト搭載のビデオアプリはライブラリを表示するたびにビデオ再生が停止する。ビデオを再生しっぱなしでライブラリを表示するために透過や要素のスライド、フェードを入れた。


 VisualStudio2015がどの程度できているかを試したくて、ユニバーサルアプリを作ることでそれをやってみた。途中でユニバーサルアプリの新しいUI要素がまだテンプレートに入っていないなどの情報をドキュメントで見ることはあったが、ユニバーサルアプリ自体はなんの問題もなく作れた。安定性においても、作ったものが小規模なものだったこともあるだろうが、動作に問題が出ることはなかった。
 ユニバーサルアプリ作成においてはWPFを作った経験があればけっこう使いまわせる知識はある。ただ微妙な差異が出てきてそれが面白かったり調べる手間でちょっと焦らされたり。WPFとユニバーサルアプリでは動作デバイスやファイル管理などを考慮すると適当な用途というのが違ってくると思うので適宜使い分けたい。たとえばPC環境でしか使わないという前提の業務アプリがWPFで作ってあるならそれはユニバーサルアプリに移植する有効性は薄いだろうし、タブレットでしか使わないアプリをこれから作るならユニバーサルアプリのほうがいいかもしれない。
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。