はじめに
この記事は過去にIPU TOKYOで発表した内容を再編集したものです。
勤怠管理システムが導入され、打刻の習慣がない人は、打刻を忘れることがあると思います。
打刻忘れをしないために、壁紙を工夫したり、Slackの/remind
コマンドを使う人もいるかもしれません。
ここでは、Macアプリケーションを作って、打刻忘れを防止します。
方針
Mac起動時に自動で勤怠管理システムのURLを開きます。
そして、Macのシステム終了時にも自動で勤怠管理システムのURLを開きます。
ステータスバーに常駐させたい
ステータスバーに常駐するアプリケーションとして作っていきます。
作り方は、過去に投稿した記事を参考にします。
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が開きます。
まとめ
打刻になれるとシステム終了の中断が邪魔になります。