Macアプリのウィンドウを閉じたのにDockに残る。
閉じたのに何で残るのっ!
今回はこの問題を解決するためのアプリの作成方法について、お伝えしたいと思う。
プロジェクトの作成
まずはプロジェクトの作成から。
プロジェクトの作成方法は以下の通り。
※プロジェクトの作成方法なんて知ってるよ!って方は実装まで読み飛ばすことを推奨する。
1.Xcodeを起動する。
2.Create a new Xcode project を押す。
3. macOS を選択する。
4. Cocoa App を選択し Next を押す。
5.任意のアプリ名を入力し Next を押す。
6.左上にある起動ボタン(▷)を押す。
7.こんな感じの何もないウィンドウが表示されれば、プロジェクトの作成成功。
これでプロジェクトの作成は終了。
実装
それでは、いよいよ実装って言っても非常に簡単。
AppDelegate.swiftを開き、以下のコードを貼り付ける。
/// 最後のウィンドウを閉じた際にアプリを終了する /// ※今回追加するコード /// /// - Parameter sender: アプリのオブジェクト /// - Returns: アプリを終了する場合:true, 終了しない場合:false func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true }
ちなみに実装後のコード全体はこんな感じ。
余談だが、Xcodeでは optionキーと⌘と/ を同時押しで、関数コメントの雛形が作成できる。
動作確認
それでは、動作確認。
1.Xcode の左上にある起動ボタン(▷)を押し、作成したアプリを起動する。
2.Windowの閉じるボタン(❌ボタン)を押す。
3.Dockにアプリが残っていないことを確認する。
閉じてもこのように残っていたアプリが
このように残っていなければOK。
おわりに
今回この処理の存在に辿り着いたのは、本業の関係である。
アプリの最小化ができないって不具合の対応依頼を受けた。
しかし、これが先輩の素晴らしい実装によって、発生していた不具合であったため、衝撃を受けた。
詳細は書けないが、SwiftのViewが消えた時に呼び出される viewDidDisappear という関数がある。
ここで、画面遷移の条件以外はアプリを強制終了するという処理が書かれていた。
この viewDidDisappear という関数は、もちろん最小化の時にも呼び出されるので、強制終了する。
何でこの実装をしたのか、先輩に聞いてみると。。。
アプリのウィンドウを閉じるとDockに残るのを残さないで欲しいとの要望があったので、実装したとのこと。
要望は達成しているからいいでしょって。
心の中で様々な感情が込み上げてきたが、そっと心にしまって、今回の方法にたどり着いた。
はぁ。。。。。。。