koogawa blog

iOS、Android、foursquareに関する話題

iOSアプリ開発者がmacOSアプリ開発したときにやったこと

本日「真実の鏡」というmacOSアプリをリリースしました🎉

真実の鏡

真実の鏡

  • Kosuke Ogawa
  • Utilities
  • Free

私たちが普段、鏡や自撮りカメラなどでよく見ている自分の姿。実は左右が逆になっていることはご存知だと思います。このアプリは、実際に周りから見えている「本当の顔」を映し出すアプリです。よかったら使ってみてください。

✁ 宣伝ここまで ✁

↑でもつぶやいたんですが、macOS アプリに関する技術書はホントに少ない!!

というわけで

この記事では、今までにiOSアプリしか開発したことしか無い開発者が、初めてmacOS開発をする上で実践したこと、気付いたことなどをメモしたいと思います。

目次


shu223 さんの本を読んだ。

まず発見したのは shu223 さんの本!

shu223.hatenablog.com

iOSエンジニアの視点から「これ、macOSではどうやるの?」という事項を集めてまとめてみました。

まさに自分にピッタリの本でした!この本から

  • UIKit⇔AppKit の関係(例:UIImageViewではなくNSImageView)
  • Xcodeでの新規プロジェクト作成方法
  • アプリのビルド方法

などを学びました。

ここまで1時間弱。

足りない部分はネットでググる

今回やりたかったことは次の3つ。

  • Macのカメラ映像を表示するビューを2つ配置
  • 片方は左右反転した映像
  • もう片方は左右反転していない状態(つまり真実の顔)の映像
  • 目立たない場所にバナーも出したい

良い感じにググってヒットした記事を参考にさせて頂き、なんとか実装できました。

ここまで4〜5時間。

macOSに対応した広告SDKがない

このあたりで気付いたんですが、どうやら macOS に対応した広告SDKは殆ど無いようです!!

macos - How to put ads in apps for Mac App Store? - Stack Overflow

もし、macOS にも対応した広告サービスをご存じの方がいましたらぜひ教えてください🙏

ググり方にはコツがある

macOS アプリ開発の情報をググろうとして macOS 知りたい情報 で検索すると、技術記事ではなくMacの使い方に関する記事が多くヒットしてしまいます。この場合は Cocoa 知りたい情報 で検索すると、期待した情報にたどり着けることが多いです。

アプリ申請に関する情報も少ない

macOS アプリ申請に関する情報もなかなか見つかりませんでした。自分の場合は iOSアプリの申請を何度もしてきたので、 雰囲気でなんとか乗り越えた感があります💪(Certificate の作り方は基本的にiOSと一緒)

意外だったのは、macOSアプリの場合もスクリーンショットのサイズが決まっていること。

次のいずれか(アスペクト比 16:10)。 
1280 x 800 ピクセル 
1440 x 900 ピクセル 
2560 x 1600 ピクセル 
2880 x 1800 ピクセル 

https://help.apple.com/app-store-connect/#/devd274dd925

macOS アプリの画面サイズはアプリによってバラバラなので、スクリーンショットは良い感じに上記サイズに加工してあげる必要があります。

リジェクトされた!!

勝手もわからないし、一発で審査が通ることはないだろうなーと思ってましたが、申請出してから1日後、やっぱりリジェクトされました。

リジェクト理由は次の2つ。

2. 3 Performance: Accurate Metadata (macOS)
4. Design: Preamble (macOS)

Guideline 2.3.8 - Performance

We noticed that your app name to be displayed on the App Store does not sufficiently match the name of the app displayed when installed on macOS.

iTunes Connect Name: 真実の鏡
App Name when Installed: mirror
App Name when Launched: 真実の鏡
App Name in About/Hide/Quit Menu: mirror

iTunes Connectに登録された名前と、実際にアプリを起動したときに表示される名前が一致してないよ!ってことですね。 Appleのレビュアーさんが丁寧に Next Steps を提示してくれたので、その通りに修正。

2つ目のリジェクト理由はこちら。

Design Preamble

The user interface of your app is not consistent with the macOS Human Interface Guidelines.
Specifically, we found that when the user closes the main application window there is no menu item to re-open it.

ユーザーが✗ボタンでWindowを閉じると、再度Windowを開く術がないよ!ということですね。

ご存知の通り、Macの場合は✗ボタンで Window を閉じてもアプリ自体は生きているんですよね。ここで再び Window を開けるようにしておかないとリジェクトされてしまうようです。

macos - Design Preamble Mac OS X Mas - Stack Overflow

対処法をググると、上記の記事がヒットしたので、次のコードを追加し、

func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
    return true
}

✗ボタンをクリックしたらアプリ自体を終了するように修正しました。

無事リリース!

そんなこんなで、6/9 に無事、人生初の macOS アプリをリリースすることができました。

f:id:koogawa:20200609070008p:plain
時間がなかったので自分の写真を使いました
よかったら使ってくださいね!