VB開発者のためのWindowsストアアプリをリリースするための13の極意
極意11: バージョンの一致と日本語OS
アプリの実バージョンと、表示しているバージョンが一致していない場合のリジェクト例。また、日本語版限定に用意した機能を申請する場合に注意するポイントを紹介する。
前書き ―― 今回の極意について
今回は「バージョンの一致によるリジェクト」と「Windows 8の日本語OSを必要とするWindowsストア・アプリ」の2点について解説する。これららのうち、バージョンに関しては、「Windows 8 ストア 認定の要件」に次のように明記されている。
バージョンについて
今回のバージョンに関する内容は、筆者の単純なミスでリジェクトされた経緯を解説するものだ。単純なミスによるリジェクトだが、アプリ内にバージョン情報を記述している場合は、気を付けねばならない。ほんのちょっとしたミスでも、再申請して、再審査してもらわないといけないわけだから、それなりに時間を要する。無駄な時間の浪費をできるだけ避けるためにも、ケアレスミスによるリジェクトは可能な限り避けたいものだ。
自分で作ったアプリをVisual Studio 2012のメニューバーで[プロジェクト]-[ストア]と選択し、[アプリ パッケージの作成]で、申請するためのアプリ・パッケージを作成する場合、バージョンを入力する画面が表示される(次の画面)。
上の画像の設定でアプリ・パッケージを作成すると、当然、バージョンは「1.0.0.9」になる。そして、AppPackagesフォルダ―内に作成される.appxuploadファイルには、次の例のようにバージョン番号が付いている。
例: Win8_EarthQuakeJapan_1.0.0.9_x64.appxupload
アプリ内において表示されるバージョンと、[アプリ パーケージの作成]で作成したバージョンが異なる場合
作成したアプリ内で、バージョン情報を表示させる画面などがある場合は、バージョンは[アプリ パッケージの作成]で指定したバージョンと同じでなければ、当然、リジェクトの対象になる(次の画面を参照)。「ストアに提供するアプリについての情報は、そのアプリの購入ページで使う情報と一致しなければならない」のだ。
アプリ内で表示させたバージョンが「1.5.0.0.0」になっている。[アプリ パーケージの作成]時に指定した「1.0.0.9」と異なっている。バージョンは先頭から3つ数字が同じでなければならない。この画面でのバージョンは「1.0.0」もしくは「1.0.0.9」(また「1.0.0.0.0」としても可。最後の「.0」は筆者が独自に追加したもの)である必要がある
上の画面は、[設定]チャームから[このアプリについて]という画面を表示し、このアプリを作成した作者名の情報を表示させている。その中に、アプリのバージョン番号を明記しているが、[アプリ パーケージの作成]で指定したバージョンと異なっている。
当然、このような場合はリジェクトされる(たまに審査員の見落としでスルーされる場合もあるのだが)。リジェクトされた「認定レポート」には、「詳しい情報のダウンロード (.zip ファイル、903 KB)」と表示され、ZIPファイルをダウンロードできるようになっている場合がある。ダウンロードしたZIPファイルを解凍するとPDFファイルが現れる。その中に、次の画面のような画像が添付されている*1。
- *1PDFで送られてきた画像
このPDFには、アプリ内でバージョンを表示させている画面[このアプリについて]のスクリーンショットが添付されている。
送られてきた画像を一見しただけでは意味が分からない。また英文で書かれているメッセージの意味もちんぷんかんぷんだ。ヒントとなるのは、スクリーンショットとして、[このアプリについて]画面の画像を送ってきているということは、この画面に問題があると察することだ。そう考えると、バージョンの箇所以外に不具合は考えられない。そこで、[アプリ パッケージの作成]の際に指定したバージョン番号と違ったのでは、と気付くことになる。
対処方法
アプリ内で記述しているバージョン番号と、[アプリ パッケージの作成]の際のバージョン番号を同じにして、再度、パッケージ・ファイルを作り直す。この場合は、[このアプリについて]画面に表記していたバージョン番号を、「1.0.0.0.0」に修正してアプリ・パッケージを再作成する。申請時に新しく作ったアプリ・パッケージをアップロードし、[審査担当者へのコメント]欄に、「アプリ内の[このアプリについて]のバージョンが間違っていましたので、修正しました。」とはっきり書いておく。書いておかねば何を修正して再申請したか、審査員にも分かりにくい。修正した点が容易に分かるよう書いておくことが大切だ。これで、認定される。
Windows 8 日本語OSを前提とするWindowsストア・アプリ
筆者はWindowsストアに「簡易翻訳」というアプリを公開している(次の画像を参照)。
このアプリは、手書きで入力した文字を判別して、「日本語から英語」「英語から日本語」に変換するアプリだ。しかしこのアプリは、第1回の申請で見事にリジェクトされてしまった。
リジェクト理由
リジェクトされた理由が次の画面だ。
正直、この「認定レポート」を読んでも、何が原因なのかは一切分からない。一番下にZIPファイルがダウンロードされるようになっているので(赤い枠の部分)、これをダウンロードして解凍してみると、次のスクリーンショットが表示された。
このスクリーンショットを見て、「文字化けが原因でリジェクトされた」ということが理解できた。文字化けがリジェクト理由なのに、なぜ先の「認定レポート」のような、意味不明の内容が送られてくるのか、不思議でならない。この場合なら、「手書きで文字を入力して、[日本語から英語]ボタンをタップすると文字化けが発生する」とだけ書いて、ZIPファイルを添付してくれるだけでいいと思うのだが。Windowsストアの審査は一体どんな仕組みになっているのか、全くブラック・ボックスになっていて分からない。このような「認定レポート」は開発者を混乱させるだけなのではないかと、危惧される。
話が逸れてしまった(-_-;)、元に戻そう。しかし、筆者の環境では文字化けは発生せず、ちゃんと正常に翻訳表示されている。「これは、筆者の環境と、審査員の環境が違うのではないか?」とすぐに想像が付いた。
VBコード内の問題
このプログラムでは手書き文字を「日本語から英語」に翻訳する場合、次のようなVBコードを記述している。
' [日本語から英語]ボタンをタップしたときの処理
Private Sub fromJPtoEN_Click(sender As Object, e As RoutedEventArgs) Handles fromJPtoEN.Click
TranslateGo("Microsoft 日本語手書き認識エンジン", "ja", "en")
End Sub
' 指定した言語から、指定した言語に変換する処理
Private Async Sub TranslateGo(myEngine As String, _from As String, _to As String)
Dim myStroke = myInkManager.GetStrokes
For i As Integer = 0 To myStroke.Count - 1
myStroke(i).Selected = True
Next
Dim myRecName = myEngine
Dim myRecognizer = myInkManager.GetRecognizers
For i As Integer = 0 To myRecognizer.Count - 1
If myRecName = myRecognizer(i).Name Then
myInkManager.SetDefaultRecognizer(myRecognizer(i))
End If
Next
Dim result As IReadOnlyList(Of InkRecognitionResult) = Await myInkManager.RecognizeAsync(InkRecognitionTarget.All)
myInkManager.UpdateRecognitionResults(result)
Dim myAlternate = String.Empty
For Each myResult In result
Dim myText = myResult.GetTextCandidates
myAlternate = myAlternate & " " & myText(0)
TextBox1.Text = myAlternate
Next
Dim myResultText = myClient.TranslateAsync(myAppID, TextBox1.Text, _from, _to, Nothing, Nothing)
resultTextBlock.Text = myResultText.Result
End Sub
|
問題は、この「Microsoft 日本語手書き認識エンジン」にあったのだ。この「Microsoft 日本語手書き認識エンジン」は日本語のWindows 8 OS上でしか動作しない。恐らく審査員のWindows 8のOSは英語版だったのだろうと推察される。
筆者の取った対処方法
「審査担当者へのコメント」欄に以下のように書いて再申請した。
PDFを見た限りでは文字化けが発生しているようです。このアプリは、日本だけの公開にしています。そのため、「Microsoft日本語手書き認識エンジン」を使用しています。必ず日本語版Windows 8のOSで確認していただく必要があります。
英語版Windows 8のOSでは「Microsoft English (US) Handwriting Recognizer」が使用されるため、日本語を入力すると文字化けします。日本語版Windows 8 OSの環境でお試しください。
このように書いて再申請したところ、問題なく認定された。また、ユーザーへの[説明]にも、「このアプリは日本語版Windows 8 OS上でないと正常に動作しません。」の1文が必要だろう。いくら公開国が日本だけであっても、日本で英語版Windows 8 OSを使用されている方は少なくないはずだ。しかし筆者のミスで、この「簡易翻訳」アプリの[説明]欄にはOS環境に関するコメントを入れ忘れている。次回バージョン・アップする際には、必ず明記しておこうと思う。
ちなみに、「英語から日本語」に変換する場合のVBコードは次のようになる。
Private Sub fromENtoJP_Click(sender As Object, e As RoutedEventArgs) Handles fromENtoJP.Click
TranslateGo("Microsoft English (US) Handwriting Recognizer", "en", "ja")
End Sub
|
まとめ
審査員の実行環境と、自分の環境が異なるため、リジェクトされることが多々ある。例えばARMには対応させていないアプリを、Surface RTで検証されて、「クラッシュする」という理由でリジェクトされた経験もある。
こういった場合は、必ず[審査担当者へのコメント]欄に、一筆書き加えておくことが必要だ。「たぶん、いわなくても分かるだろう」とは思ってはならない。意外と分かっていないのである。筆者の場合はARMに対応していないアプリの場合は、「■注意:このアプリはARMに対応していませんので、Surface RTでは動作しません。」と必ず明記するようにしている。しつこいくらい書いていても、何ら問題はない。書かないより書いて状況を説明しておく方が、認定される率も高くなるのだ。
お知らせ
Windows 8の[検索]チャームで「ストア」を指定し、検索欄に、「kuniyasu」または「YakushijiKuniyasu」または「eightman」と入力すると、筆者の公開しているアプリの一覧を見ることができる。
■
今回はこれで終わりだ。最後は、「Windows 8 ストア 認定の要件」とは直接的には関係のない内容を取り扱った。しかし、このような理由でも、リジェクトされることはある、ということが分かっていただけたかと思う。
何度も繰り返し書くことになるが、要は、4000文字もの長文を入力可能な[審査担当者へのコメント]欄を、いかに有効に利用するかということだ。4000文字も入力を許可しているということは、アプリに対する想いや、注意事項を事細かく丁寧に書いてくれていい、という証しでもある。このコメント欄を使わないことは、認定上不利であると考えておいた方がいい。
審査員は自己主張の強い米国人である。アプリを申請する側も、大いに自己主張して、1個でも多くのアプリを認定してもらおうではないか。Windowsストア・アプリの申請においては、日本人の「奥ゆかしさ」や「謙虚さ」などは不要なのである(^_^)v。
では、また次の記事でお会いしよう。
※以下では、本稿の前後を合わせて5回分(第9回~第13回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
9. 極意9: アプリで提供されるプライマリ・エクスペリエンスはアプリ内で行われなければならない
Windowsストア・アプリからWeb上の情報を表示するために、Webブラウザーを開くと申請時にリジェクトされる?! その対象方法を紹介する。
10. 極意10: サポートしている全ての言語でアプリをローカライズしなければならない
日本語版のWindowsストア・アプリ上の表記に英単語があると申請時にリジェクトされる?! その対象方法を紹介する。
11. 【現在、表示中】≫ 極意11: バージョンの一致と日本語OS
アプリの実バージョンと、表示しているバージョンが一致していない場合のリジェクト例。また、日本語版限定に用意した機能を申請する場合に注意するポイントを紹介する。
12. 極意12: アプリは応答を停止したり、予期せず終了したり、プログラミング・エラーを含んでいてはならない
当然ながらアプリにバグがあれば申請はリジェクトされる。その実例と、Webカメラを使った際のある不具合の解消方法を紹介する。