将棋プログラミング

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

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 が呼ばれるようになった。

追記:
2019/11/13 にリリースされた Xcode 11.2.1 も同様である。