将棋プログラミング

将棋に関するソフトウェア開発のノウハウ等。

Xcode 11 で作成した Mac アプリケーションは applicationWillTerminate が呼ばれない

Xcode 11 で作成した Mac アプリケーションでは、applicationWillTerminate と applicationShouldTerminate が呼ばれないことに気が付いた。
ファイルをドロップしたりすると、呼ばれる場合がある。
これらが呼ばれないと、アプリケーション終了時にデータを保存できないので、大変困る。

Xcode 10.1 や Xcode 9.2 で作成すると、呼ばれる。
それぞれで作成したプロジェクトを比較したところ、Xcode 11 で作成した Mac アプリケーションでは、Info.plist に、次の2項目が追加されていることに気が付いた。

<key>NSSupportsAutomaticTermination</key>
<true/>
<key>NSSupportsSuddenTermination</key>
<true/>

NSSupportsSuddenTermination の値を false / NO にすると、applicationWillTerminate と applicationShouldTerminate が呼ばれるようになった。



参考:
developer.apple.com