MacOSX
macos

Global Shortcutで覚えにくい設計原則を確認しやすくするポップアップMacアプリを作った

設計原則、SOLIDとかKISSとかが覚えられないので、コードを書いたりしながら確認しやすいようにしたかった。ちょうどこんな記事があったので、真似したり改造してmacOSアプリを作ってみることにした。

会社の行動規範浸透を図るため、メニューバーからいつでも確認できるアプリを作った🤔 - Qiita

アプリのコードはGitHubにあげておきました。

https://github.com/ktanaka117/PrincipleCheatSheet


メニューバーにポップアップを開くボタンを追加する


完成イメージ

スクリーンショット 2018-12-22 18.15.10.png


解説

このステップまでは、元ネタの記事を真似ればできますので省略します。

会社の行動規範浸透を図るため、メニューバーからいつでも確認できるアプリを作った🤔 - Qiita


Global ShortCutでポップアップを開くようにする


完成イメージ

アニメーションはこちらのTweetから。

コードを書きながらも確認可能。

スクリーンショット 2018-12-22 18.14.42.png


解説

コードを書いてる最中に、いちいちカーソルをメニューバーにうつしてポップアップを開いて...とするのが面倒だったので、ショートカットで開けるようにしたくなりました。例えば Command + Ctrl + P を押すと、すぐに開いてくれるみたいな。

グローバルショートカットを実装する方法はいくつかあるようですが、以下の記事を参考に Magnet というライブラリを利用して設定しました。

Macアプリでグローバルホットキーを使用する - Qiita

具体的なコードとしてはこんな感じでショートカットの登録ができます。

// 35 = p

guard let keyCombo = KeyCombo(keyCode: 35, cocoaModifiers: [.control, .command]) else { return }
let hotKey = HotKey(
identifier: "CommandControlP",
keyCombo: keyCombo,
target: self,
action: #selector(togglePopover(_:)))
hotKey.register()

keyCodeは以下で確認しました。

MacOS フルキーボードのキーコード一覧 - Qiita


Xcodeの実行時以外も常駐させる

アーカイブして.appファイルとして出力することで、アプリケーション化できます。

アプリケーション化すると、普段使っているXcodeとかその他アプリと同じように起動できるようになって、常駐するようになります。


手順

Product > Archiveでプロジェクトをアーカイブを実行する。アーカイブが完了すると、以下のようにアーカイブ一覧を表示するウィンドウが表示されるので、Distribute Appを押します。

スクリーンショット_2018-12-22_18_30_41.png

Developmentを選んでNext

スクリーンショット_2018-12-22_18_33_01.png

適当なDevelopment Teamを選んでNext

スクリーンショット_2018-12-22_18_33_09.png

signingはAutoでやっておきましょう。

スクリーンショット_2018-12-22_18_33_12.png

最後にExportを押して、Archiveの出力先を選択して終了。

スクリーンショット_2018-12-22_18_33_22.png

保存したものの内容物がこんな感じです。写真だと一番右にある.appファイルを開くと、アプリが常駐してくれるようになります。

スクリーンショット 2018-12-22 18.38.08.png


ハマりどころ

ライブラリをインストールするのはCocoaPodsを使いましたが、最新のXcodeでのビルドと相性が悪かったのか、エラーが出てハマりました。CocoaPodsのbetaバージョンをインストールすることで解決できました。

詳しくは以下の別記事にまとめました。

macOS向けのxcworkspaceでこんなエラーが出たら: Command PhaseScriptExecution failed with a nonzero exit code - Qiita


感想

はじめてのmacOSアプリが作れたぞ!!!やった!!!!!

普段はiOSアプリを開発しているので、なんとなくの予想でArchiveによるアプリの常駐化までたどり着けました。ArchiveビルドがiOSと違って爆速だったのが感動ポイントでした。