AppDelegateをシングルトンとして使うとメンテできないコードになります。
AppDelegateをどこからでも呼べる便利なシングルトンとして用いてしまうと、AppDelegateがアプリケーションの状態が通知された際の役割以外をもたせることになります。その結果、複数の機能が一つのクラスで表現されてしまうことになります。importの依存関係の意味も不明確になります。
これらの諸々の事情によりAppDelegateに状態が追加されその処理が埋め込まれることでAppDelegateが肥大化していき、メンテ不可能な雪だるまができていきます。
また、テストが困難になるという問題もあります。
以下は関連する議論のリンクです。