ストアアプリ ターゲットOS
Visual studio2015
(出典:http://www.atmarkit.co.jp/ait/articles/1506/12/news022.html)
Windowsストアは、iOSやAndroidストアに比べると市場が小さいらしい(儲からない)。
モバイルをターゲットにするなら、Xamarinで開発したほうがよさそう。
Windowsストア限定をターゲットにするなら、UWPアプリでよさそう
Visual studio2015
Windows 10 |
Windows 8.1 |
Windows 8.1Phone |
iOS | Android | 言語 | |
UWPアプリ | ○ | × | × | × | × | C#、VB、C++ |
ユニバーサル |
○ | ○ | ○ | × | × | C# |
xamarinアプリ | × | × | ○ | ○ | ○ | C# |
Windowsストアは、iOSやAndroidストアに比べると市場が小さいらしい(儲からない)。
モバイルをターゲットにするなら、Xamarinで開発したほうがよさそう。
Windowsストア限定をターゲットにするなら、UWPアプリでよさそう
- Windows10強制アップグレードで、Windows8.1デスクトップユーザーは相当減っているので、切り捨ててもいいように思います。
- Windows8.1Phone:モバイルのバッテリー寿命と交換スキルを考慮すると2年もすればスキルなしユーザーはいなくなるでしょう。
- UWPアプリは、ストアに登録できなかった場合、実行不能の産廃となるので注意しよう
その場合は、リサイクルして 通常のWindowsアプリにするしかないでしょう
- xamarinアプリ
- Windows 10 Mobileをエミュレーターで開発する場合
Hyper-V が必要になりWindows 10 Pro 以上が必要らしい - ユーザーアカウント名が英語でない場合エラーになるらしい
おそらくユーザーフォルダ名の問題でしょうから
まずアルファベットでWindowsアカウントユーザー登録し、そのユーザーでWindowsログイン後、日本語にユーザー名称変更すると大丈夫だと思います
- Windows 10 Mobileをエミュレーターで開発する場合
- アップルストアは、年間登録料が $99ドルとかかいていたので、年間約1万数千円負担がいる。
- iOS用にビルドするにはiOSが必要。
- iOSはアップルストアから数千円で買える。
- 個人のストア出店は実名登録
- Windowsストアは、初期登録料が数千円いる.
(更新料は無料になった) - Andoridストア(Googleplay) は、調べていないので不明。
- 主メモリが数百MBで少ない機種が多く、アプリの容量が大きいものは嫌われる
数メガバイトに抑えることが望ましい。大きくても10MB以下が理想。 - メモリムーブ機能(SDカードに移動)がないと嫌われる
- 主メモリが数百MBで少ない機種が多く、アプリの容量が大きいものは嫌われる
カテゴリー: ぷろぐらみんぐ/メモ
2016.06.13
ストアアプリ xaml 国際化 i18n の仕方
C# 2015 の内容です
2015以前のバージョンのVSではやり方が違うようです。
UWPアプリの国際化
(1) デフォルト言語の設定
Package.appxmanifestの既定のの言語(default language)
ja-JPになっているので、en-USに変更します
※カルチャのリソースが存在しない場合、この言語が適用されます
(2) リソースの作成
カルチャ名 ("ja-JP" など) と、それに続く既定のリソース名とリソース ファイルの拡張子 ("ko-kr\Resources.resw" など) を使用して、リソースを表します。
https://msdn.microsoft.com/ja-jp/library/hh694557.aspx
カルチャ名より前の親フォルダの規定はないようなので、
i18nフォルダを作成しその下にローカライズされたものをいれることにします
ソリューションエクスプローラーで追加をクリックし
リソース キー
キー名には、コントロールのUIDと設定したいプロパティの名前と . でつないだ名前にします
UID名.プロパティ名
TextBlockでは、Contentとなります
(2-2) i18n/ja-JP/Resources.resw
リソース キー
(3) MainPage.xaml
<TextBlock x:Uid="TextBlock_1"></TextBlock>
コントロールに uidを割り当てます。
x:Uid="stringID" をコントロールに埋め込みます
リソースに複数同じUIDのプロパティ値が存在するとエラーになります
以上の(1)~(3)だけで 国際化は完了です
カレントカルチャもとづいて、勝手に切り替わります
海外に住んでいて日本語Windowsでない場合は、英語になってしまいます。
これでは困ります。ユーザーが切り替えれるようにする必要があります
つづいて、動的に リソースを 変更する方法です
リソース文字列の取得
var loader = new Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView();
var text = loader.GetString("リソース名");
起動時に en-USにする方法
App.xaml.cs を開き OnLaunched関数に以下の行を追加します
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
System.Globalization.CultureInfo.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
こうすると、英語になります。 国際化した意味がないですけどね~。
確認したらコードを消すか、コメントアウトするといいです。
クリックしたら切り替える
ChangeCulture関数を作りました。
例ではクリックと同時に切り替わります。設定は、永続します
ストアアプリにApplication.DoEventsがないため、ストップウォッチに回しています
1ms待ちでもリソース変更するようです。念のため10msにしています。
C# 2015 の内容です
2015以前のバージョンのVSではやり方が違うようです。
UWPアプリの国際化
(1) デフォルト言語の設定
Package.appxmanifestの既定のの言語(default language)
ja-JPになっているので、en-USに変更します
※カルチャのリソースが存在しない場合、この言語が適用されます
(2) リソースの作成
カルチャ名 ("ja-JP" など) と、それに続く既定のリソース名とリソース ファイルの拡張子 ("ko-kr\Resources.resw" など) を使用して、リソースを表します。
https://msdn.microsoft.com/ja-jp/library/hh694557.aspx
カルチャ名より前の親フォルダの規定はないようなので、
i18nフォルダを作成しその下にローカライズされたものをいれることにします
ソリューションエクスプローラーで追加をクリックし
- 「新しいフォルダ」で i18n i18n/ja-JP と i18n/en-USを作成してください
※エクスプローラーなどで直接フォルダを作ると
ソリューションエクスプローラーで表示されないので注意してください - 次にサブフォルダ内で「新しい項目」→「リソースファイル(.resw)」 をクリックします。
Resources.reswが作成されます
リソース キー
キー名 | 値 |
TextBlock_1.Content | This is TextBlock |
UID名.プロパティ名
TextBlockでは、Contentとなります
(2-2) i18n/ja-JP/Resources.resw
リソース キー
キー名 | 値 |
TextBlock_1.Content | テキストです |
(3) MainPage.xaml
<TextBlock x:Uid="TextBlock_1"></TextBlock>
コントロールに uidを割り当てます。
x:Uid="stringID" をコントロールに埋め込みます
- stringID: アプリ内の XAML 要素を一意に識別し、リソース ファイルのリソース パスの一部となる文字列です。
- x:Name が XAML 名前スコープによって制御されるのに対して、x:Uid が XAML 言語で定義された一意性の適用の概念によって制御されることはありません。
- x:Uid 解決の目的で、1 つのリソース範囲を共有します。個々の XAML ファイルに合わせた x:Uid 範囲の概念は存在しません。
リソースに複数同じUIDのプロパティ値が存在するとエラーになります
x:Uid="open" としていて、Textblockとメニューにいれたとします
これらは、ContentとTextとそれぞれ違うプロパティになります
open.Content open.Text という値をリソースに埋めていると
型 'Windows.UI.Xaml.Markup.XamlParseException' の例外が
発生しましたが、ユーザー コード内ではハンドルされませんでした
となります。「stringID」と「リソースキー名.プロパティ値」は、一対一の関係でないといけません
となります。「stringID」と「リソースキー名.プロパティ値」は、一対一の関係でないといけません
以上の(1)~(3)だけで 国際化は完了です
カレントカルチャもとづいて、勝手に切り替わります
海外に住んでいて日本語Windowsでない場合は、英語になってしまいます。
これでは困ります。ユーザーが切り替えれるようにする必要があります
つづいて、動的に リソースを 変更する方法です
リソース文字列の取得
var loader = new Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView();
var text = loader.GetString("リソース名");
起動時に en-USにする方法
App.xaml.cs を開き OnLaunched関数に以下の行を追加します
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
System.Globalization.CultureInfo.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
こうすると、英語になります。 国際化した意味がないですけどね~。
確認したらコードを消すか、コメントアウトするといいです。
クリックしたら切り替える
ChangeCulture関数を作りました。
永続させる | 設定する | this.ChangeCulture("en-US"); |
クリアする | this.ChangeCulture(""); | |
一時的 | 設定する | this.ChangeCulture("en-US", false); |
ストアアプリにApplication.DoEventsがないため、ストップウォッチに回しています
1ms待ちでもリソース変更するようです。念のため10msにしています。
private void button_open1_Click(object sender, RoutedEventArgs e) { this.ChangeCulture("en-US"); //this.ChangeCulture("ja-JP", false); } public async void ChangeCulture(string CultureName, bool is_Permanence = true) { if (CultureName == "") { // reset PrimaryLanguageOverride Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = ""; } else { System.Globalization.CultureInfo cn = new System.Globalization.CultureInfo(CultureName); if (is_Permanence) Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = cn.Parent.Name; else System.Globalization.CultureInfo.CurrentUICulture = cn; } // clear resource cache Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().Reset(); Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset(); if (this.Frame != null) { // wait for resource change var stopwatch = System.Diagnostics.Stopwatch.StartNew(); await System.Threading.Tasks.Task.Delay(TimeSpan.FromMilliseconds(10)); stopwatch.Stop(); // refresh page this.Frame.Navigate(typeof(MainPage)); } }
カテゴリー: ぷろぐらみんぐ/メモ
2016.06.13
WPFのTextboxで複数行の入力
AcceptsReturnプロパティをTrueにしてください。
WindowsフォームのTextBox.Multilineに相当します
AcceptsReturnプロパティをTrueにしてください。
WindowsフォームのTextBox.Multilineに相当します
カテゴリー: ぷろぐらみんぐ/メモ
2016.06.13
ストアアプリ xaml 自動リサイズの仕方
パネルを並べたくなりますが
Gridが基本らしいです。
Width(横の幅)
Height(高さ)
HorizontalAlignment(横方向の位置)
VerticalAlignment(縦方向の位置)
Margin(余白)
の各プロパティを使用します。
Width、HeightプロパティにAutoを入れた場合は、外側のウィンドウの大きさに応じてコントロールの大きさが変わります。
4辺すべてにアンカーを設定したい場合は、
Width、Heightプロパティを Auto (⇔をクリック)
HorizontalAlignmentとVerticalAlignmentを Stretch に変更してください。
ドックをFillにしたい場合は、Marginプロパティの値を(◆)をクリックしてリセットします。
グリッドを定義して、その中に要素いれて、
要素クリックしてプロパティを編集するといいみたいです。
パネルを並べたくなりますが
Gridが基本らしいです。
Width(横の幅)
Height(高さ)
HorizontalAlignment(横方向の位置)
VerticalAlignment(縦方向の位置)
Margin(余白)
の各プロパティを使用します。
Width、HeightプロパティにAutoを入れた場合は、外側のウィンドウの大きさに応じてコントロールの大きさが変わります。
4辺すべてにアンカーを設定したい場合は、
Width、Heightプロパティを Auto (⇔をクリック)
HorizontalAlignmentとVerticalAlignmentを Stretch に変更してください。
ドックをFillにしたい場合は、Marginプロパティの値を(◆)をクリックしてリセットします。
グリッドを定義して、その中に要素いれて、
要素クリックしてプロパティを編集するといいみたいです。
- [WPFへの道 vol.2] AnchorやDockはどうするの?
https://blogs.msdn.microsoft.com/ttanaka/2010/11/02/wpf-vol-2-anchordock/
» 続きを読む
カテゴリー: ぷろぐらみんぐ/メモ
2016.06.13
7日間でWindows 10 アプリ開発者になる方法
https://blogs.msdn.microsoft.com/visualstudio_jpn/2015/09/08/windows-10-5/
徹底予習! Windows 10のユニバーサルアプリ開発
http://www.atmarkit.co.jp/ait/articles/1504/28/news015.html
グローバリゼーションとローカライズの推奨と非推奨
https://msdn.microsoft.com/windows/uwp/globalizing/guidelines-and-checklist-for-globalizing-your-app
.Net ネイティブ
2015より搭載された新機能C#.Netをネイティブ化するMS純正ツール
これによりコードの難読化と高速化が期待できる
- Microsoft .NET ネイティブに関する FAQ
https://msdn.microsoft.com/ja-jp/vstudio/dn642499.aspx - .NET ネイティブによるアプリのコンパイル
https://msdn.microsoft.com/ja-jp/library/dn584397(v=vs.110).aspx
カテゴリー: ぷろぐらみんぐ/メモ
2016.06.12