Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

設計原則、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と違って爆速だったのが感動ポイントでした。

ktanaka117
百合好きのダンボールの人です。 SwiftでiOSアプリを開発していて、最近のホットトピックはテスト、設計、リファクタリング。 Twitter: @ktanaka117
http://tanakalivesinsendai.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away