Help us understand the problem. What is going on with this article?

打刻を忘れないために

More than 1 year has 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

まとめ

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

arthur87
iwate-pu
岩手県滝沢市にある公立大学です。Qiitaではソフトウェア情報学部生や出身の人が多いです。
https://www.iwate-pu.ac.jp/
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした