頭と尻尾はくれてやる!

iOSアプリなどの開発日記です


macOSアプリ「AppPreview Editor」をリリースしました

AppPreview Editorのアイコン

AppPreview Editor

AppPreview Editorのスクリーンショット

操作が簡単な動画編集用のmacアプリです。
その名の通りiOSアプリの紹介用ビデオであるAppプレビューを作成するためのmacアプリです。

アプリ申請時にApp Store Connectに提出するAppプレビューはサイズやフレームレートや音声などにきっちりと規格があるので、これを外すと正常にアップロードできません。その規格に合うような動画を出力します。

無料アプリですが出力された動画に無駄にロゴが入っていますが、有料でこれを削除できるようになっています。



以下開発関連の雑談です。
そもそもiMovieでテキストが楽に編集できればいいのですが、なんとも微妙なのでなんとかならないかなあという思いからこのアプリを作りました。
自身初のmacOSアプリなので、とにかくリリースすることを目標にしていましたので、今後いくつか機能追加する予定です。
アプリ名にAppPreviewと入れてたのでAppleに怒られるのかな?と思ったけど無事審査通過してよかったです。


CABasicAnimationのopacityがアニメーションしてくれない

CALayerのアニメーションでopacityを0から1にして1から0にする、みたいなことをしようとしたのですが、恐ろしくハマってしまいました。

CABasicAnimationを使うとできそうなのですが、、、
let animation = CABasicAnimation(keyPath: "opacity") 
animation.fromValue = 0
animation.toValue = 1
↑リファレンスにはこれだけ書いてるのですが、、、これが全く動作しない。
調べるとNSNumber使えとかまあいろいろ見つかるのですが、何をやっても動作しない。

ようやく辿り着いたのが
animation.isRemovedOnCompletion = false
を追加しておくと動くようになった、、、!
リファレンスを読む限りそうなの?って感じがするが、、、

あと、fillModeプロパティも用途に応じて適切に設定しとかないといけない。これは納得できるけど。


なお、今回のはiMovieみたいな動画編集アプリ作成時、つまり動画の上に画像を乗せる場合での処理なのでその辺りが特殊だったのかもしれない。
iOSで動画の上に画像を載せて回転アニメーションさせる方法 - Qiita
↑なんで動画に画像乗せるのにCALayerを使うかはこちらを参考にしたからです。



↑位置や時間はともかくやっとopacityの値が変わってくれた〜!というツイート。


iOSアプリ「個体値チェッカー for ポケモンGO」をリリースしました

ivschecker_mainIconR200.png

個体値チェッカー for ポケモンGO

ポケモンGOで捕まえたポケモンの個体値を調べるアプリをリリースしました。

220512_1.jpg
↑こういう個体値を示すグラフが表示されている画面から読み取ります。
ですのでこの画面を含む
(1)スクリーンショット(複数枚可能)
(2)動画
のどちらかを事前に作成しておきます。


220512_2.gif
↑動画の場合はこのようにグラフを表示しつつポケモンを次々と切り替えていくところを録画してください。
1匹ごとにスクショを作成するのが面倒だと感じる方には動画がおすすめです。多分動画の方が楽です。

220512_3.jpg
↑読み取った結果はこのようにピクチャーインピクチャー機能でポケモンGOと同じ画面で表示させることができます。
ですので結果を見ながら、ポケモンGO側で個体値を入力するとか博士に送るなどの作業ができます。
右側の15というボタンをタップすると次のポケモンの結果が表示されます。


Create MLのObject Detection用のデータセットを作成する

Create ML起動時の画面

↑これはCreate MLのプロジェクト作成時画面だけど、このObject Detectionで生成されたNNは、画像内にどんなオブジェクトがどこにあるかを出力してくれる。
このデータセット(画像とJSONファイル)をmacOSアプリで作成しようとしたんだが、はまったことが二つ。

1つ目)
JSONファイルに画像ファイル名やオブジェクトのラベルや座標を持たせる必要があるんだが、この座標はx, y, width, heightというキーで整数を与える。
このx, yは画像の中心であり、左上でも左下でもない!

2つ目)
macOSでNSViewなどを扱ったことがあればご存じだろうが、、、macOSではiOSと違い、原点が左下だ。うっかり左下を原点とした座標を与えていたのだが、JSONファイルで与えるべき座標は左上が原点としての値だ。

とまあしょうもないところで随分と時間をロスしたのでこれからやる場合にはご注意を。

なお、Create MLで学習させて無事mlmodelファイルを作成し、それをiOSアプリに持ってきて使うと出力される座標は左下が原点になってる。なんでやねーん!


Pik Friendsの開発時の話

ピクミンブルームですでにプレイしてないフレンドを探す方法
↑リリースしましたよ!って記事はこちらに書いたんだけど、iOS開発がらみの話を少々。

動画から文字を読み取る、というのはVisionのVNVideoProcessor, VNRecognizeTextRequestなどのクラスを使用。
残念ながら日本語の読み取りは現在のところ不可らしいので、名前(日本語可能)ではなくAccount ID(英数字のみ)を読み取っている。

前回との比較をするのでデータは保存しておく必要があるんだけど、たいした量でもないのでUserDefaultsでさくっとsave/loadしてる。

このアプリは初のSwiftUIベースのプロジェクト。
いいわあ~、SwiftUI。まあ、たまにイラつくこともあるけど。

こういう他のアプリを使う場合にちょっと便利になるアプリ、というのを作成する場合、元のアプリに変更があった場合に突然動作しなくなる可能性がある。
なので、そうそう時間をかけてらんないよな、ということで英語版のみでリリースした。
タブのアイコンも元々systemが持ってるのを使ってる。
Infoタブあたりのページは以前作成したアプリ(storyboardベースだけど一部はSwiftUI使ってた)からの流用。
流用する場合にSwiftUIの方がラクだなあと改めて思ったわ。
iPadのスクショを用意するのが面倒なのでiPhone専用アプリにした。
App Previewは6.5インチ用だけは作成したが、5.5インチ用は作成せずスクショだけにした。

などなどの簡略化により自分にしては短期間でリリースに至ったと思う。


今回申請した日の夜には審査に入り(最近早いね)、すぐにリジェクトされた。
Guideline 2.1 - Information Needed
で引っかかった。
再申請ではなく、メッセージでこちらが説明の返信、向こうが返信、さらにこちらも返信で再審査に入り、すぐに通過した。




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.