UWPのストア登録手順 / vcruntime140_1_app.dll の API __CxxFrameHandler4 はこのアプリケーションの種類ではサポートされていません

宣伝記事を次辺りに書きますが、久しぶりにUWPをストア登録しました。
UWPをストアに登録する記事は[ここ](https://book.mynavi.jp/manatee/detail/id=76175)とかにありますが、整理を兼ねて簡単にまとめます。
ついで2020年7月時点でちょっとしたことですが混乱した点をメモ。

# メモ
``vcruntime140_1_app.dll の API __CxxFrameHandler4 はこのアプリケーションの種類ではサポートされていません``みたいなエラーが出て辿り着いた人へ。
そのエラーはWindows アプリ認定キット10.0.18362.1や近いバージョンで出たなら無視して構いません。
2025年とか遠い未来からここに辿りついた人なら多分普通にアプリ側のバグです。ここに答えはありません。使っちゃいけないライブラリをnugetで追加してしまったとかそんなのが原因じゃないですかね?

# 基本手順
UWPをストアに登録する手順は基本的にこんな感じです。

## 1. 開発者ライセンスを取得
最初にストアに登録する際は19米ドルを払って[開発者登録](https://developer.microsoft.com/ja-jp/store/register/)をしなければいけません。
学生なら[Microsoft Imagine](https://azureforeducation.microsoft.com/ja-jp/Institutions)で無料です。いろんなソフトが無料なのでおすすめです。

私の場合は取得済みなので関係ありません。

## 2. Package.appxmanifestを設定
プロジェクトのPackage.appxmanifestを開いていくつかの値を埋めます。

1. アプリケーション>表示名を埋めます。多言語化してるならResourceのキーを設定します。"ms-resource:AppName"とかが基本。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146467/af94b5ce-8e95-124f-8dec-cbfc3d257836.png)
日本語アプリ名の場合などはResources.altform-msft-phonetic.reswでフリガナを設定したりします。[参考](https://docs.microsoft.com/ja-jp/windows/uwp/design/globalizing/prepare-your-app-for-localization)。

2. 多言語化してるなら既定の言語はen-USにしておいた方が日本以外の非英語圏で幸せです。この辺は多言語化の記事を参照してください。
3. センスの良いアイコンを作ります。ここ大事。
UWPは最近までシンプルな単色系デザインが基本でしたが、最近はFluent Designで立体感のある感じになりました。ドロップシャドウやグラデーションを使うか、Blenderとかで頑張って作ってください。[日本語](https://gigazine.net/news/20200221-windows-10-new-icons-fluent-design/)・[英語](https://medium.com/microsoft-design/iconic-icons-designing-the-world-of-windows-5e70e25e5416)。
4. 資産ジェネレーターで一気に登録します。資産って訳は謎ですが、便利なものができましたね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146467/a1d49ab5-5004-bd7c-95eb-1a3da36fcf74.png)

なんかここで署名をした気がしますが、いくつか調べた限り勘違いみたいです。

## 3. 「アプリパッケージの作成」
1. UWPプロジェクトを右クリックし、公開→アプリパッケージの作成  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146467/eec1ac30-983d-8f09-f935-3c4f3e0ba515.png)
2. 「新しいアプリ名でMicrosoft Storeに」をチェック→「次へ」  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146467/99894b7b-dc55-b9c2-1896-13a70024706f.png)
3. 「新しいアプリケーション名の予約:」に入力→「予約」  
予約はブラウザで[Microsoft パートナー センター](https://partner.microsoft.com/ja-jp/dashboard/windows/overview)の「新しいアプリを作成」で行うこともできます。私はそうしてます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146467/d5fd405d-c7f1-55c6-562f-b25f5fdd2455.png)
4. アプリケーション名を選択→「次へ」  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146467/7c4c7934-dddb-a055-1783-89aa1a2f7622.png)
ここで「Microsoft Store内のパッケージ ID」の列がロード中の場合は「次へ」を押さないでください。こちらの環境ではフリーズします。多分バグです。
5. 「作成」  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146467/b7df9d9b-9ce9-d252-8a27-d5bd167113b7.png)

ここにARM64が表示される場合とされない場合があるみたいです。スクショ用に試してみて気が付きました。

## 4. ストアにアップロード・情報を登録
[Microsoft パートナー センター](https://partner.microsoft.com/ja-jp/dashboard/windows/overview)で登録作業をします。
スクリーンショットや説明文を登録したり値段を決めたりします。
長いので割愛します。

# トラブル
今改めて調べるとこれだけで良かったっぽいんですが、いくつか細かなトラブルがありました。

## トラブル1. 「Windowsアプリ認定キット」でエラー
「Windowsアプリ認定キット」でエラーが出ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146467/59367203-ee15-49b6-e54b-1a69f9c509be.png)

レポートを見てみるとこんな記述が。
``vcruntime140_1_app.dll の API __CxxFrameHandler4 はこのアプリケーションの種類ではサポートされていません。Microsoft.Graphics.Canvas.dll がこの API を呼び出します。``
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146467/39c568c2-1386-9af2-21c9-cffc71b94040.png)
検索すれば分かりますが、これバグです([英語](https://developercommunity.visualstudio.com/content/problem/746534/visual-c-163-runtime-uses-an-unsupported-api-for-u.html))。問題ありません。普通にストアでは通ります。

2019年9月に報告されたバグですが、手元のツールがそれより古いので(Visual Studioは最新版に更新していますが)普通にエラーが出ます。
Windows App Certification Kit 10.0.18362.1で確認できました。
次期版では修正されているそうです。

## トラブル2. 「パッケージ ファミリ名が無効です」「パッケージの発行元の名前が無効です」
さて、トラブル1はあっさり無視して終わったのでストアにアップロードをしました。するとこんなエラー。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146467/e4802e97-250f-b8b2-a5f4-65e5fc449272.png)

こちらも調べると[こんな記事](https://social.msdn.microsoft.com/Forums/windowsapps/en-US/f212a9bc-e297-42dc-94b4-f758a2b186c8/uwp-invalid-package-family-name-and-publisher)が出てきました。
同じ症状で2020年6月。Visual Studio 16.6.0以降で発生して16.5.5にダウングレードすれば解決するらしい。手元のVisual Studioは16.6.4。
ダウングレードはめんどくさいので後回しすることにしました。

がこれは勘違い。実はやり方が間違っていました。
さっき調べた手順には載ってませんでしたが、記憶に従ってパッケージに署名をしていました。
その際名前を自分の発行元表示名(上の図でuser)にしていましたが、正しくは発行元(上の図でA1234567-B123-C123-D456-E123456789ABC)で鍵を作成しないといけないようでした。
パッケージファミリ名の末尾部分も署名の名前から作成されるみたいでした。

「発行元の名前が無効」と丁寧に書いてあるんだからその通りにするべきでしたね。
そもそも署名が不要だったっぽいのが衝撃ですが、Xamarin Formsの場合とごっちゃになってたみたいです。
でも署名があっても通る上、署名の名前が間違っていると通らないというのは謎ですが。
サイドローディングとかで使うんですかね？

## トラブル3. ARM64
この記事を書いて気が付いたんですが、かなり古いアプリを継続して開発したせいかARM64用のバイナリが含まれていないみたいです。
原因は不明ですが、csprojの内容が古いとかそんな感じな気がします。

構成マネージャーで修正すると対応できるみたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146467/397a77d2-56a5-dff8-bd3c-456becfbad38.png)

## トラブル4. 市場
ついかでもう一つ。
サポートされている市場が古いアプリでは242で新しいアプリでは241だ。
なぜ？
…まぁどっかの国が減ったのかな？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146467/07e5f57f-8e92-63f1-c694-3565140e160d.png)