3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

はじめに

この記事は過去にIPU TOKYOで発表した内容を再編集したものです。

勤怠管理システムが導入され、打刻の習慣がない人は、打刻を忘れることがあると思います。

打刻忘れをしないために、壁紙を工夫したり、Slackの/remindコマンドを使う人もいるかもしれません。

ここでは、Macアプリケーションを作って、打刻忘れを防止します。

方針

Mac起動時に自動で勤怠管理システムのURLを開きます。
そして、Macのシステム終了時にも自動で勤怠管理システムのURLを開きます。

ステータスバーに常駐させたい

ステータスバーに常駐するアプリケーションとして作っていきます。
作り方は、過去に投稿した記事を参考にします。

スライド07.jpeg

AppDelegate.swiftを下記のように書き換えます。

AppDelegate.swift
import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    let url = URL(string: "http://example.com/")
    var cancelOnce = true

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        // Insert code here to initialize your application

        NSWorkspace.shared.open(url!)
    }

    func applicationWillTerminate(_ aNotification: Notification) {
        // Insert code here to tear down your application
    }

    func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply {
        if cancelOnce {
            cancelOnce = false
            NSWorkspace.shared.open(url!)
            return NSApplication.TerminateReply.terminateCancel
        }

        return NSApplication.TerminateReply.terminateNow
    }
}

applicationDidFinishLaunchingで起動時、applicationShouldTerminateにシステム終了時にURLを開きます。
NSApplication.TerminateReply.terminateCancelを返すことでシステム終了を中断します。

問題発生

実行すると、システム終了時にURLが開かず、そのまま終了してしまいます。

どうやら、ステータスバーに常駐させるためにinfo.plistに追加したLSUIElementが原因のようです。

<key>LSUIElement</key>
<true/>

ということでこれがあるとfunc applicationShouldTerminateが実行されません。
ステータスバー常駐は諦めます。

完成

Dockにアイコンが表示されてしまいますが、info.plistに追加したLSUIElementを削除して完成です。

システム終了をするとシステム終了が中断され、URLが開きます。

015.jpeg

まとめ

打刻になれるとシステム終了の中断が邪魔になります。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?