頭と尻尾はくれてやる!

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


申請したmacOSアプリがAccurate Metadata違反でリジェクト

アプリのリジェクト時に添付されてるipsファイルを読み解く
↑この続きです。アプリ内課金の商品データのIDを変更して申請したところ、、、また別件でリジェクトでした。起動時にクラッシュではなかったので一歩前進ではあります。

今回は
Guideline 2.3.2 - Performance - Accurate Metadata
で引っかかってリジェクトされました。
指摘されたのは、アプリ内課金について詳細がよくわからないので、アプリの説明文に適切に記述して下さい、というものでした。
指摘内容はわかったのですが、さてこの場合アプリ本体はこのままで申請できるのだろうか、、、?

試しにアプリの説明文を修正して、アプリ本体はそのままで、申請を進めていくと、、、申請できました!
そういうものなのですね。

なお、この申請で無事アプリはリリースとなりました!アプリ名にAppPreviewって含まれてていいんかなあ?と思ってましたが問題なかったようで。

自作アプリのアイコン

↑Mac App Storeから自身初のmacOSアプリをダウンロード、Xcodeの隣に置いて記念スクショ。
スポンサーサイト






アプリのリジェクト時に添付されてるipsファイルを読み解く

macOSアプリ「AppPreview Editor」をリリースしました
↑この続きです。Invalid Binaryが出なくなて審査に入ってくれたのですが、別件でリジェクトされました。
Guideline 2.1 - Performanceでアウト、アプリ起動時に落ちるよ!というなんとも悲しい内容でした。
このような場合、crash reportから原因を調べる必要があります。

symbolicateしてcrash logからどこでcrashしたか調べる
↑以前はこのようにして調べていたのですが、なぜかdSYMファイルへのリンクがない、、、そして審査担当者からのメッセージ(App Store Connect内)の下の方にxxx.ipsというファイルが添付されてる。

え?これでどうすんの?と困っていろいろ調べたり試行錯誤したのですが、結果から言うと
inket/MacSymbolicator: Symbolicating macOS/iOS crash reports, easily.
↑このMacSymbolicatorという神アプリを使いました。
これを起動して添付されてたipsファイルをドラッグ&ドロップし、symbolizeするだけ。
これで普段見るエラーメッセージのようなのが表示されます。つまり、どこで、何が原因で落ちたか、というのが推測できます。
以前のようにターミナルから呪文を唱える必要はありません。ほんと、神アプリです。

ちなみに、どこで落ちてるのかを調べてたところ、起動時にアプリ内課金用の商品データを読み込むのがうまくいっていないことがわかったのはいいのですが、当方の環境ではクラッシュは再現しません、、、仕方ないので商品のIDを変更(App Store Connectもアプリも)して申請したところ、起動時に落ちてリジェクト、というのはなくなりました。



なお、dSYMじゃなくてipsになっているのかは仕様変更なのか、iOSとmacOSの違いなのかは私は知りません。


申請したアプリがInvalid Binaryでリジェクト

macOSアプリ「AppPreview Editor」をリリースしました
↑このmacOSアプリ、審査通過まで何度かリジェクトされました。
1番最初のリジェクトはWaiting for Reviewから1分後にInvalid Binaryになったことでした。
つまり、審査に入っていませんのでリジェクトされた、と言うのが正確なのかよくわかりませんが。
時間からしても機械的に処理されたんだと思いますが、だったらvalidationで落とすなり、申請完了までに教えてくれてもええやん!
とか思うのですがそうもいかないんでしょうねえ。

なお、Invalid Binaryだ!というメールに不具合の内容が英文で長々と記述されていたのですが、
3rd Party Mac Developer Installer’ certificateとか
Invalid Signatureとか
App sandbox not enabledとか、、、
あああ、macOSアプリに手を出すんじゃなかった、、、
と思わせるに十分な内容でした。そもそもmacOSアプリの開発や申請に関する情報が少ないですもんね。

そうは言ってもやらないわけにはいかないのでいろいろ調べたのですが、結局Xcode上のsigningを手動にして自分で設定(validationやupload時も手動で設定することになる)して再度申請したところ、Invalid Binaryはなくなりました。


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の値が変わってくれた〜!というツイート。


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アプリに持ってきて使うと出力される座標は左下が原点になってる。なんでやねーん!




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