ユピテルスイング練習機用 iOS/Androidアプリを更新しました
更新は気が向いたときに少しやっていたのですが、今回はAppleさんにリジェクト食らったのでその辺を殴り書き
どういうアプリなのか、というのはこちらに書いてあります
ざっくり書くとゴルフ用の俺用アプリを作った、って感じ
リリースしてから1.5年、使っているのは私だけだと思っていたのですがほかにも使ってくれている人が判明! 使い続けてくれているのかは不明
ということで今回はランキングページを追加しました。ついでiOS版にはビデオ録画にリアルタイムエフェクトを入れて遊んだりもしました
ストアへ公開
Androidの方はサクッと完了です。アプリの更新時は多分ソフトで自動でチェックしてそのまま公開なんだとおもいます
iOS版リジェクト
iOS版も同じだと思っていたら
リジェクトきました
リジェクトの理由
Guideline 5.2.1 - Legal - Intellectual Property
いろいろな人がこれにひっかかっているのでググるとほっこりします
私の場合は
ユピテルって入っているけど公式じゃないでしょ?ユピテルから訴えられたらどーすんの?ちゃんと公式からOKもらって。もしくはアプリと説明文からその辺消して (超意訳)
ということらしいっす。アプリの説明には最初から公式じゃないよ
って書いてあるんですけどね (ページトップ絵)。スマホの契約よりはわかりやすい注意書きだとおもったんだけど、これではダメみたいでした
対策
私の打てる手は3つです
公式のお墨付きをもらう
めんどう
実はアプリを作る前にサポートに「スマホアプリもっと使いやすくしないの?しないならBLEの通信仕様公開してみんなに作ってもらおうよ。作るよ?」的なメール送ったのですが、定型の自動返信すらありませんでした。ユピテル的にはゴルフ関係はハード売って終わり、なスタンスなんだろうなーという印象だったので、お墨付きもらうのはハードル高すぎです
公開やめる
めんどう
iPhoneに入れたアプリはTestFlightでも最長で90日間しか動かないので、90日に1回はTestFlightに新しいパッケージを上げないと突然使えなくなるのですごく面倒です。絶対更新忘れて使いたいときに起動できません (それが嫌でストアに公開したわけですし
説明文を変える
結局これしかないのですが、これも問題があります
- 日本のゴルフ人口が 19年現在で550万人 (ググった)
- そのうち真面目に練習する人が2% (勘)
- 練習する人のうちユピテルのGST7-BLEを持っている人が0.1% (勘)
- 練習してGST7-BLEを持っている人のうちiPhoneユーザーが60%
- 練習してGST7-BLEを持っているiPhoneユーザーのうちデータを収集したい人が10% (勘)
- 練習してGST7-BLEを持っているiPhoneユーザーでデータを収集したい人のうち公式以外のアプリをApp Storeで探そうと思う人が10% (勘)
とすると、
5,500,000 × 0.02 × 0.001 × 0.6 × 0.1 × 0.1 = 0.66 人
このたった0.66人の人にリーチできるような説明文にはどうしても「ユピテル」「GST7-BLE」は必要です。必須です。これ以外のどんな単語で検索するんだよ。こんなのBotが定期巡回で見にくるだけだよ
とはいうもののどうしようもないですし、もともと俺用アプリですし、アプリの説明文変えて再提出して無事に公開されました
さいごに
GST7-BLEを持っているというレアな方は一度使ってみていただけないでしょうか・・
落ちもまとめもないですよ
WPF ( .NET 5 ) でWindows Runtime API を呼ぶのは超簡単だった
昨日のやつ
WPF ( .NET 5 ) でWindows Runtime API を呼ぶ、前にしなければいけないこと - プログラムの事とか
は大嘘でした、ごめんなさい、この方法ではAPIを呼び出そうとすると何らかのビルドエラーが発生しますね、その先に進めませんね
反省はするけど次回に生かせる可能性は低いです
ということで 2021/01/14現在で最新の環境で .NET 5 WPFでWindows Runtime APIを呼ぶ方法を改めて
プロジェクトファイルの編集
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net5.0-windows10.0.19041.0</TargetFramework> <UseWPF>true</UseWPF> </PropertyGroup> </Project>
編集後はコンパイルエラーが出るかもしれませんが、その場合は一度クリーンすればだいじょぶだと思います
以上
NuGetパッケージとかいらなかったんや
.NET 5 Preview 8 以降はターゲット フレームワーク モニカー<TargetFramework/>
を指定するだけでいいらしいです。ちゃんとドキュメントがありました
試す
今回はちゃんとためします
ここのコードをコピペして実行
できました
WPF ( .NET 5 ) でWindows Runtime API を呼ぶ、前にしなければいけないこと
2021/01/13時点でのお話です
2021/01/14追記
今回のブログの通りやっても使えません、翌日のブログ(以下のリンク)が正解
2021/01/14追記おわり
ここから先は試行錯誤中のログ的な感じで残しておきます
- Visual Studioを最新にしておくのは必須(たぶん)
- Windows は 20H2
プロジェクトファイルの編集
とりあえずこんな感じ
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net5.0-windows10.0.19041</TargetFramework> <UseWPF>true</UseWPF> </PropertyGroup> </Project>
.NET 5と対象のWindowsバージョンをTargetFrameworkに(上の例は20H1かな?)
Microsoft.Windows.SDK.Contracts をゲット
NuGetでとりましょう
Install-Package Microsoft.Windows.SDK.Contracts -Version 10.0.19041.1
ここまではググると簡単に出てくると思います
エラー
この状態でビルドすると
1>C:\Program Files\dotnet\sdk\5.0.102\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(934,5): error NETSDK1130: .NETCoreApp,Version=v5.0 をターゲットにする場合、Windows メタデータ コンポーネントの直接参照はサポートされていません。このターゲットには、C#/WinRT プロジェクション ツール (https://aka.ms/cswinrt) または指定されたプロジェクションをご使用ください。
.NETCoreApp,Version=v5.0 をターゲットにする場合、Windows メタデータ コンポーネントの直接参照はサポートされていません。このターゲットには、C#/WinRT プロジェクション ツール (https://aka.ms/cswinrt) または指定されたプロジェクションをご使用ください。
こんな感じでエラーがでるはずです
相変わらず意味が分からん、英語だとわかるのかな?
Microsoft.Windows.CsWinRT をゲット
NuGetでこのパッケージをゲットするとエラーが消えます
Install-Package Microsoft.Windows.CsWinRT -Version 1.1.0
.NET 5でMicrosoft.Windows.SDK.Contracts を参照した場合CsWinRTが必要だよっていう記事は見つけられなかったんですが、必須ではないんですかねー?
Windows Runtime API を呼ばない
今回は呼ぶ前にすることなので呼びません。これで正常に呼び出せるのかも試していません。とりあえずビルドエラーが消えてうれしいです
おしまい