Firebase リファレンスが ObserveSingleEvent のコールバックを呼び出していない状況があります。
let uid = FIRAuth.auth()?.currentUser?.uid
FIRDatabase.database().reference().child("users").child(uid).observeSingleEvent(of: .value, with: { (snapShot) in
//code here not called
}) { (error) in
//code here not called either
}
私の場合、FIRAuth.auth()?.currentUser?.uid
Firebase 環境を切り替えるときに、元の uid プロパティが以前のアプリのインストールから何らかの形でキャッシュされているようです (異なる dev および staging .plist ファイルでビルドします)。
ただし、uid の代わりに存在しないランダムな文字列を追加するだけで、不足している参照ノードの空のスナップショットで期待どおりにコールバックが発生します。
persistanceEnabled = true で同期された Firebase 参照を使用していることに言及することは適切だと思います。
observeSingleEvent
メソッド呼び出しの結果が完了しないため、約束が果たされていないか拒否されているため、環境を切り替えているときにアプリがハングする状況にあります。